2016-01-22 43 views
0

基本上我有一个计划,A,实时发送结果(不仅仅是数据点)到另一个程序,B,处理。每个数据点作为一个UDP数据包发送,在特定的端口和127.0.0.1上,包含该点作为一个字符串。当B未运行,我可以做听一个端口已经在使用Python中的UDP数据包?

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind(("127.0.0.1, port)) 
while True: 
    data, addr = sock.recvfrom(65565) 

然后很明显,当B正在运行,我得到

[Errno 98] Address already in use 

我怎样才能看到这些端口发送的数据包?在过去的(单独的项目),我不得不使用

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP) 
里面看到所有传入和传出UDP数据包

数据包嗅探器,但似乎过度。我只需要查看来自特定端口的数据包。我对这个较低层的套接字编程相当陌生。任何帮助表示赞赏

回答

1

您可以使用scapy

这是一个小例子:

from scapy.all import * 

def callback(pkt): 
    pkt.show() 

sniff(prn=callback, filter="tcp and (port 25 or port 110) 
+0

这按预期工作。虽然,根据这个,Scapy的明显比使用较低级别的插座慢,所以我结束了我的implementation.http坚持://askldjd.com/2014/01/15/a-reasonably-fast-python-ip-嗅探器/ – Shatnerz

0

无论数据包嗅探器,你正在使用(无论它是Wireshark的或tcpdump的),你可以设置数据包过滤器来选择特定的端口。即(tcpdump端口端口#)或(udp.port ==端口#)。

相关问题