所以...我们知道我们可以使用以下命令来测试防火墙上的端口是否打开:
telnet SERVERIP PORT
..但据我所知,有些服务无法使用 telnet 进行测试,因为例如:telnet 不知道该服务正在使用的协议,并且 telnet 会报告端口已关闭,但实际上该服务已启动并运行。
问:第一:我关于 telnet 的说法正确吗?第二:用什么来测试服务器上端口是否打开? (所以它不会被防火墙阻止) - 有没有任何unix工具可以做到这一点?
答案1
关于第一个问题,也许该服务不等待交互式输入。也可能有其他解释。第二次, 地图可以用来测试防火墙。有很多选择。
扫描前 1,000 个端口(默认):
nmap -v -A -PN hostname.domainname.com
或者也许是一个特定的范围:
nmap -v -A -p 10000-11000 -PN hostname.domainname.com
答案2
您关于 telnet 不适用于所有情况的评论让我感到困惑,因此我在连接到某些任意端口(在本例中是 HTTP 服务器和 DICOM 服务器)时运行了快速网络跟踪。
在所有情况下,我都可以确认 telnet 只是打开 TCP 连接的套接字,但在您显式键入一行之前,不会尝试从中读取或写入。
这意味着您的 TCP 堆栈将仅启动标准 TCP 握手,并且所涉及的三个数据包 (SYN/SYN-ACK/ACK) 将是唯一通过网络传输的数据包。当然,这些并不特定于任何应用程序。
tl;dr 在我看来,telnet 实际上绝对适合测试特定端口是否打开,无论其后面侦听的服务器使用的协议是什么。