Python 如何在套接字编程中知道端口是否打开/关闭?

Python 如何在套接字编程中知道端口是否打开/关闭?,python,c,sockets,Python,C,Sockets,如果套接字程序在端口上运行(例如6053),并且如果规则未添加到防火墙中,则会阻止函数recvread和recvfrom 如何在C或python中检查此问题,并在linux机器上报告端口未打开错误。尝试使用套接字在该端口上连接。如果连接不成功,然后显示端口未打开的消息。nmap等工具可以帮助确定特定端口是打开还是关闭 TCP: nmap使用TCP SYN扫描或TCP Connect扫描等技术,其中服务器将在关闭端口的情况下使用ACK-RST数据包回复SYN请求。您可以注意到,它是在三方握手(建立

如果套接字程序在端口上运行(例如
6053
),并且如果规则未添加到
防火墙中
,则会阻止函数
recv
read
recvfrom


如何在
C
python
中检查此问题,并在linux机器上报告
端口未打开
错误。

尝试使用套接字在该端口上连接。如果连接不成功,然后显示端口未打开的消息。

nmap等工具可以帮助确定特定端口是打开还是关闭

TCP: nmap使用TCP SYN扫描或TCP Connect扫描等技术,其中服务器将在关闭端口的情况下使用ACK-RST数据包回复SYN请求。您可以注意到,它是在三方握手(建立连接)时确定的

UDP:nmap也有助于UDP扫描,如果UDP数据包到达关闭的UDP端口,则应返回基于ICMP的“端口不可访问”数据包(这也取决于操作系统中的堆栈)。与TCP不同,UDP不是基于连接的协议,ICMP也没有连接,因此您可能需要在短时间间隔内发送大量UDP数据包,并根据响应或类似逻辑进行评估


您可以使用类似的技术/逻辑,确定特定端口是打开的还是关闭的,并为用户刷新相应的消息。

您将无法连接套接字,超时后将收到异常。您感兴趣的是确定发送到端口的数据包是否被某个ip规则阻止,或者确定端口已绑定到程序并准备好接收数据包?连接因其他原因失败,对吗?使用UdpBut如何?请确保使用以太网/WLAN接口的IP地址,因为它可能比
本地主机
有更严格的规则。您必须检查错误,以了解连接失败的原因。在C语言中,您必须检查
errno
(原因可能仍在使用中,权限被拒绝,并且无人监听(和其他人))。