【问题标题】:Receive non-standard UDP broadcast python接收非标准UDP广播python
【发布时间】:2016-08-16 13:18:20
【问题描述】:

我很难在 Python 中接收 UDP 广播。通过以太网连接到 PC 的设备在特定地址和端口上广播消息。我尝试了许多在线找到的多播 python 示例,但我永远无法接收到数据。使用wireshark我可以看到UDP广播正在到达PC。

我已经在 OSX 和 Linux 上尝试过,但都不起作用。我只能假设没有收到消息,因为设备使用非标准 UDP 结构,即没有校验和验证等

关于如何接收这些 UDP 广播的任何想法?

谢谢!

编辑:以最简单的形式,当前代码是:

from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('239.255.60.60',4876))
m=s.recvfrom(1024)
print (m[0])

但是,我尝试了其他多播示例,例如 Multicast in Python,但还没有收到任何东西!

【问题讨论】:

  • 请添加一个最小、完整且可验证的示例。 stackoverflow.com/help/mcve
  • 通常情况下,您的操作系统网络堆栈会为您捕获 IP 数据包;如果您想使用原始 IP,您应该向我们提供更多详细信息(什么操作系统,什么版本的 Python,请显示精细代码)。
  • 我在 Ubuntu 上使用 Python3,我相信我将不得不使用原始套接字并从头开始......

标签: python udp broadcast multicast


【解决方案1】:

您没有收到广播,因为您没有使用广播地址。

任意使用:

s.bind(('',4876))

或者你的ip的正确广播地址。

【讨论】:

  • 我已经尝试使用 '' 以及 0.0.0.0 但仍然没有收到数据。
  • 在绑定之前添加以下内容是否有帮助:s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  • 很遗憾没有:(
【解决方案2】:

好的,找到了答案,我对这种情况相当孤立,并因为忽略了它而自责。

通过以太网连接的设备正在等待分配 IP 地址! Wireshark 必须捕获比 python 更低级别的网络流量。

无论如何手动为设备分配了一个 IP 地址,现在它可以工作了。松了一口气。

【讨论】:

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