我有試圖偵聽發送到我的機器上的有線以太網適配器(設置爲10.10.5.51靜態IP)的任何UDP數據的簡單的Python腳本:爲什麼我沒有收到任何UDP數據?
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.bind(('10.10.5.51', 72))
while True:
print(s.recvfrom(65535))
我可以看到Wireshark的我的機器正在那個端口上接收數據,那爲什麼Python腳本沒有報告任何東西?
EDIT1 - 測試本地地址
我試着結合「127.0.0.1」,併發送到同一個地址有以下發送/接收器和它的作品...
發件人:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
source_port = 73
dest_port = 72
address = '127.0.0.1'
s.bind((address, source_port))
print("Sending from port: %d"%source_port)
while True:
print(s.sendto(bytes('Testing..','UTF-8'), (address, dest_port)))
接收機:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
port = 72
s.bind(('127.0.0.1', port))
print("Listening on port: %d"%port)
while True:
print(s.recvfrom(65535))
如果我將地址更改爲我的以太網卡(10.10.5.51),那麼我什麼都看不到(wireshark甚至不顯示任何流量)。
EDIT2 - 高源端口
如果我偶然源端口到非特權端口(11000例),我現在可以看到交通我的Python發件人是生產...
發信人:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
source_port = 11000
dest_port = 72
address = '10.10.20.51'
s.bind((address, source_port))
print("Bound to address: "+address)
print("Sending from port %d to port %d"%(source_port,dest_port))
while True:
s.sendto(bytes('Testing..','UTF-8'), (address, dest_port))
接收機:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
port = 72
address = '10.10.20.51'
s.bind((address, port))
print("Listening on %s:%d"%(address,port))
while True:
print(s.recvfrom(65535))
...但我仍然沒有看到wireshark報告的流量。是否有可能我的Python接收器以某種方式綁定到錯誤的適配器或沿着這些線?
我看不出問題,但改變這種s.bind(('10.10.5.51 ',72))改爲s.bind(('0.0.0.0',72))以確保 – WalterM
使用'0.0.0.0'不起作用。 –
你是否以特權用戶身份運行你的代碼?普通用戶通常不能打開諸如72的低端口號。 – mhawke