ホストマシンによって生成されたUDPブロードキャストパケットをリッスンするUbuntu仮想マシンがあります。Pythonのsocket.bindメソッドを使用してネットワークインターフェイスeth1またはlo(ローカルループバック)のいずれかにバインドすると、パケットを受信しません。ただし、''(すべてのインターフェイスのシンボル)を使用してバインドする場合は、すべて問題ありません。eth1のアドレスだけにバインドできると思いますが、そうではないようです。誰かが''が必要な理由を説明できますか?仮想マシンを使用しているため、何かファンキーなことが起こっていますか?ブリッジネットワーク設定を使用しているため、仮想マシンはLAN上の別のマシンのように見えます。コードは次のとおりです。
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