【发布时间】:2021-11-19 04:30:15
【问题描述】:
几个问题。
- TLDR 正在 Wifi 网络上发送 UDP 广播数据包,以允许发现 IoT 设备 (Raspberry PI),这是一种传统做法吗?
长版:我正在为一个班级开展 IoT 项目。基于我使用过的其他物联网设备(圣诞颂歌照明系统和音乐播放器),我们决定使用一个已经工作的应用程序 (https://github.com/balena-os/wifi-connect)。它的工作方式是在 Raspberry PI 上运行,并通过用户可以连接的 RPI 网卡托管一个 wifi 端点。一旦用户在他/她的 Iphone 上连接到这个 Wifi 端点,一个 Wifi 选择和密码输入页面就会出现在他/她的 Iphone 上。用户输入物联网设备 (Raspberry PI) 应连接的 Wifi/密码。然后,Raspberry PI 将连接输入的 Wifi。然后用户也可以连接到输入的 Wifi,现在用户的 Iphone 和 Raspberry PI 都将连接到同一个 Wifi 网络。
我们决定从物联网设备向 Wifi 网络的广播地址发送 UDP 数据包,以便连接到 Wifi 的用户(通过他们的 Iphone)可以通过侦听 UDP 数据包“发现”物联网设备的 IP 地址。一旦用户发现物联网设备的 IP 地址,他们就可以向物联网设备发送 HTTP RESTful API 调用。我想知道是否通常使用所描述的过程。
# script we are using to send UDP broadcast packets
import socket
import time
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
server.settimeout(0.2)
message = b"message"
while True:
server.sendto(message, ('<broadcast>', 16123))
time.sleep(1)
- 我们在公共图书馆尝试了这种设置,使用他们的免费公共 wifi。但是,UDP 广播数据包发现过程失败。 UDP 广播数据包由 IoT 设备发出,但没有被 Iphone 接收。我们想知道这是否与防火墙有关。我们可以成功地将 UDP 广播数据包从 Macbook(通过 python 脚本)发送到驻留在同一 Macbook 上的 IOS 模拟器,这样数据包的源 IP 地址与接收者相同。是否有防火墙规则使得从 IP 地址 [A] 发送的广播数据包可以传送回 IP 地址 [A] 但不能传送回 IP 地址 [B]。
另外,我没有弄乱端口号,如果某些端口被防火墙禁用,这可能会有所帮助。我不知道。帮助表示赞赏。我们都比较陌生。
【问题讨论】:
标签: raspberry-pi udp wifi iot broadcast