如果一个套接字程序在某个端口运行(例如
我们如何在Linux机器上用
6053
),但是如果规则没有被添加到防火墙中,则recv
、read
和recvfrom
函数会被阻止。我们如何在Linux机器上用
C
或python
检查并报告端口未打开
错误?errno
(原因可能是仍在使用、权限被拒绝、没有人在监听(和其他原因))。 - hexasoft像nmap这样的工具可以帮助确定特定端口是开放还是关闭。
TCP : nmap使用TCP SYN扫描或TCP Connect扫描等技术,如果端口关闭,则服务器将在SYN请求的情况下回复ACK-RST数据包。您可以注意到,在三次握手(连接建立)时就已确定。
UDP : nmap还提供UDP扫描,其中基于ICMP的“端口不可达”数据包将在UDP包到达关闭的UDP端口时返回(这也取决于操作系统中的堆栈)。与TCP不同,UDP不是基于连接的协议,而且ICMP也是无连接的,因此您可能需要发送一些显着数量的UDP数据包,以短时间间隔为基础进行评估并根据响应或某些类似逻辑进行评估。
您可以采用类似的技术/逻辑,并确定特定端口是开放还是关闭,并为用户闪存适当的消息。