使用ioctl扫描wifi信号获取AP的essid、mac地址等属性
使用 wifi 是一件再平常不过的是事情,有很多 wifi 工具可以帮助你扫描附近的 wifi 信号,测试信号强度等,但如何通过编程来操作 wifi 却鲜有文章涉及;本文立足实践,不使用任何第三方库,仅使用 ioctl 扫描附近的 wifi 信号,并获取这些 AP 的 ESSID、MAC 地址、占用信道和工作频率,本文将给出完整的源程序,今后还会写一些文章讨论如果编程获取 wifi 信号的其它属性(比如:信号强度、加密方式等)的方法,敬请关注;本文程序在 ubuntu 20.04 下编译测试完成,gcc 版本号 9.4.0;阅读本文并不需要对 IEEE802.11 协议有所了解。 扫描 WIFI 信号显然是要操作无线网卡才能实现,通常情况下无线网卡的驱动程序是在内核空间的,用户空间的应用程序是无法直接控制驱动程序的;为了能够从用户空间控制无线网卡的驱动程序,我们在用户空间编写的程序需要与内核进程进行通信; 实现用户进程与内核通信的方式有很多,本文采用的是 ioctl,但还有其它方式,比如 netlink 等。