微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取WIFI信号强度 – 寻求最佳方式IOCTL,iwlistiw等

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

我正在寻找一个好的工具来做到这一点。 首先,我发现iwconfig工作,但只有我连接到networking。 所以我用iwlist(我没有工作 – 也许我需要更新它?)。 你知道它的输出有多准确吗? 我可以相信吗?

之后,我遇到了IOCTL。 它看起来非常强大*和专业。 但是,从iWlist / iw这个简单的方法获得WIFI信号强度的输出更可靠吗?

*由于我没有编译我使用它编写的任何程序,所以function甚至太强大了

在32位模式和64位操作系统的64位模式下编译ioctl函数有什么不同?

我怎样才能在内核模式(Windows)的IOCTL调用

x86_64 Linux上定义的ioctl系统调用用户空间包装器在哪里?

Linux相当于I_PUSH

unlocked_ioctl vs正常的ioctl

SIOCETHTOOL对SIocgMIIPHY对SIocgIFFLAGS

Linux中的ioctl命令可以完全枚举吗?

在来自两个不同进程的相同文件描述符上调用ioctl

访问内核中用户空间结构的成员会给出错误的值

在C语言的Linux中发出嘟嘟声

如果要确定未连接的WLAN接入点的信号强度,则扫描是正确的。

扫描是由无线网卡根据无线网卡的设计,通过驱动程序的“帮助”来完成的。 有卡(芯片组,更具体),有自己的处理器,并独立于主机运行自己的固件代码。 另一方面,在主计算机上的驱动程序完成大部分工作的地方有“愚蠢”的卡片。

在驱动程序和其他操作系统之间,有一个接口(API),用于向驱动程序发送命令并以标准方式读取信息。 在Linux中,至少有两种不同的API。 较旧的一个被命名为无线扩展 ,而较新的被命名为cfg80211 。 通常,驱动程序只支持其中一个API。 大多数当前驱动程序使用cfg80211,但可能会有旧的驱动程序仍然使用无线扩展。

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

所以,关于正确工具的问题取决于无线驱动程序使用的API。 为了增加混淆;-),cfg80211做了一些仿真,它允许你对使用更新的cfg80211 API的驱动程序执行一些无线扩展调用

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

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

关于你想要的扫描间隔 ,我会说300ms是相当短的。 这是因为对于有用的扫描,客户端需要短时间离开当前频道,切换到另一个频道,并听取来自该频道上其他接入点的信号。 由于离开其通道中断通信,这些通道外时间通常很短,并且很少进行。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐