接入点如何确定关联或非关联客户端的功率?

接入点如何确定关联或非关联客户端的功率?

我无法弄清楚接入点如何确定附近客户端的信号功率。

我在任何 WiFi 数据包教程中都没有找到此信息,因此我只能假设电源信息不是来自客户端,而是由接入点决定的。

我知道一款名为 aircrack 的应用程序可以确定这些信息,但在我深入研究之前,我想先了解一下功率的计算方法。我的谷歌技能不够好很糟糕,所以令我惊讶的是,到目前为止我还没有找到任何有关它的信息。如果 aircrack 能做到这一点,那么这些信息肯定是存在的!

我希望这里的用户可以给我指明正确的方向?

关于赏金

我想是时候尝试使用赏金了。在您的答案中,请发布您能找到的所有链接,这些链接将有助于任何人理解这种功率检测的工作原理。关于如何在 aircrack 中实现它的具体信息将是完美的!

更新:

到目前为止,以 aircrack-ng 套件为例,看起来功率值是从 net_read() 中的 buf[2] 中提取的。我相信这个值最终来自 net_cmd,这会导致对 net_send 和 net_get() 的成对调用。我认为 net_get() 会读取由于调用 net_send() 而发送的任何标头信息,并且此标头指示应将多少数据复制到缓冲区 buf[] 中。

但现在我不明白的是—— buf[] 看起来确实被对 net_read_exact() 的调用填充了,而 net_read_exact() 只是从套接字读取数据。如果是这样,并且如果功率是驱动程序详细信息,那么为什么功率值在缓冲区中?如果该缓冲区确实由套接字数据填充,这是否意味着功率是由客户端/站点发送的?我相信 AP/驱动程序负责提供功率信息,就像每个人都说的那样,但我不明白这一部分。

答案1

实际上,确定这些信息的应用程序是airodump-ng不是 aircrack-ng。 来自airodump-ng文档,功率水平确定为:

PWR - 卡报告的信号级别。其含义取决于驱动程序 [...]

好吧,让我们看看我们能不能做得更好。查看最新的源代码airodump-ng.c文件中,我们看到在函数中设置了功率dump_add_packet(...)

/* only update power if packets comes from
 * the AP: either type == mgmt and SA != BSSID,
 * or FromDS == 1 and ToDS == 0 */
if (...)
    ap_cur->power_lvl[ap_cur->power_index] = ri->ri_power;

在挖掘了几层抽象、结构和函数指针之后,我发现这些数据是linux_read(...)osdep/linux.c文件。这是结构ri_power中的变量ri填充数据的地方,并且它确实似乎是特定于驱动程序的。

最多司机遵循广播电台标准(与下面详述的旧 prism54 标准相反),它具有几个预定义字段用于确定天线功率、噪声和衰减。这些字段直接用于airodump-ng填充ri_power变量。其中一些已经以分贝或功率值的形式提供。

airodump-ng将使用天线信号场(单位:dBm)或dB天线信号场(以 dB 为单位)来计算显示的信号功率。其他字段使用类似的步骤,因为它们都是在上面链接的 Radiotap 规范中预先确定的。例如,ri_power使用 dB 天线信号字段可以计算如下:

case IEEE80211_RADIOTAP_DB_ANTSIGNAL:
    if(!got_signal) {
        if( *iterator.this_arg < 127 )
            ri->ri_power = *iterator.this_arg;
        else
            ri->ri_power = *iterator.this_arg - 255;

        got_signal = 1;
    }
    break;

如前所述,有些设备遵循(较旧的)棱镜54规范(而不是 Radiotap),它使用固定长度的标头。在这种情况下,RX 功率直接来自缓冲区(请注意,这不是完整的源代码,仅显示了填充所采用的路径ri_power):

if (tmpbuf[7] == 0x40)
    ri->ri_power = tmpbuf[0x33];
else
    ri->ri_power = *(unsigned int *)( tmpbuf + 0x5C );

答案2

我不太清楚你在问什么。

接入点自然有无线电接收器,这些接收器有带自动增益的模拟部分,硬件可以从中得出接收信号强度。然后,硬件驱动程序以操作系统相关的方式将此信息提供给其他软件。

这就是为什么 aircrack 制造关于驱动程序和硬件的大事

相关内容