【发布时间】:2013-11-13 13:30:34
【问题描述】:
我在内核 3.12.rc5 上的 Debian 7 上使用 AR9271 芯片组 USB WiFi 设备。我使用ath9k_htc 和nl80211 驱动程序。
我通过wpa_supplicant 2.0 创建了一个 ad-hoc WLAN,我想在 C 程序中获取相邻设备的接收信号强度。
我可以使用什么函数或 API 来获取这些信息?
【问题讨论】:
我在内核 3.12.rc5 上的 Debian 7 上使用 AR9271 芯片组 USB WiFi 设备。我使用ath9k_htc 和nl80211 驱动程序。
我通过wpa_supplicant 2.0 创建了一个 ad-hoc WLAN,我想在 C 程序中获取相邻设备的接收信号强度。
我可以使用什么函数或 API 来获取这些信息?
【问题讨论】:
这在 libpcap 中非常可行,监控无线局域网中的原始数据包,包括包含 RSSI 的 802.11 标头以及源 MAC 地址。有关解码底层数据包结构的一些提示和技巧,请参阅this question。
最简单的做法是侦听来自相邻设备的数据包,以便您可以读取它们的 RSSI。来自 wlan 设备的原始流量往往非常嘈杂 - 您必须仅针对您感兴趣的设备对其进行过滤。
这些信息只能通过自己阅读才能获得,但是,没有什么可以为您收集数据;如果你的网络上有一个安静的设备,你必须想办法让它说话,这样你就可以从中读取 RSSI。
【讨论】:
编辑:第一次没有注意到临时部分.. 对于临时的,我真的不知道。
对于它的价值和基础设施连接:
如果你有 wpa_supplicant,你也应该有 wpa_cli。
命令:
wpa_cli signal_poll
应该给你屏幕可抓取的输出。
您可以(也)通过 C 与 wpa_supplicant 交互,使用 wpa_ctrl_open() 和 wpa_ctrl_request():
以下内容:
#include "wpa_ctrl.h"
<needed declarations and definitions>
ctrl = wpa_ctrl_open(path);
wpa_ctrl_request(ctrl, "SIGNAL_POLL", 11, buf, &len, NULL);
【讨论】: