2012-10-19 60 views
5

ホストマシンによって生成されたUDPブロードキャストパケットを受信するUbuntu仮想マシンがあります。私がネットワークインタフェースeth1またはlo(ローカルループバック)のいずれかにpythonのsocket.bindメソッドを使用してバインドすると、パケットは受信されません。しかし、私が ''(すべてのインタフェースのシンボル)を使用してバインドすると、すべて正常です。私はeth1のアドレスだけにバインドすることができると期待していましたが、これはそうではないようです。誰かがなぜ ''が必要なのか説明できますか?私は仮想マシンを使用しているので、何かファンキーなことが起こっていますか?私は、仮想マシンが私のLAN上の別のマシンのように見えるように、ブリッジネットワーク設定を使用しています。ここでは、コードがあります:UDPブロードキャストを受信する[VirtualBox、Ubuntu、Python]

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 

# using the '' address works 
sock.bind(('', UDP_PORT)) 
# using the address of eth1 doesn't 
#sock.bind(('192.168.2.123', UDP_PORT)) 
# and neither does using the local loopback 
#sock.bind(('127.0.0.1', UDP_PORT)) 

while True: 
    data, addr = sock.recv(2048) 
    print data 
+0

「127.0.0.1」について – dav1d

+0

127.0.0.1も機能しません。なんらかの理由で私は理解できないアドレスでなければなりません。私は少し明確になるようにコードを変更します。 – user975326

答えて

0

ネットワークプログラミングの空のアドレス文字列では、すべての構成済みインターフェイスを示します。ただし、IPアドレスが指定されている場合、ソケットは指定されたIPアドレスを持つインターフェイスでのみリッスンします。

0

http://docs.python.org/2/library/socket.htmlに応じて)ブロードキャストアドレスにバインドするオプション「<放送>」もあります。だから私は192.168.2.255(あなたのネットワークが192.168.2.0/24であることを前提とする)のような、あなたのインターフェースのブロードキャストアドレスを使うことをお勧めします。

関連する問題