获得WIFI信号强度 - 寻求最佳方式(IOCTL,iwlist(iw)等)

 Lululingling2002_886 发布于 2022-12-27 14:39

我想扫描从3 AP收到的信号强度.如果每300毫秒(最长500毫秒)发生这种情况,我会很高兴.我在路由器上刷了OpenWRT.

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

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

*甚至太强大,因为我没有编译我用它编写的任何程序

1 个回答
  • 如果要确定连接的WLAN接入点的信号强度,则扫描是正确的方法.

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

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

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

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

    关于您的问题ioctl():这是Unix操作系统中用户空间和内核空间之间通信的通用方法.旧的Wireless Extensions API使用ioctl().较新的cfg80211 API不使用ioctl()基于接口的接口,而是使用nl80211.

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

    关于你想要的扫描间隔,我会说300毫秒相当短.这是因为对于有用的扫描,客户端需要在短时间内离开其当前频道,切换到另一个频道并收听来自该频道上其他接入点的信号.由于离开其信道中通信,因此这些非信道时间通常保持较短并且不经常进行.

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

    2022-12-27 14:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有