telnet 是什么
telnet 是最早的远程登录协议(RFC 854/855):一条 TCP 连接上跑的是带内协商的字符协议,客户端与服务端用 IAC 选项字节互相约定回显、终端类型等参数。它没有任何加密,口令与命令全部明文。今天它的价值只剩两种:给尚未配置 SSH 的网络设备做初始化,以及用裸 TCP 会话手工验证应用层协议。
基本信息
| 服务 | telnet / telnetd |
|---|---|
| 协议 | TCP |
| 规范 | RFC 854 / RFC 855 |
| 适用平台 | Linux(telnet 客户端包)、Windows(需手动启用功能)、网络设备 |
| 安全等级 | 禁止用于公网与管理面 |
典型使用场景
- 设备初始化:新设备尚无 SSH 配置,先用 telnet 打开基础配置
- 端口探测:手工确认 TCP 端口开放与应用层 banner
- 协议教学:用裸会话观察 SMTP、HTTP 的请求响应格式
- 排障:验证应用层是否可用,而不只是端口是否监听
- 安全审计:在授权范围内抓包复现明文口令的风险
用 telnet 手工验证应用层
用 telnet 手工验证应用层
telnet mail.example.com 25 # 220 开头 = SMTP 就绪
EHLO example.com # 250 开头 = 识别成功
QUIT
telnet example.com 80 # 请求行 + Host 头 + 空行结束
HEAD / HTTP/1.0
Host: example.com典型场景与替代方式
| 场景 | 说明 | 更稳妥的替代 |
|---|---|---|
| 设备初始化 | 新设备尚无 SSH,先用 telnet 打开基础配置 | 带外管理网 + 源 ACL |
| 端口探测 | 确认 TCP 端口开放与 banner | nc -vz 或 Test-NetConnection |
| HTTP 手工请求 | 观察响应头与状态码 | curl -v |
| TLS 服务验证 | 判断证书与握手是否正常 | openssl s_client |
端口探测与加密替代
端口探测与加密替代
nc -vz -w 2 example.com 80
nc -vz -w 2 example.com 22
# Windows
Test-NetConnection example.com -Port 80
# TLS 服务不要用 telnet 判断
openssl s_client -connect example.com:443 -servername example.com </dev/nulltelnet 会话内容可被任意中间节点抓取,包括设备口令;设备管理应使用 SSH 替代,确需保留时仅限带外管理网并加 ACL。
探测二进制协议时注意:telnet 客户端会对 IAC 转义字节(0xFF)做特殊处理,可能吞掉数据造成“连上却无响应”的假象;二进制或 TLS 协议改用 nc、openssl s_client 验证。
运维确需保留设备 telnet 时:限定独立管理 VLAN + 源 ACL + 登录审计,并规划向 SSH 迁移;Windows 端的 telnet 客户端默认未安装,需在“启用或关闭 Windows 功能”中手动勾选。
设备侧迁移路径:先在设备上启用 SSH 并逐条验证可用,再关闭 telnet 服务与 vty 上的明文传输方式,最后清理防火墙里针对 23 的放行规则,避免出现两者都可用的过渡窗口被长期保留。