我需要测量同一网络中两个节点之间的 RSSI。如果我有这两个信息:
- 他们的网络的 SSID。
- 目标节点的 IP,用于获取与其相关的 RSSI。
所以我找到了这个命令:iwspy
但似乎在内核中找不到,我看到了这个关联
谈论:
我们很久以前就删除了 iwspy 支持,因为它没用,但忘记停止声称支持它。显然,没有人关心,但还是将其删除。
答案1
如果您的接口处于 IBSS、Mesh point 或 AP/P2P Group Owner 模式,那么您可以使用 转储网卡感知到的站点 MAC 及其信号电平iw dev wlan0 station dump
。
至于从 IP 地址获取 MAC,建议使用 ARP 表ip neigh
。请注意,您可能需要 ping IP 地址才能填充 ARP 表。
因此,要获取声称地址 A 的节点的 RSSI,可能是:
MAC="$(ip neigh show to A dev wlan0 | cut -f 3 -d ' ')"
if [ -n "$MAC" ]; then
iw dev wlan0 station get "$MAC" | sed -nre "s@\s*signal:\s*@@p"
else
# no ARP entry. Ping the address and retry.
fi
然而,如果您的接口不是这种类型(例如非 AP 站点),那么您将不得不摆弄监控模式,并且您没有可靠的方法从 IP 地址获取 MAC 地址(提示:如果站点是路由,那么它将使用发送者的IP,而不是他自己的IP)。
如前所述,iwconfig/iwspy/iwlist/iwpriv
已被弃用并且很糟糕。它们使用内核 API(无线扩展),该 API 已被弃用,仅出于向后兼容性目的而实现,并且仅在内核配置中启用时才实现。因此,它的许多部分都是伪造的或缺乏许多功能,包括 Wi-Fi direct。如果您使用 Wi-Fi direct,那么您已经在使用现代 nl80211 内核 API,并且您应该忘记 wext API 和iwconfig/iwspy
.
是的,您需要节点的 MAC 地址。 Wi-Fi 运行在 OSI 模型上的第 1 层和第 2 层,不关心上层。 IP 和 MAC 地址有不同的用途,不是同一件事。