检查无线AP是否连接

标签 c linux encryption posix wifi

我正在编写一个 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/

相关文章:

mysql - 如何在 MySQL 中散列密码?

c - 为什么此代码未打印正确的数字频率?

c - free() 初始化内存为0

linux - 带有 -C 和 -W 选项的 tcpdump 文件名

linux - 在 Bash 中使用heredoc创建新文件

encryption - 在 Web 应用程序中加密来自用户的数据

azure - 使用 TFS 自动化构建自动加密服务结构中的 settings.xml 文件

c - 如何改变MPU9150的灵敏度?

FFmpeg 可以用作库而不是独立程序吗?

arrays - 两个 bash 数组中的模式匹配