我正在编写一个 linux 无线网络扫描仪,它提供有关接入点的信息,但它还必须检查接入点是否已连接并且可以通信(即加密是否正常工作)。通过ioctl(.., SIOCGIWAP, ..)
来检查它是不够的,因为它并没有真正检查 WPA key 是否正确以及 AP 是否可以通信。
我正在做的检查无线接口(interface)是否与 AP 相关联的是:
- 检查
ioctl(...,SIOCGIWAP,...)
是否返回某个 AP 的 MAC 地址 - 检查接口(interface)是否配置了 IP(我知道在静态配置的情况下它不会提供任何信息,但我可以接受)
- 检查 AP 和客户端使用的加密(例如 WEP、WPA、WPA2)是否相同(以确保在 AP 端更改加密方法后,不会被积极检测为已连接)。
我被最新的一点卡住了——我可以检测到 AP 使用的加密,但我真的不知道如何检查我的主机使用的是什么加密。你知道如何检查吗?或者,也许您知道确定 AP 和客户端之间的连接是否有效的更好方法(我不想使用 ICMP 或类似的东西 - 我的工具必须快速,因此可以在本地完成所有操作)
最佳答案
使用 SIOCGIWENCODE 调用 ioctl 查询加密 key 打开或关闭(区分开放和加密)。
使用SIOCGIWESSID调用ioctl查询ESSID,即可进行主机与AP的ESSID匹配。
使用 SIOCGIWENCODEEXT 调用 ioctl 会查询加密类型(区分 WEP、WPA 和 WPA2 等),但前提是无线网卡的内核驱动程序支持它。
关于检查无线AP是否连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882776/