linux中用telnet批量检测端口状态的核心是通过timeout控制超时、grep匹配“^]”识别成功连接、shell循环读取ip:端口列表文件实现自动化;脚本需跳过注释与空行,输出alive.txt和dead.txt分类结果,推荐内网使用,生产环境优先选用nc。

Linux 中用 telnet 批量检测端口状态,核心是把人工执行的 telnet ip port 操作自动化,关键是解决超时控制、结果识别和批量读取 IP+端口列表三个问题。直接用 telnet 交互式命令不行,必须配合 timeout、grep 和 shell 循环来实现非交互、可中断、可判断的批量探测。
准备端口清单文件
新建一个纯文本文件(比如 hosts_ports.txt),每行写一个目标,格式统一为 IP:端口 或 域名:端口,支持以 # 开头的注释行:
192.168.1.10:22web.example.com:443#10.0.0.5:3306 #暂不测试
确保该文件编码为 UTF-8 无 BOM,且无 Windows 回车符(^M),可用 dos2unix hosts_ports.txt 清理。
编写带超时控制的检测脚本
以下是最稳定实用的脚本片段,使用 timeout 防止卡死,用 grep "\^]" 匹配成功连接特征(即出现 Escape character is '^]'):
#!/bin/bash INPUT_FILE="hosts_ports.txt" RESULT_OK="alive.txt" RESULT_FAIL="dead.txt" <p>> "$RESULT_OK" > "$RESULT_FAIL"</p><p>while IFS=: read -r host port; do [[ -z "$host" || "$host" =~ ^[[:space:]]*# ]] && continue echo "Testing $host:$port..."</p><p>if timeout 3 bash -c "echo quit | telnet '$host' '$port' 2>/dev/null" | grep -q "\^]"; then echo "$host:$port OK" >> "$RESULT_OK" else echo "$host:$port FAIL" >> "$RESULT_FAIL" fi done </p><p>echo "Done. OK: $(wc -l </p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill4570" title="linux-performance-analyzer"><img src="https://img.php.cn/upload/skill/000/000/081/179013069298656.jpg" alt="linux-performance-analyzer" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill4570" title="linux-performance-analyzer" class="overflowclass">linux-performance-analyzer</a> <p class="overflowclass">Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。</p> </div> <a rel="nofollow" href="/xiazai/skill4570" title="linux-performance-analyzer" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><p>说明:</p>
-
timeout 3限定单次探测最多耗时 3 秒,避免因网络不可达而长期挂起 -
echo quit | telnet ...实现自动退出,不等待人工输入 -
grep -q "\^]"安静匹配转义后的^]字符,这是 telnet 成功建立 TCP 连接的可靠标志 - 跳过空行和注释行,提升健壮性
运行与验证结果
给脚本添加执行权限并运行:
chmod +x check_ports.sh ./check_ports.sh
运行后生成两个结果文件:
-
alive.txt:列出所有确认开放的IP:端口,例如192.168.1.10:22 OK -
dead.txt:列出所有不通的项,包括连接拒绝(Connection refused)、超时(timed out)或 DNS 失败等情况
如需导出为 Excel,可直接复制内容到表格软件,用「数据 → 分列 → 以冒号分隔」即可拆出 IP、端口、状态三列。
注意事项与替代建议
telnet 在现代系统中主要用于内网调试,因其本身不加密且仅作连通性验证:
- 生产环境请优先用
nc -zv ip port(netcat),更轻量、无依赖、输出更规范 - 若系统未安装 telnet,CentOS/RHEL 用
yum install telnet,Ubuntu/Debian 用apt install telnet - 防火墙、中间设备拦截、服务未监听都会导致失败,需结合
ping或traceroute排查网络可达性 - 不要在公网对非授权目标执行扫描,遵守网络安全规范










