Bash 内置端口探测工具

在这里插入图片描述



前言

日常运维排查网络连通、端口开放时,大家常用 telnetnccurl 工具,但很多服务器出于安全精简,不会预装这类第三方工具。 此时 Bash 自带的虚拟设备 /dev/tcp 就能派上用场,仅靠系统原生 echo 命令,无需额外安装软件,一键检测任意 TCP 端口是否可达,本文完整拆解原理、用法、实战场景与避坑细节。

核心命令示例

# 检测 192.168.1.10 22端口(SSH服务)
echo > /dev/tcp/192.168.1.10/22

逐段拆解命令含义

/dev/tcp/目标IP/端口:Bash 专属虚拟设备

/dev/tcp 并不是磁盘上真实存在的文件,是 Bash 解释器内置提供的TCP 套接字虚拟接口,仅在 bash 环境生效,sh、dash 不支持。 固定语法:

/dev/tcp/主机地址/端口号

# - 主机地址:支持 IP、域名、容器名(Docker/K8s 内部 DNS)
# - 端口:纯数字 TCP 端口,不支持 UDP

当 Bash 解析到该路径时,会自动发起 TCP 三次握手,尝试建立连接。

echo > 输出重定向触发连接

echo 本身不输出任何有效内容,> 是标准输出重定向符号: 将 echo 的空输出流写入 /dev/tcp/xxx/xxx,这个写入动作会强制 Bash 完成 TCP 握手流程。

  • 连接建立成功:握手完成,无报错,命令直接结束;
  • 连接失败:握手超时 / 拒绝,直接抛出标准错误日志。

两种执行结果直观区分

场景 1:端口开放、网络通畅(SSH 正常运行)

执行无任何报错,直接返回命令行提示符:

[root@localhost ~]# echo > /dev/tcp/192.168.1.10/22
[root@localhost ~]#

场景 2:端口关闭 / 防火墙拦截 / 主机离线

抛出 Connection refused 连接拒绝错误:

[root@localhost ~]# echo > /dev/tcp/192.168.1.10/22
bash: connect: Connection refused
bash: /dev/tcp/192.168.1.10/22: Connection refused

其他报错释义:

  1. Name or service not known:域名解析失败;
  2. Connection timed out:路由可达,但防火墙拦截、无响应。

对比传统端口检测工具

方式依赖优势劣势
echo /dev/tcp仅 bash零安装、极简、快速仅 TCP、bash 专属、无超时控制
telnet需单独安装可交互查看服务返回很多系统默认不装,已逐步淘汰
nc (netcat)需安装功能强大、支持 UDP、端口扫描最小化系统无预装
curl需安装支持 HTTP/HTTPS、可看返回码只能检测 HTTP 类端口,纯 TCP 端口探测笨重

总结

echo > /dev/tcp/IP/port 是运维人员必备的极简端口探测手段,在无额外工具的应急环境下至关重要(尤其是极简的容器镜像)。 日常排查 Milvus、Redis、ETCD、SSH、数据库端口连通性时,一条命令即可快速定位网络阻断、服务未启动等问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GopherSky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值