Linux WiFI AP:刷新`iw dev wlan0 station dump`输出(非活动时间)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux WiFI AP:刷新`iw dev wlan0 station dump`输出(非活动时间)相关的知识,希望对你有一定的参考价值。
- 我有一个Linux(3.14.36)嵌入式板充当WiFi AP。
- WiFi芯片组不支持监控模式。
- 我的笔记本电脑(客户端)通过WiFi连接到此板
- WiFi AP充当到另一台计算机的网桥,并且不向客户端提供IP地址(WiFi AP仅具有客户端的MAC地址)
我想监视连接WiFi AP < - > Client的信号强度,并能够触发信号强度值的“刷新”。
做:iw dev wlan0 station dump
给了我:
Station xx:xx:xx:xx:xx:xx (on wlan0)
inactive time: 123820 ms // <-- The problem
rx bytes: 10291
rx packets: 60
...
signal: -65 dBm // What I want to refresh
...
我知道每次网络活动时都会更新信号强度。 (因此,在上面的示例中,它已在123年前刷新)。
如何强制刷新此值? (通过强制AP向客户端发送“东西”)例如,知道板/ WiFi驱动程序/ WiFi设备不支持iwconfig等工具
我试试看:
你嵌入了所以我猜你有busybox
。你没有IP,但是你可以使用arping
(如果这个applet没有在你的busybox版本中配置,更改配置)发送一些小而无用的东西可能会唤醒你的东西。您的ARP请求使用什么IP?好吧,你似乎可以使用“虚拟”IP。
我在PC上运行它,但我确实有忙碌的arping,我使用有线接口,但这是概念:
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实现(它比完整的arping busybox applet更简单):
https://git.busybox.net/busybox/tree/networking/udhcp/arpping.c#n38
from_ip
参数是你想要伪造的。你可以使用你的实际MAC作为from_mac
,只是为了尊严:-)你甚至不必等待响应(起始行89),所以这将是50行C代码+一点主要如果你想为它添加一些选项。
现在找到这个帖子的人:
我有这个问题,我的解决方案是在进行iw转储之前ping设备,例如
获取连接的MAC地址列表:
iw dev wlan0 station dump | grep 'signal' | awk '{print $2}'
然后从这些MAC地址获取IP地址(或者你可以使用arp):
ip neigh | grep 'ma:ca:dd:re:ss:ss' | awk '{print $1}'
然后ping每个:
ping -c 1 'IP.address'
然后获取该MAC地址的刷新信号
iw dev wlan0 station get 'ma:ca:dd:re:ss:ss' | grep 'signal' | awk '{print $2}'
我将所有这些包装在Python脚本中,它似乎提供了可靠的数据。
以上是关于Linux WiFI AP:刷新`iw dev wlan0 station dump`输出(非活动时间)的主要内容,如果未能解决你的问题,请参考以下文章