为何telnet可以测试端口的开放性

网络故障排除的过程中,我们经常用 telnet host port 的方式,查看目标端口是不是可以访问,如果不能访问,那要看看是不是被防火墙拦截或者是没有开启端口监听进程。

这里我就有个疑问,为什么telnet 这么特殊,能够用来测试端口开放性?为什么我们不能用应用层的FTP、HTTP来测试端口的开放性呢?

查了一下资料,大部分答案都是这样解释的,telnet命令在运行telnet协议之前,会先建立TCP连接,然后在这个连接中发送字符串,远端socket接收这个字符串,并根据自身服务完成字符串解析。如果没有远端的socket响应请求,那么TCP连接建立失败,用户就能够知道远端host的端口无法响应TCP握手。

这个解释虽然原理是对的,但我总感觉这没有说到点子上。毕竟FTP、HTTP协议都会触发TCP连接,上面的答案没有回答,为何只有telnet命令能够测试端口开放性,而其它协议不可以。

带着这个疑问,我查了查telnet协议,发现本质原因应该是telnet命令能够触发操作系统提供的一个虚拟终端,让用户能够通过这个shell跟目标host发送报文,而这个shell的状态能够表征远端host端口是否开放。并不是telnet协议有多神奇,而是系统自带的telnet命令为其附赠的虚拟终端在发挥作用。

所以我大胆的预测,只要能够触发系统shell的命令,理论上都可以检测端口,并不是只有telnet可以。于是我赶紧尝试了一下FTP命令,发现果然如此。

FTP命令也能测试端口的开放性

理论被实践验证的感觉就是爽。

你可能感兴趣的:(为何telnet可以测试端口的开放性)