【问题标题】:Receiving UDP broadcast [VirtualBox, Ubuntu, Python]接收 UDP 广播 [VirtualBox, Ubuntu, Python]
【发布时间】:2012-10-19 15:24:15
【问题描述】:

我有一个 Ubuntu 虚拟机侦听主机生成的 UDP 广播数据包。如果我使用 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

【问题讨论】:

  • 127.0.0.1 也不起作用。出于某种原因,它必须是我不明白的''地址。我将更改我的代码以使其更清晰。

标签: python networking ubuntu virtualbox broadcast


【解决方案1】:

在网络编程中,空地址字符串表示所有配置的接口。但是,如果指定了 IP 地址,则套接字将只侦听具有指定 IP 地址的接口。

【讨论】:

    【解决方案2】:

    还有选项“”可以绑定到广播地址(根据http://docs.python.org/2/library/socket.html)。所以我建议你尝试使用你接口的广播地址,比如 192.168.2.255(假设你的网络是 192.168.2.0/24)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      相关资源
      最近更新 更多