2016-07-21 23 views
0

有没有办法使用socket.recvfrom(buf)来获取所有IP和UPD数据? 具体而言,我想知道UDP报头(源端口,目的端口,长度,应用数据)以及IP细节:没有它从何而来,被发送到哪个地址什么的IP?Python - socket.recvfrom()获取整个IP/UDP数据包?

片段:(?)

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挂起是否有任何变通办法?

+0

是的,你是对的,需要使用'RAW_SOCKET'。 – dsgdfg

+0

从'recvfrom'返回的第二个值实际上是一个包含发送者IP地址和端口的元组(例如'('192.168.4.135',37754'')。 –

回答

0

加入组播GRP似乎工作之前使用

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)