我试试看:
你是嵌入的,所以我猜你有busybox。您没有 IP,但您可以使用arping(如果您的busybox 构建中未配置此小程序,请更改配置)发送一些小而无用的东西,可能会唤醒这个东西。为您的 ARP 请求使用什么 IP?好吧,看来您可以使用“虚拟”IP。
我在 PC 上运行它,但我确实有带有 arping 的busybox,而且我使用有线接口,但这里是概念:
jbm@sumo:~/sandbox/iw$ sudo busybox arping -w 1 -U -I eth0 0.0.0.0
ARPING to 0.0.0.0 from 192.168.1.66 via eth0
Sent 2 probe(s) (2 broadcast(s))
Received 0 reply (0 request(s), 0 broadcast(s))
有用的是,虽然是“虚拟”IP,但我可以通过 tcpdump 检查 arp 请求是否确实在线(或在您的情况下是在空中):
jbm@sumo:~$ sudo tcpdump -i eth0 -v arp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:42:20.111100 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 0.0.0.0 (Broadcast) tell sumo, length 28
10:42:21.111206 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 0.0.0.0 (Broadcast) tell sumo, length 28
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
因此,在您的无线接口上发送 ARP 请求可能足以“唤醒”您的连接并刷新您的 RSSI。
编辑:
在此处查看 IP 0.0.0.0 的有趣用途和属性:
https://en.wikipedia.org/wiki/0.0.0.0
编辑 2:
再想一想,我意识到如果你的无线接口本身没有 IP 就会有问题。如果我没记错的话,在您的桥接配置中可能不一定是这种情况。在这种情况下,arping 将没有源地址来构建其请求数据包(也不知道如何监听响应),并且会失败。
但是您可以使用AF_PACKET 套接字创建自己的“迷你单向arping”,并使用虚拟/随机源IP 地址构建自己的ARP 请求数据包。这将是单向的,因为对您的伪造 ARP 请求的响应(如果有)将转到可能且最好不存在的随机源 IP。但它只是通过发送“某些东西”来唤醒您的无线连接的原理,这可能会奏效。
有关如何编写这种“迷你单向 arping”的灵感,请查看其 udhcpc/udhcpd 中的 busybox 实现(它比成熟的 arpingbusybox 小程序更简单):
https://git.busybox.net/busybox/tree/networking/udhcp/arpping.c#n38
from_ip 参数是您要伪造的。您可以使用您的实际 MAC 作为from_mac,只是为了尊严 :-) 您甚至不必等待响应(从第 89 行开始),所以这就像 50 行 C 代码 + 一个如果您想向其中添加一些选项,请使用 little main。