当前位置: 首页 > news >正文

没有 telnet 不能测试端口?容器化部署最佳的端口测试方式

写在前面


  • 生产中遇到,整理笔记
  • 在容器中没有 telnet ,如何测试远程端口
  • 理解不足小伙伴帮忙指正

他的一生告诉我们,不能自爱就不能爱人,憎恨自己也必憎恨他人,最后也会像可恶的自私一样,使人变得极度孤独和悲观绝望。 —— 赫尔曼·黑塞《荒原狼》


没有 telnet ,就不能测试端口了?和小伙伴们分享一些容器下端口测试的方法

Demo 端口环境准备,相关网段 192.168.26.55机器,远程机器,监听 55555 端口

┌──[root@liruilongs.github.io]-[~]
└─$ coproc python3 -m http.server 55555
[1] 11694

测试环境,相同网段 192.168.26.100 机器

┌──[root@vms100.liruilongs.github.io]-[~]
└─$wget 192.168.26.55:55555 -v
--2023-04-11 16:59:35--  http://192.168.26.55:55555/
正在连接 192.168.26.55:55555... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK

下文中的 timeout $number 非必须,用于约束命令超时时间

/dev/tcp

利用 /dev/tcp 虚拟文件系统 检查端口是打开还是关闭,使用下面这样的命名就可以测试

 </dev/tcp/172.30.127.22/3306

看一个Demo,使用 Linux 中的 /dev/tcp 虚拟文件系统连接到远程主机的 55555 端口。用于测试远程主机是否在该端口上侦听或建立到该端口的连接。 /dev/proto/host/port/ 对应测试数据 /dev/tcp/$host/$port

这里为了好看,我们做一些简单修饰

通的情况

┌──[root@vms100.liruilongs.github.io]-[~]
└─$(timeout 1 bash -c '</dev/tcp/192.168.26.55/55555' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/null
PORT OPEN

不通的情况

┌──[root@vms100.liruilongs.github.io]-[~]
└─$(timeout 1 bash -c '</dev/tcp/192.168.26.55/443' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/null
PORT CLOSED

原理,Linux 的真值和编程语言代码中的真值是不同的。根据执行的返回值确认是否通

┌──[root@vms100.liruilongs.github.io]-[~]
└─$bash -c '</dev/tcp/192.168.26.55/55555' && echo $?
0
┌──[root@vms100.liruilongs.github.io]-[~]
└─$bash -c '</dev/tcp/192.168.26.55/443' && echo $?
bash: connect: 拒绝连接
bash: /dev/tcp/192.168.26.55/443: 拒绝连接
┌──[root@vms100.liruilongs.github.io]-[~]
└─$

换成分号的情况我们就可以正常显示。

┌──[root@vms100.liruilongs.github.io]-[~]
└─$bash -c '</dev/tcp/192.168.26.55/443' ;echo $?
bash: connect: 拒绝连接
bash: /dev/tcp/192.168.26.55/443: 拒绝连接
1

需要注意的是,这个命令可能不适用于所有系统,因为它依赖于 /dev/tcp 虚拟文件系统是否启用。此外,这个命令应该只用于测试或诊断目的,而不用于任何恶意活动。

如果三层都不通,对于不同的情况也可以具体分析

端口通的情况

[root@master ~]# </dev/tcp/172.30.127.22/3306

IP 都不通的情况

[root@master ~]# </dev/tcp/172.30.127.23/3306
bash: connect: No route to host
bash: /dev/tcp/172.30.127.23/3306: No route to host
[root@master ~]# </dev/tcp/192.168.26.55/55555
bash: connect: Network is unreachable
bash: /dev/tcp/192.168.26.55/55555: Network is unreachable
[root@master ~]#
  • Network is unreachable :当源设备无法找到到达目标网络的路由时,会出现此错误。这意味着源设备的路由表中没有目标设备所在的网络的条目。这可能是因为网络已经关闭,或者路由表中存在配置错误。
  • No route to host :当源设备可以找到到达目标网络的路由,但无法找到该网络上特定主机的路由时,会出现此错误。这意味着源设备的路由表中有目标设备所在的网络的条目,但没有目标设备的特定IP地址的条目。这可能是因为目标设备已关闭,或者路由表中存在配置错误。

curl

curl是用于从服务器传输数据或将数据传输到服务器的工具。它支持以下协议:DICT,FILE,FTP,FTPS,GOPHER,GOPHERS,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP,RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET,TFTP,WS和WSS。它由 libcurl 提供支持,适用于所有与传输相关的功能

通的情况

┌──[root@vms100.liruilongs.github.io]-[~]
└─$timeout 3 curl -vvv telnet://192.168.26.55:55555
* About to connect() to 192.168.26.55 port 55555 (#0)
*   Trying 192.168.26.55...
* Connected to 192.168.26.55 (192.168.26.55) port 55555 (#0)

不通的情况

┌──[root@vms100.liruilongs.github.io]-[~]
└─$timeout 3 curl -vvv telnet://192.168.26.55:443
* About to connect() to 192.168.26.55 port 443 (#0)
*   Trying 192.168.26.55...
* 拒绝连接
* Failed connect to 192.168.26.55:443; 拒绝连接
* Closing connection 0
curl: (7) Failed connect to 192.168.26.55:443; 拒绝连接
┌──[root@vms100.liruilongs.github.io]-[~]
└─$

nc OR nact

nc 或者 ncat 命令也可以用于测试远程主机是否在指定端口上侦听或建立到该端口的连接。

┌──[root@vms100.liruilongs.github.io]-[~]
└─$which nc
/usr/bin/nc

例如,要测试远程主机的 55555 端口是否打开,可以使用以下命令:

通的情况

┌──[root@vms100.liruilongs.github.io]-[~]
└─$nc -vz 192.168.26.55 55555
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.26.55:55555.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
┌──[root@vms100.liruilongs.github.io]-[~]
└─$

不通的情况

┌──[root@vms100.liruilongs.github.io]-[~]
└─$nc -vz 192.168.26.55 443
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

或者可以使用 ncat,ncat 是 nmap 网络工具套件的一部分,是一个更现代的工具。它被设计为 nc 的更丰富的替代品。它支持 SSL/TLS 加密、IPv6、SOCKS 代理等。

┌──[root@vms100.liruilongs.github.io]-[~]
└─$ncat -zv 192.168.26.55 55555
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.26.55:55555.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
┌──[root@vms100.liruilongs.github.io]-[~]
└─$ncat -zv 192.168.26.55 443
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.
┌──[root@vms100.liruilongs.github.io]-[~]
└─$

nmap

端口扫描工具,会扫描所有的端口,一般不建议使用

┌──[root@vms100.liruilongs.github.io]-[~]
└─$rpm -ql nmap  || yum -y install nmap
┌──[root@vms100.liruilongs.github.io]-[~]
└─$nmap -sT 192.168.26.55 443Starting Nmap 6.40 ( http://nmap.org ) at 2023-04-11 16:44 CST
Nmap scan report for 192.168.26.55 (192.168.26.55)
Host is up (0.0025s latency).
Not shown: 994 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
222/tcp   open  rsh-spx
8080/tcp  open  http-proxy
50000/tcp open  ibm-db2
55555/tcp open  unknown
MAC Address: 00:0C:29:9F:48:81 (VMware)Nmap done: 2 IP addresses (1 host up) scanned in 1.74 seconds

python

Linux 环境一般都 python 环境,要使用 Python 检查远程端口是否打开,可以使用 socket 模块

端口通的 Demo

┌──[root@vms100.liruilongs.github.io]-[~]
└─$python2
Python 2.7.5 (default, Aug  4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sock.connect(('192.168.26.55', 55555))
>>>

端口不通的 Demo

┌──[root@vms100.liruilongs.github.io]-[~]
└─$python2
Python 2.7.5 (default, Aug  4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sock.connect(('192.168.26.55', 443))
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib64/python2.7/socket.py", line 224, in methreturn getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused
>>>
┌──[root@vms100.liruilongs.github.io]-[~]
└─$

关于容器下中端口测试就可小伙伴分享这里,感觉没什么差别,Demo 都没有做容器里做。

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知。


https://medium.com/geekculture/linux-useful-tricks-telnet-alternatives-ed9f342149a1


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

相关文章:

没有 telnet 不能测试端口?容器化部署最佳的端口测试方式

写在前面 生产中遇到&#xff0c;整理笔记在容器中没有 telnet &#xff0c;如何测试远程端口理解不足小伙伴帮忙指正 他的一生告诉我们&#xff0c;不能自爱就不能爱人&#xff0c;憎恨自己也必憎恨他人&#xff0c;最后也会像可恶的自私一样&#xff0c;使人变得极度孤独和悲…...

漏洞发现-BurpSuite插件-Fiora+Fastjson+Shiro

BurpSuite插件安装 插件&#xff1a;Fiora Fiora是LoL中的无双剑姬的名字&#xff0c;她善于发现对手防守弱点&#xff0c;实现精准打击。该项目为PoC框架nuclei提供图形界面&#xff0c;实现快速搜索、一键运行等功能&#xff0c;提升nuclei的使用体验。 该程序即可作为burp插…...

Elasticsearch-倒排索引

Elasticsearch和Lucene的关系 Lucene 是一个开源、免费、高性能、纯 Java 编写的全文检索引擎&#xff0c;可以算作是开源领域最好的全文检索工具包。ElasticSearch 是基于Lucene实现的一个分布式、可扩展、近实时性的高性能搜索与数据分析引擎。 Lucene索引层次结构 Lucene的…...

pagehelper与mybatis-plus冲突的解决办法

背景&#xff1a; springcloud项目开发新功能时因想使用mybatis-plus&#xff0c;原有功能只使用了mybatis&#xff0c;但在开发时发现某个公共模块使用了com.github.pagehelper&#xff0c;且很多模块都集成了该模块依赖&#xff08;为了保证原有功能不发生问题&#xff0c;…...

解决使用Timer时出现Task already scheduled or cancelled异常的问题

在使用java.util.Timer和java.util.TimerTask执行定时任务时&#xff0c;如果在调用Timer的schedule或scheduleAtFixedRate方法时&#xff0c;报错如下&#xff1a; java.lang.IllegalStateException: Task already scheduled or cancelled 说明当前Timer对象已经执行结束或被取…...

P1175 后缀表达式

题意 传送门 P1175 表达式的转换 题解 编码运算符的优先级&#xff0c;线性复杂度将中缀表达式转换为后缀表达式。为了方便输出&#xff0c;可以用类似对顶栈的结构&#xff0c;初始时右侧栈为后缀表达式&#xff1b;对于每一步计算&#xff0c;右侧栈不断弹出数字到左侧栈&…...

【HashMap】49. 字母异位词分组

49. 字母异位词分组 解题思路 创建一个哈希容器 key是每一个字母异位词 排序之后的词 List是所有的字母异位词因为所有的字母异位词排序之后的结果都是一样的增强for循环遍历字符串数组将每一个字符串转换为字符数组因为字母异位词排序之后 都是一样的将排序之后的字符数组 转…...

golang实现多态

Go 通过接口来实现多态。在 Go 语言中&#xff0c;我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法&#xff0c;那它就实现了该接口。现在我们来看看&#xff0c;利用接口&#xff0c;Go 是如何实现多态的。 package mainimport "fmt"type Income in…...

formatter的用法,深拷贝, Object.assign 方法实战。

1. :formatter的用法 :formatter 接受一个函数作为参数&#xff0c;这个函数有三个参数&#xff1a;row&#xff0c;column 和 cellValue。row 是当前行的数据&#xff0c;column 是当前列的数据&#xff0c;cellValue 是当前单元格的值。 <el-table-column prop"SYS…...

Windows上安装和使用git到gitoschina和github上_亲测

Windows上安装和使用git到gitoschina和github上_亲测 git介绍与在windows上安装创建SSHkey在gitoschina使用 【git介绍与在windows上安装】 Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 相关介绍可以参考 <百度百科>…...

MATLAB算法实战应用案例精讲-【深度学习】预训练模型GPTXLNet

目录 GPT 1. 介绍 1.1 GPT的动机 2. 模型结构 3. GPT训练过程 3.1 无监督的预训练...

Spring data JPA常用命令

简介 Spring Data JPA是Spring框架的一部分&#xff0c;它提供了一个简化的方式来与关系型数据库进行交互。JPA代表Java持久化API&#xff0c;它是Java EE规范中定义的一种对象关系映射&#xff08;ORM&#xff09;标准。Spring Data JPA在JPA的基础上提供了更高级的抽象&…...

Excel的使用

1.EXCEL诞生的意义 1.1 找到想要的数据 1.2 提升输入速度 2.数据分析与可视化操作 目的是提升数据的价值和意义 3.EXCEL使用的内在意义和外在形式 4.EXCEL的价值 4.1 解读及挖掘数据价值 4.2 协作板块 4.3 展示专业度 4.4 共享文档内容 5.人的需求》》软件功能...

大数据课程D4——hadoop的MapReduce

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解MapReduce的作用和特点; ⚪ 掌握MapReduce的组件; ⚪ 掌握MapReduce的Shuffle; ⚪ 掌握MapReduce的小文件问题; ⚪ 掌握MapReduce的压缩机制; ⚪ 掌握MapReduce的推测执行机制…...

java策略模式

在Java中&#xff0c;策略模式&#xff08;Strategy Design Pattern&#xff09;用于定义一系列算法&#xff0c;并将每个算法封装成单独的类&#xff0c;使得它们可以互相替换&#xff0c;让客户端在使用算法时不需要知道具体的实现细节。策略模式是一种行为型设计模式&#x…...

Vue2封装自定义全局Loading组件

前言 在开发的过程中&#xff0c;点击提交按钮&#xff0c;或者是一些其它场景总会遇到Loading加载框&#xff0c;PC的一些UI库也没有这样的加载框&#xff0c;无法满足业务需求&#xff0c;因此可以自己自定义一个&#xff0c;实现过程如下。 效果图 如何封装&#xff1f; 第…...

docker 搭建jenkins

1、拉取镜像 docker pull jenkins/jenkins:2.4162、创建文件夹 mkdir -p /home/jenkins_mount chmod 777 /home/jenkins_mount3、运行并构建容器 docker run --restartalways -d -p 10240:8080 -p 10241:50000 -v /home/jenkins_mount:/var/jenkins_home -v /etc/localtime:…...

【Docker】Docker 部署 Mysql 并设置数据持久化

文章目录 1. Docker持久化MySQL2. 测试删除MySQL容器后新建容器&#xff0c;数据还在不在3. 参考资料 我们使用Docker的目的就是图它方便下载部署&#xff0c;不用常规的经历下载、配置、安装等等繁琐的步骤。但是与此同时Docker也存在一些缺点&#xff0c;像删除容器后数据就都…...

【ARM 常见汇编指令学习 5 -- arm64汇编指令 wzr 和 xzr】

文章目录 ARM64 zero registerARMv8 zero 寄存器的背景xzr 在寄存器读写操作中的使用 上篇文章&#xff1a;ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别 下篇文章&#xff1a;ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或) ARM64 zero registe…...

4.4 成员变量与局部变量的区别有哪些?

文章目录 4.5 创建一个对象用什么运算符?对象实体与对象引用有何不同?4.6 一个类的构造方法的作用是什么? 若一个类没有声明构造方法&#xff0c;该程序能正确执行吗? 为什么?4.7 构造方法有哪些特性&#xff1f;4.8 在调用子类构造方法之前会先调用父类没有参数的构造方法…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...