为什么使用 telnet 命令可以探测目标主机的某个端口是否开放?
Telnet 属于应用层协议,传输层采用 TCP,服务器默认监听 23 端口,通过 telnet 协议可以实现远程登录设备,并以命令方式进行交互。
使用 Telnet 传输数据时,包括用户名、密码等敏感内容都会以明文形式在网络上传输,因此存在严重安全隐患,目前已被 SSH 取代。
由于 Telnet 的输出非常简洁,因此使用 telnet 命令来探测 TCP 端口是否开放时非常方便。
telnet 命令语法:telnet <IP> <PORT>
- 若出现
Connected to xxx或进入空白界面,表示端口开放 - 若提示
Connection refused,表示端口未开放
例如:探测服务器 3306端口是否开放: telnet 10.0.28.88 3306
为什么 telnet 可以用来探测端口? 因为 telnet 协议基于 TCP 实现,它会先通过 TCP 三次握手建立连接,然后再进入应用层交互,因此只要 TCP 能连接成功,就能判断目标端口处于监听状态。
实际上除了 telnet,HTTP、FTP、SSH 等基于 TCP 的协议都可以用于判断端口是否开放,只是输出内容较复杂,不如 telnet 直观。
端口开放,建立连接后为什么会显示空白界面和混乱字符?
例如:假设用 telnet 命令与 MySQL 服务(3306端口)建立连接,服务器会发送 MySQL 协议格式的数据。若使用 MySQL 客户端,它会按照 MySQL 协议解析数据,而 Telnet 客户端并不具备 MySQL 协议解析能力,只会将收到的字节流原样显示,因此看起来像乱码。
若 Telnet 建立连接后显示空白界面,则说明服务器端没有主动发送任何内容。
浙公网安备 33010602011771号