Telnet

基于 TCP 协议,用于通过一个终端登陆到其他服务器。

#status / growing #type / concept

[!info] related notes

Telnet

一句话定义

Telnet 是一种应用层远程终端协议(端口 23),通过 TCP 连接在客户端与服务器之间传输键盘输入和屏幕输出,实现远程命令行操作。

核心机制 / 工作原理

连接流程

  1. 客户端发起 TCP 连接到服务器的 23 端口
  2. 服务器要求输入用户名和密码(明文)
  3. 认证通过后,服务器分配一个远程 shell
  4. 客户端的键盘输入通过 TCP 发送到服务器
  5. 服务器的输出回显到客户端终端

NVT(Network Virtual Terminal)

Telnet 协议定义了 NVT 这个抽象终端模型:

  • 客户端将本地终端格式转换为 NVT 格式发送
  • 服务器将 NVT 格式转换为本地终端格式处理
  • 两端通过 协商选项(option negotiation) 调整终端参数(如回显、行模式等)

数据传输特点

  • 所有数据以明文形式传输,包括用户名和密码
  • 基于 TCP,保证可靠传输但无加密
  • 每个字符通常单独发送(逐字符模式),延迟敏感
  • 默认端口:23(可通过命令行指定其他端口)

最小例子

# 连接到远程服务器(默认端口 23)
telnet 192.168.1.100

# 测试某个端口是否开放(不登录,只看连接)
telnet 10.0.0.1 3306

# 手动发送 HTTP 请求
telnet example.com 80
# 连接后输入:
GET / HTTP/1.1
Host: example.com
# (按两次 Enter 发送请求)

telnet 命令常用操作

在 telnet 会话中可以使用转义命令(Ctrl+] 进入命令模式):

命令说明
open host [port]连接到指定主机和端口
close关闭当前连接
quit退出 telnet
status显示当前连接状态
set echo切换本地回显
set term ansi设置终端类型
send break发送中断信号
Ctrl+]进入命令模式(不关闭连接)
# 交互示例
$ telnet
telnet> open 192.168.1.100 22
Trying 192.168.1.100...
Connected to 192.168.1.100.
SSH-2.0-OpenSSH_8.9
# 看到 SSH banner,说明端口 22 开放
telnet> close
telnet> quit

Telnet vs SSH 对比

维度TelnetSSH
端口2322
加密无(明文)全程加密(AES/ChaCha20)
认证用户名/密码密钥认证、密码、证书
完整性HMAC 校验
端口转发不支持支持(隧道)
文件传输不支持支持(SCP/SFTP)
协议开销极低略高(加密握手)
现代地位基本废弃标准远程管理协议

边界与常见误解

  • 误解:Telnet 完全没用了。 实际上它仍用于快速测试 TCP 端口连通性(如 telnet host port),此时只验证连接建立,不涉及登录。
  • 误解:Telnet 只能登录。 它本质上是通用的 TCP 客户端,可以手动与任何文本协议交互(HTTP、SMTP、Redis 等)。
  • 边界:Telnet 不等于”远程桌面”。 它只传输文本流,不传图形界面。
  • 边界:Windows 10/11 默认未安装 Telnet 客户端。 需通过”启用或关闭 Windows 功能”手动开启,或使用 PowerShell 的 Test-NetConnection 替代端口测试。
  • 安全警告: 绝不要在公网使用 Telnet 管理服务器。所有数据(含密码)可被网络嗅探捕获,且无完整性校验,易被中间人篡改。

现代替代方案

替代方案特点
SSH远程管理的行业标准,全程加密
Mosh面向不稳定网络,支持漫游和断线恢复
Web Terminal基于浏览器的终端(Wetty、ttyd)
Test-NetConnectionPowerShell 内置,仅测试端口连通性
nc (netcat)Unix 下的通用 TCP/UDP 工具

仍存在的使用场景

  • 网络设备(交换机、路由器)的控制台调试(管理口通常只支持 Telnet)
  • 快速测试 TCP 端口连通性(telnet host port
  • 遗留系统的维护(老式 Unix 服务器、工业控制系统、嵌入式设备)
  • 学习网络协议时的手动交互实验(手动发 HTTP/SMTP 命令)
  • 某些 ISP 设备和 VoIP 电话的管理接口
创建于 2026/3/12 更新于 2026/5/27