- 娱乐
telnet测试端口是否通
时间:2010-12-5 17:23:32 作者:焦点 来源:休闲 查看: 评论:0
内容摘要:Telnet 可能是最古老的网络调试工具之一,但它至今仍是排查端口连通性的利器。别嫌它老,在没装图形化工具、或者只想快速验证 TCP 端口是否开放时,一条命令比任何花哨软件都直接。 假设你刚部署了一
Telnet 可能是测试最古老的网络调试工具之一,但它至今仍是端口排查端口连通性的利器。别嫌它老,否通在没装图形化工具、测试或者只想快速验证 TCP 端口是端口否开放时,一条命令比任何花哨软件都直接。否通
假设你刚部署了一台 Linux 服务器,测试Web 服务跑在 8080 端口,端口但浏览器访问超时。否通你第一反应可能是测试防火墙问题,可到底是端口本机没监听,还是否通云安全组没放行?用 telnet 一试便知。打开终端,测试敲下:
telnet 192.168.1.100 8080
如果屏幕立刻显示 `Trying 192.168.1.100...` 然后几秒后出现 `Connected to 192.168.1.100`,端口那端口就是否通通的。这时候你按 `Ctrl+]` 进入 telnet 命令行,再输入 `quit` 退出,干净利落。要是看到 `Connection refused`,说明端口没监听,服务没起来或者绑定了别的地址。如果一直卡在 `Trying...` 不动,最后报 `Connection timed out`,那就是有东西在拦——多半是防火墙或安全组把包丢了。
这里有个容易踩的坑。很多人拿 telnet 测完端口,看到 `Connected` 就以为万事大吉,其实连接成功只代表 TCP 握手完成了。有些服务(比如 HTTP)会在握手后立刻发数据,你可能会看到一堆乱码般的响应头,那是正常的。但有些服务(比如纯 TCP 转发)可能静默等待客户端发送数据,这时候你看到 `Connected` 后屏幕毫无反应,别慌,端口确实是通的。
telnet 还有个隐藏用法——直接测 SMTP 或 HTTP 协议。比如 `telnet smtp.example.com 25`,连上后输入 `EHLO test.com`,服务器会返回支持的命令列表。这比用专业邮件调试工具更轻量,尤其适合在服务器上快速验证邮件服务是否正常。同理,`telnet example.com 80` 后输入 `GET / HTTP/1.1` 加两个回车,能看到 HTTP 响应码,200 就是好的,403 或 502 说明 Web 服务有配置问题。
不过 telnet 有个致命短板——它只支持 TCP 协议。想测 UDP 端口(比如 DNS 的 53 或 NTP 的 123),telnet 完全无能为力,因为 UDP 是无连接的,不存在“握手成功”这回事。这时候得换 `nc -u` 或者 `nmap` 的 `-sU` 参数。另外,现在很多系统默认不装 telnet 客户端了,Windows 10 以上要手动在“启用或关闭 Windows 功能”里勾选“Telnet 客户端”,Ubuntu 则要 `apt install telnet`。嫌麻烦的话,用 `nc -zv`(netcat)效果类似,还支持 UDP。
实际工作中我更喜欢组合拳。先 telnet 测端口通不通,通了再用 curl 或直接浏览器看应用层响应。如果 telnet 都连不上,就别浪费时间排查应用了,直接查网络策略和防火墙日志。有一次生产环境告警,我 telnet 到数据库端口 3306 显示 `Connection refused`,结果发现是 MySQL 只监听了 127.0.0.1,改配置文件里的 `bind-address` 后立马解决。要是当时直接看应用日志,可能得绕半小时弯路。
最后提醒一句,telnet 是明文传输,别用它连 SSH 或 HTTPS 端口做验证以外的操作。测端口没问题,但真要远程管理,还是老老实实用加密工具。工具不分新旧,能解决问题就是好工具——下次端口不通,先别急着装监控软件,一条 telnet 命令就能帮你缩小排查范围。