为何使用TCP连接192.168.10.11的5060端口时出现TimeoutError?
问题分析与解决方案
你的问题核心在于协议不匹配,让我一步步给你拆解:
你的代码使用的是TCP协议
你创建socket时用了socket.SOCK_STREAM,这是TCP套接字,而TCP需要服务器端监听对应端口并接受连接请求。但你运行connect()时,服务器并没有在TCP 5060端口监听,所以连接请求超时,抛出TimeoutError。服务器的5060端口是UDP协议
你用nmap扫描时加了-sU参数(指定UDP扫描),结果显示5060/udp open|filtered sip——SIP协议默认确实常用UDP 5060端口,而非TCP。UDP是无连接协议,不存在“建立连接”的过程,所以你用TCP的connect()方法去尝试连接UDP端口,服务器根本不会响应这个请求,自然就超时了。
修正后的代码示例
如果你要和这个SIP服务器通信,需要改成UDP套接字:
import socket HOST = '192.168.10.11' PORT = 5060 # 创建UDP套接字 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP无需connect,直接发送数据 message = b'Your SIP request here' s.sendto(message, (HOST, PORT)) # 接收响应 data, addr = s.recvfrom(1024) print(f"Received from {addr}: {data.decode()}") s.close()
另外补充下:nmap的open|filtered状态意味着它无法完全确定端口是开放还是被防火墙过滤,但至少UDP 5060端口没有完全阻断,你可以用上面的UDP代码尝试通信。
内容的提问来源于stack exchange,提问作者Raady
相关产品推荐
相关产品推荐

