没有 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数的学习和整理2:线性代数的基础知识(整理ing)

目录 0 写在前面的话 网上推荐的线性代数的课程 1 线性代数和矩阵的各种概念 1.1 各种逻辑图 2 关于线性代数入门的各种灵魂发问 2.1 什么是线性&#xff0c;什么是线性相关 &#xff1f; 为什么叫线性变换&#xff1f; 为什么叫线性代数&#xff1f; 2.2 线性代数是人造…

【Linux】进程篇(补):简易 shell 的实现(进程深刻理解、内建命令的使用)

文章目录 makefilemybash.c 代码逻辑框架&#xff08;重要的是&#xff0c;边写边查&#xff01;&#xff09; 命令行提示符&#xff0c;fflush 刷新显示获取 输入的 有效字符串&#xff0c;定义一个字符数组&#xff0c;用 fgets 从键盘上获取&#xff08;注意处理命令行输入…

【疑难杂症专辑】【jlink 关闭了调试接口/进入休眠/停机不可下载】

做开发调试器的正常使用是基础&#xff0c;但有时候会人为造成一些问题。如下场景&#xff1a; 使用四线SW接口&#xff0c;进入低功耗停机模式后不能下载 先点下载&#xff0c;等keil在查找设备时短接复位然后断开把单片机唤醒&#xff0c;看自己的唤醒条件是什么&#xff0c…

Spark性能调优指南来了!

1、什么是Spark Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Spark Core&#xff1a;实现了Spark的基本功能&#xff0c;包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed Dat…

安科瑞智慧空开微型断路器在银行的应用-安科瑞黄安南

应用场景 智能微型断路器与智能网关组合应用于末端回路 功能 1.计量功能&#xff1a;实时上报电压、电流、功率、电能、漏电、温度、频率等电参量&#xff1b; 2.报警功能&#xff1a;过压报警、欠压报警、过流报警、过载报警、漏电报警、超温报警、三相电缺相报警&#xff…

论文笔记:Adjusting for Autocorrelated Errors in Neural Networks for Time Series

2021 NIPS 原来的时间序列预测任务是根据预测论文提出用一阶自回归误差预测 一阶差分&#xff0c;类似于ResNet的残差思路&#xff1f;记为pred&#xff0c;最终的预测结果

【蓝桥杯备考资料】如何进入国赛?

目录 写在前面注意事项数组、字符串处理BigInteger日期问题DFS 2013年真题Java B组世纪末的星期马虎的算式振兴中华黄金连分数有理数类&#xff08;填空题&#xff09;三部排序&#xff08;填空题&#xff09;错误票据幸运数字带分数连号区间数 2014年真题蓝桥杯Java B组03猜字…

维护电脑,让“战友”保持长寿命

目录 维护电脑&#xff0c;让“战友”保持长寿命介绍你的电脑介绍一下你的日常维护措施给出一些你觉得有用的维护技巧不推荐做些什么其他补充总结 无论是学习还是工作&#xff0c;电脑都是IT人必不可少的重要武器&#xff0c;一台好电脑除了自身配置要经得起考验&#xff0c;后…

1.0 python环境安装

1 python环境安装 python安装教程原文 2 PyCharm安装教程 PyCharm安装教程

异常的使用

异常 异常的概念 指的是程序在执行的过程中&#xff0c;出现的非正常的情况&#xff0c;最后会导致JVM的非正常停止。在java等面向对象的语言当中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并且抛出一个异常对象。java处理异常的方式就是中断处理。异常…

Linux内核的I2C驱动框架详解------这应该是我目前600多篇博客中耗时最长的一篇博客

目录 1 I2C驱动整体框架图 2 I2C控制器 2.1 I2C控制器设备--I2C控制器在内核中也被看做一个设备 2.2 i2c控制器驱动程序 2.3 platform_driver结构体中的probe函数做了什么 2.3.1 疑问&#xff1a; i2cdev_notifier_call函数哪里来的 2.3.2 疑问&#xff1a;为什么有两…

Python爬虫-快手photoId

前言 本文是该专栏的第49篇,后面会持续分享python爬虫干货知识,记得关注。 笔者在本专栏的上一篇,有详细介绍平台视频播放量的爬取方法。与该平台相关联的文章,笔者已整理在下方,感兴趣的同学可查看翻阅。 1. Python如何解决“快手滑块验证码”(4) 2. 快手pcursor 3. …

2023 ISSE观察:智能遮阳窗帘行业蓬勃发展,AI设计引热议

7月31日&#xff0c;上海国际智能遮阳与建筑节能展览会落下帷幕。作为智能遮阳的行业展会&#xff0c;展会三天&#xff0c;现场热闹非凡&#xff0c;参展商和观展者络绎不绝。 作为一大行业盛事&#xff0c;2023 ISSE展会方打造了五大展区&#xff0c;除了提供系统门窗装修方案…

javascript学习

一、数据类型 所有的变量都以var定义 数值 js不区分小数和整数 文本图形音频视频数组 var id_arr [1,2,3,4,5]对象 // 定义对象 var person {name: zhangsan,age: 3,tags: [java,js,php]} // 取对象的值 var person_name person.name

二、SQL-6.DCL-1).用户管理

一、DCL介绍 Data Control Language 数据控制语言 用来管理数据库 用户、控制数据库的 访问权限。 二、语法 1、管理用户 管理用户在系统数据库mysql中的user表中创建、删除一个用户&#xff0c;需要Host&#xff08;主机名&#xff09;和User&#xff08;用户名&#xff0…

openGauss学习笔记-26 openGauss 高级数据管理-约束

文章目录 openGauss学习笔记-26 openGauss 高级数据管理-约束26.1 NOT NULL约束26.2 UNIQUE约束26.3 PRIMARY KEY26.4 FOREIGN KEY26.5 CHECK约束 openGauss学习笔记-26 openGauss 高级数据管理-约束 约束子句用于声明约束&#xff0c;新行或者更新的行必须满足这些约束才能成…

基于SHARC+®单核的ADSP-21567KBCZ6、ADSP-21566BBCZ4、ADSP-21566KBCZ4高性能DSP处理器产品

ADSP-2156x 处理器的速度高达 1 GHz&#xff0c;属于 SHARC 系列产品。ADSP-2156x 处理器基于 SHARC 单核。ADSP-2156x SHARC 处理器是 SIMD SHARC 系列数字信号处理器 (DSP) 中的一款产品&#xff0c;采用 ADI 的超级哈佛架构。这些 32 位/40 位/64 位浮点处理器已针对高性能音…

Rust vs Go:常用语法对比(九)

题图来自 Golang vs Rust - The Race to Better and Ultimate Programming Language 161. Multiply all the elements of a list Multiply all the elements of the list elements by a constant c 将list中的每个元素都乘以一个数 package mainimport ( "fmt")func …

Android Unit Test

一、测试基础知识 1.1 测试级别 测试金字塔&#xff08;如图 2 所示&#xff09;说明了应用应如何包含三类测试&#xff08;即小型、中型和大型测试&#xff09;&#xff1a; 小型测试是指单元测试&#xff0c;用于验证应用的行为&#xff0c;一次验证一个类。 中型测试是指…

创造自己的宠物医院预约服务小程序,步骤详解

在现代社会&#xff0c;越来越多的人开始养宠物&#xff0c;而宠物的健康管理也成为了一个重要的话题。为了方便宠物主人随时随地进行宠物医院的管理和服务&#xff0c;开发一个宠物医院管理小程序是很有必要的。今天我们将分享一些制作宠物医院管理小程序的技巧&#xff0c;帮…