【问题标题】:obtaining received signal strength of neighboring devices获取相邻设备的接收信号强度
【发布时间】:2013-11-13 13:30:34
【问题描述】:

我在内核 3.12.rc5 上的 Debian 7 上使用 AR9271 芯片组 USB WiFi 设备。我使用ath9k_htcnl80211 驱动程序。

我通过wpa_supplicant 2.0 创建了一个 ad-hoc WLAN,我想在 C 程序中获取相邻设备的接收信号强度。

我可以使用什么函数或 API 来获取这些信息?

【问题讨论】:

    标签: c linux wireless


    【解决方案1】:

    这在 libpcap 中非常可行,监控无线局域网中的原始数据包,包括包含 RSSI 的 802.11 标头以及源 MAC 地址。有关解码底层数据包结构的一些提示和技巧,请参阅this question

    最简单的做法是侦听来自相邻设备的数据包,以便您可以读取它们的 RSSI。来自 wlan 设备的原始流量往往非常嘈杂 - 您必须仅针对您感兴趣的设备对其进行过滤。

    这些信息只能通过自己阅读才能获得,但是,没有什么可以为您收集数据;如果你的网络上有一个安静的设备,你必须想办法让它说话,这样你就可以从中读取 RSSI。

    【讨论】:

    • 我一直在研究libpcap,能否告诉我是否需要使用LINKTYPE_IEEE802_11 或LINKTYPE_IEEE802_11_RADIOTAP 来获取每个设备的RSSI 信息?
    • 使用 RADIOTAP 标头。
    【解决方案2】:

    编辑:第一次没有注意到临时部分.. 对于临时的,我真的不知道。

    对于它的价值和基础设施连接:

    如果你有 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2016-10-15
      相关资源
      最近更新 更多