iwlist() 命令如何扫描无线网络?
Posted
技术标签:
【中文标题】iwlist() 命令如何扫描无线网络?【英文标题】:How does iwlist() command scans the wireless networks? 【发布时间】:2009-05-29 12:03:25 【问题描述】:我想知道 iwlist 命令如何在 linux 中扫描可用的无线网络。我阅读了它的源代码,并且有一个使用 SIOCSIWSCAN 触发扫描和 SIOCGIWSCAN 来获取扫描结果的 ioctl 调用。但是这些系统调用是如何捕获和分析信标帧的呢?
【问题讨论】:
【参考方案1】:iwlist(8) 和其他无线工具为支持Linux Wireless Extensions (WEXT) 的不同无线设备驱动程序提供了一个通用前端。每个驱动程序将向 WEXT 注册处理程序,以实现此接口定义的设备特定操作。对于扫描,两个处理程序是触发扫描(命令 SIOCSIWSCAN)和获取扫描结果(命令 SIOCGIWSCAN)。设备完成扫描后,通过netlink 接口向WEXT 发送SIOCGIWSCAN 事件。侦听此套接字的应用程序然后可以发出 SIOCGIWSCAN 命令以从设备获取扫描结果。请注意,设备可以随意执行扫描。例如,它可以被动侦听信标或通过发送探测请求来主动扫描。
上面故意模糊了向设备发送命令的机制,因为有传统方式 (ioctl) 和新方式 (netlink - cfg80211)。但举一个具体的例子,考虑传统的方式。 ioctl 调用在 WEXT 模块中实现,但处理此命令的代码在设备驱动程序中实现。当用户空间应用程序创建 ioctl 时,WEXT 会查找设备驱动程序的处理程序并运行它。
【讨论】:
知道了.... ioctl 调用是在驱动程序模块中实现的,因此使用 SIOCGIWSCAN 对 ioctl 的实际函数调用将调用驱动程序模块中定义的函数。以上是关于iwlist() 命令如何扫描无线网络?的主要内容,如果未能解决你的问题,请参考以下文章