无需实际连接即可测试与端口的连接

无需实际连接即可测试与端口的连接

我有一个在某处运行的 python 套接字服务器(单线程,只接受一个连接)。

我连接到该端口并做我的事情。

如何在不建立任何连接的情况下检测端口是打开还是关闭?我的意思是,我不想关闭端口来查看它是否打开 :-)

我已经尝试过了nc -zvv ip port但是这会关闭脚本(因为它实际上连接到了端口)。

答案1

使用端口扫描工具,例如nmap。运行时具有足够的权限(在 Linux 上需要 cap_net_raw 权限,在其他 Unix 系统上需要“root”权限)该工具有几种扫描模式,不需要完成 TCP 握手。

特权模式下的默认扫描模式是“TCP SYN 扫描”(选项-sS),它会尝试启动 TCP 握手,但会立即重置它。这样,程序就不会收到有关连接尝试的通知,因为联系。

要扫描特定端口,请添加-p <ports>选项。

$ sudo nmap --reason -sS -p 22,53,79,80 localhost
PORT    STATE  SERVICE REASON
22/tcp  open   ssh     syn-ack
79/tcp  open   finger  syn-ack
143/tcp closed imap    reset
443/tcp closed https   reset

相关内容