Python - socket.recvfrom() 获取整个 IP/UDP 数据包?
Python - socket.recvfrom() get entire IP/UDP packet?
有没有办法使用socket.recvfrom(buf)
获取所有IP和UPD数据?
具体来说,我想知道 udp header(源端口、目标端口、长度、应用程序数据)以及 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 挂起(?)有没有 work-arounds?
正在使用
sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', DEST_PORT))
sock.setsockopt(socket.IPPROTO_IPV6, socket.IP_HDRINCL, 1)
在加入多播grp之前似乎有效!
有没有办法使用socket.recvfrom(buf)
获取所有IP和UPD数据?
具体来说,我想知道 udp header(源端口、目标端口、长度、应用程序数据)以及 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 挂起(?)有没有 work-arounds?
正在使用
sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', DEST_PORT))
sock.setsockopt(socket.IPPROTO_IPV6, socket.IP_HDRINCL, 1)
在加入多播grp之前似乎有效!