是否可以在不连接到网络的情况下通过 wifi 发送 UDP 广播?
is it possible to send UDP broadcasts over wifi without being connected to a network?
我正在尝试获取设置为接入点的 2 个 Raspberry pis 之间数据包的飞行时间。
现在我可以在它们之间传输广播,只要它们连接到同一网络即可。
我的想法是,我可以在不连接到网络的情况下发送 UDP 广播,类似于发送信标数据包和探测请求的方式。
这是我的服务器代码,我正在使用wireshark接收另一端的数据包。
import sys, time
import socket, IN
port = 22222
interface = "wlan0"
broadcast = "255.255.255.255"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, interface + "[=10=]")
while 1:
s.sendto("test data", (broadcast, port))
time.sleep(2)
有人知道这是否可能吗?如果方向正确,我们将不胜感激 :)
当设备未连接到网络时,无法 send/received UDP/IP 数据包。 IP层需要link层连接。
信标数据包和探测请求不需要连接网络但它们不是 IP 数据包(它们根本没有 IP header)因此不可能通过 AF_INET 构建和发送它们插座。 wifi 上的原始数据包可以通过原始套接字创建和发送。但是,如果您尝试使用 IP 和 UDP header 手动构造一个数据包并将其发送到网络,则没有人会响应它,因为发件人未连接到网络。
python 库 https://github.com/kbandla/python-wifitools 支持构建像信标数据包这样的原始 802.11 消息,但如果节点未连接,您将永远不会发送有效的 UDP/IP 数据包。
我正在尝试获取设置为接入点的 2 个 Raspberry pis 之间数据包的飞行时间。
现在我可以在它们之间传输广播,只要它们连接到同一网络即可。
我的想法是,我可以在不连接到网络的情况下发送 UDP 广播,类似于发送信标数据包和探测请求的方式。
这是我的服务器代码,我正在使用wireshark接收另一端的数据包。
import sys, time
import socket, IN
port = 22222
interface = "wlan0"
broadcast = "255.255.255.255"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, interface + "[=10=]")
while 1:
s.sendto("test data", (broadcast, port))
time.sleep(2)
有人知道这是否可能吗?如果方向正确,我们将不胜感激 :)
当设备未连接到网络时,无法 send/received UDP/IP 数据包。 IP层需要link层连接。
信标数据包和探测请求不需要连接网络但它们不是 IP 数据包(它们根本没有 IP header)因此不可能通过 AF_INET 构建和发送它们插座。 wifi 上的原始数据包可以通过原始套接字创建和发送。但是,如果您尝试使用 IP 和 UDP header 手动构造一个数据包并将其发送到网络,则没有人会响应它,因为发件人未连接到网络。
python 库 https://github.com/kbandla/python-wifitools 支持构建像信标数据包这样的原始 802.11 消息,但如果节点未连接,您将永远不会发送有效的 UDP/IP 数据包。