2016-07-21 27 views
0

socket.recvfrom(buf)を使用してすべてのIPおよびUPDデータを取得する方法はありますか? 具体的には、udpヘッダー(送信元ポート、宛先ポート、長さ、アプリケーションデータ)とIPの詳細を知りたいのですが、どのipから来たのですか。Python - socket.recvfrom()は完全なIP/UDPパケットを取得しますか?

スニペット:(?)は、Windows上の

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 

イム、およびsocket.SOCK_RAWのハングを使用して、任意の回避策はありますか?マルチキャスト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) 

を使用して

+0

はい、正しく、 'RAW_SOCKET'を使用する必要があります。 – dsgdfg

+0

'recvfrom'から返される2番目の値は、実際には送信者のIPアドレスとポートを含むタプルです(例:'( '192.168.4.135'、37754))。 –

答えて

0

が動作しているようです!

関連する問題