没有 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 不能测试端口?容器化部署最佳的端口测试方式
写在前面 生产中遇到,整理笔记在容器中没有 telnet ,如何测试远程端口理解不足小伙伴帮忙指正 他的一生告诉我们,不能自爱就不能爱人,憎恨自己也必憎恨他人,最后也会像可恶的自私一样,使人变得极度孤独和悲…...

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

Elasticsearch-倒排索引
Elasticsearch和Lucene的关系 Lucene 是一个开源、免费、高性能、纯 Java 编写的全文检索引擎,可以算作是开源领域最好的全文检索工具包。ElasticSearch 是基于Lucene实现的一个分布式、可扩展、近实时性的高性能搜索与数据分析引擎。 Lucene索引层次结构 Lucene的…...
pagehelper与mybatis-plus冲突的解决办法
背景: springcloud项目开发新功能时因想使用mybatis-plus,原有功能只使用了mybatis,但在开发时发现某个公共模块使用了com.github.pagehelper,且很多模块都集成了该模块依赖(为了保证原有功能不发生问题,…...
解决使用Timer时出现Task already scheduled or cancelled异常的问题
在使用java.util.Timer和java.util.TimerTask执行定时任务时,如果在调用Timer的schedule或scheduleAtFixedRate方法时,报错如下: java.lang.IllegalStateException: Task already scheduled or cancelled 说明当前Timer对象已经执行结束或被取…...
P1175 后缀表达式
题意 传送门 P1175 表达式的转换 题解 编码运算符的优先级,线性复杂度将中缀表达式转换为后缀表达式。为了方便输出,可以用类似对顶栈的结构,初始时右侧栈为后缀表达式;对于每一步计算,右侧栈不断弹出数字到左侧栈&…...
【HashMap】49. 字母异位词分组
49. 字母异位词分组 解题思路 创建一个哈希容器 key是每一个字母异位词 排序之后的词 List是所有的字母异位词因为所有的字母异位词排序之后的结果都是一样的增强for循环遍历字符串数组将每一个字符串转换为字符数组因为字母异位词排序之后 都是一样的将排序之后的字符数组 转…...
golang实现多态
Go 通过接口来实现多态。在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 package mainimport "fmt"type Income in…...

formatter的用法,深拷贝, Object.assign 方法实战。
1. :formatter的用法 :formatter 接受一个函数作为参数,这个函数有三个参数:row,column 和 cellValue。row 是当前行的数据,column 是当前列的数据,cellValue 是当前单元格的值。 <el-table-column prop"SYS…...
Windows上安装和使用git到gitoschina和github上_亲测
Windows上安装和使用git到gitoschina和github上_亲测 git介绍与在windows上安装创建SSHkey在gitoschina使用 【git介绍与在windows上安装】 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 相关介绍可以参考 <百度百科>…...
MATLAB算法实战应用案例精讲-【深度学习】预训练模型GPTXLNet
目录 GPT 1. 介绍 1.1 GPT的动机 2. 模型结构 3. GPT训练过程 3.1 无监督的预训练...
Spring data JPA常用命令
简介 Spring Data JPA是Spring框架的一部分,它提供了一个简化的方式来与关系型数据库进行交互。JPA代表Java持久化API,它是Java EE规范中定义的一种对象关系映射(ORM)标准。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中,策略模式(Strategy Design Pattern)用于定义一系列算法,并将每个算法封装成单独的类,使得它们可以互相替换,让客户端在使用算法时不需要知道具体的实现细节。策略模式是一种行为型设计模式&#x…...

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

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容器后新建容器,数据还在不在3. 参考资料 我们使用Docker的目的就是图它方便下载部署,不用常规的经历下载、配置、安装等等繁琐的步骤。但是与此同时Docker也存在一些缺点,像删除容器后数据就都…...
【ARM 常见汇编指令学习 5 -- arm64汇编指令 wzr 和 xzr】
文章目录 ARM64 zero registerARMv8 zero 寄存器的背景xzr 在寄存器读写操作中的使用 上篇文章:ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别 下篇文章:ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或) ARM64 zero registe…...
4.4 成员变量与局部变量的区别有哪些?
文章目录 4.5 创建一个对象用什么运算符?对象实体与对象引用有何不同?4.6 一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么?4.7 构造方法有哪些特性?4.8 在调用子类构造方法之前会先调用父类没有参数的构造方法…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...