telnet 还剩什么用
telnet 作为登录协议早已被淘汰:所有内容明文传输,包括口令。但它作为「手写协议调试器」依然好用:连上端口后可以直接敲明文协议命令,看到服务器返回的原始字节。判断端口通不通、服务是不是在监听、SMTP 问候语是否正常,用它几秒就能得到答案。
基本信息
| 适用平台 | Linux / macOS / Windows 均可,但多数系统默认不再预装 |
|---|---|
| 语法 | telnet 主机 端口 |
| 退出方式 | 先按 Ctrl+] 进入命令模式,再输入 quit |
| 替代工具 | nc、以及 shell 自带的 /dev/tcp 写法 |
典型使用场景
- 确认某个端口是否开放、是否有服务在监听
- 手工发一条 HTTP 请求,直接看响应头与状态码
- 检查邮件服务的问候语是否正常返回
- 验证缓存或消息类服务的明文命令交互
- 在不方便安装工具的环境里做最基础的端口探测
常用示例
常用示例
telnet 10.0.0.5 80 # 连上后手工输入请求
GET /health HTTP/1.0
Host: app.internal
# 空行(再按一次回车)才发送
telnet 10.0.0.5 25 # 看 SMTP 问候语
printf 'GET / HTTP/1.0\r\nHost: x\r\n\r\n' | timeout 5 telnet 10.0.0.5 80 # 非交互式测试
nc -vz 10.0.0.5 80 # 只测端口连通,比 telnet 更省事
timeout 3 bash -c 'echo > /dev/tcp/10.0.0.5/80' && echo open # 无额外工具时的替代写法常见手测对象
| 服务 | 常用端口 | 可观察内容 |
|---|---|---|
| HTTP 服务 | 80 | 响应状态行与响应头 |
| HTTPS 服务 | 443 | 不能直接手测:需 TLS 能力,用专用客户端 |
| 邮件收信 | 25 | 服务问候语与支持的命令 |
| 缓存或键值服务 | 6379 | 连上后可直接发送简单命令看应答 |
| 任意端口 | 自定义 | 能连上说明监听与网络策略都通 |
不要把 telnet 用于日常登录或传输任何凭据:全程明文,网络路径上任何一跳都能看到内容。
使用要点
- 连不上时先区分是拒绝连接还是超时,两者指向的故障不同
- 明文协议手测时注意行尾必须符合协议要求,否则服务端一直等数据
- 加密服务无法用 telnet 手测,改用支持 TLS 的客户端
- 在受限环境里没有该工具时,用系统自带能力或其它客户端替代
- 脚本化时给交互式客户端加超时,避免卡住整条流水线
退出交互式会话需要先进入命令模式再退出,直接关终端会残留一个半开的连接,长时间挂着会占用对端资源。