2016-01-22 42 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 ==端口#)。

相關問題