【发布时间】:2016-07-21 12:13:08
【问题描述】:
有没有办法使用socket.recvfrom(buf) 获取所有IP 和UPD 数据?
具体来说,我想知道 udp 标头(源端口、目标端口、长度、应用程序数据)以及 ip 细节:它来自什么 ip,发送到什么地址?
片段:
addrinfo = socket.getaddrinfo(MULTICAST_ADDR, None)[0]
sock = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', DEST_PORT))
#Join Multicast grp.
group = socket.inet_pton(addrinfo[0], addrinfo[4][0])
mreq = group + struct.pack('@I', 0)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
while True:
udp_data,ip_sender = sock.recvfrom(4000)
#Only returns udp data field and ip of sender
我在 Windows 上,并且使用 socket.SOCK_RAW 挂起(?)有任何解决方法吗?
【问题讨论】:
-
是的,你是对的,需要使用
RAW_SOCKET。 -
recvfrom返回的第二个值实际上是一个包含发送者IP地址和端口的元组(例如('192.168.4.135', 37754))。