简体   繁体   English

Python-socket.recvfrom()获取整个IP / UDP数据包?

[英]Python - socket.recvfrom() get entire IP/UDP packet?

Is there a way to use socket.recvfrom(buf) to get all IP and UPD data? 有没有一种方法可以使用socket.recvfrom(buf)来获取所有IP和UPD数据? specifically, I want to know the udp header (source port, dest port, length, application data) as well as the ip specifics : what ip did it come from, what address was it sent to? 具体来说,我想知道udp标头(源端口,目标端口,长度,应用程序数据)以及ip的详细信息:它来自什么ip,发送到了什么地址?

Snippet: 片段:

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

Im on windows, and using socket.SOCK_RAW hangs (?) Are there any work-arounds? 我在Windows上并使用socket.SOCK_RAW挂起(?)有什么解决方法吗?

Using 使用

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)

before joining multicast grp seems to work! 加入多播grp之前似乎有效!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM