gpt4 book ai didi

linux - 获取WIFI信号强度-求最佳方式(IOCTL、iwlist(iw)等)

转载 作者:IT王子 更新时间:2023-10-29 00:57:41 34 4
gpt4 key购买 nike

我想扫描从 3 个 AP 接收到的信号强度。如果每 300 毫秒(最多 500 毫秒)发生一次,我会很高兴。我在路由器上刷了 OpenWRT。

我一直在寻找一个好的工具来做到这一点。首先,我发现 iwconfig 可以工作,但只适用于我连接的网络。所以我使用了 iwlist(iw 没有用——也许我需要更新它?)。你知道它的输出有多准确吗?我可以信任它吗?

在那之后,我遇到了 IOCTL。它看起来非常强大*和专业。但是从 WIFI 获取信号强度的输出是否比像 iwlist/iw 这样的简单方法更可靠?

*甚至太强大了,因为我无法编译我使用它编写的任何程序

最佳答案

如果您想确定您连接到的 WLAN 接入点的信号强度,扫描是正确的方法。

扫描由无线网卡执行,驱动程序或多或少“帮助”,具体取决于无线网卡的设计。有些卡(更具体地说,是芯片组)拥有自己的处理器并独立于主机运行自己的固件代码。另一方面,主机上的驱动程序完成大部分工作的“愚蠢”卡。

在驱动程序和操作系统的其余部分之间,有一个接口(interface) (API) 用于向驱动程序发送命令并以标准化方式读回信息。对于 Linux,至少有两种不同的 API。较旧的名为 Wireless Extensions ,较新的名为 cfg80211 。通常,一个驱动程序只支持其中一个 API。大多数当前驱动程序使用 cfg80211,但可能有一些旧驱动程序仍在使用 Wireless Extensions。

对于这两个 API 中的每一个,都有一个用户空间工具(或工具系列)来使用它。对于无线扩展,有 iwconfig (和 iwlistiwpriv 等)对于 cfg80211,只有 iw .

因此,有关正确工具的问题取决于无线驱动程序使用的 API。为了增加混淆 ;-),cfg80211 进行了一些模拟,允许您对使用较新的 cfg80211 API 的驱动程序执行一些无线扩展调用。

关于您关于 ioctl() 的问题:这是 Unix 操作系统中用户空间和内核空间之间通信的通用方法。旧的无线扩展 API 使用 ioctl() .较新的 cfg80211 API 不使用 ioctl()基于接口(interface),但使用 nl80211相反。

总结一下:是否使用iw/cfg80211/nl80211 或 iwconfig/Wireless Extensions/ioctl 取决于驱动程序或您的无线网卡。

关于您想要的扫描间隔,我认为 300 毫秒相当短。这是因为为了进行有用的扫描,客户端需要短时间离开其当前 channel ,切换到另一个 channel 并收听来自该 channel 上其他接入点的信号。由于离开其 channel 会中断通信,因此这些离开 channel 时间通常保持较短并且很少执行。

调用 iw <dev> scaniwlist <dev> scan ,分别不一定会导致新的扫描,但可能会返回一个旧的(缓存的)访问点列表。根据您的无线网卡/驱动程序,可能(不可能)执行新的扫描。

关于linux - 获取WIFI信号强度-求最佳方式(IOCTL、iwlist(iw)等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25350824/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com