我有一个在某处运行的 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