2015-09-29 96 views
1

我有試圖偵聽發送到我的機器上的有線以太網適配器(設置爲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接收器以某種方式綁定到錯誤的適配器或沿着這些線?

+0

我看不出問題,但改變這種s.bind(('10.10.5.51 ',72))改爲s.bind(('0.0.0.0',72))以確保 – WalterM

+0

使用'0.0.0.0'不起作用。 –

+1

你是否以特權用戶身份運行你的代碼?普通用戶通常不能打開諸如72的低端口號。 – mhawke

回答

0

我真的不知道你嘗試用本地主機地址「127.0.0.1」或「0.0.0.0」

+0

試過這兩個都無濟於事。 –

相關問題