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设备不支持i​​wconfig等工具

答案

我试试看:

你嵌入了所以我猜你有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`输出(非活动时间)的主要内容,如果未能解决你的问题,请参考以下文章

LINUX怎么连wifi

Linux环境下使用WIFI模块:使用IW工具配置和连接WIFI(转)

linux下WIFI模块使用:IW工具交叉编译以及配置

iw交叉编译

使用WIFI网卡 wpa_supplicant

Linux 使用create_ap开热点后无法连接wifi问题的解决