我想知道 iwlist 命令如何扫描 linux 中可用的无线网络。我阅读了它的源代码,并且有一个使用 SIOCSIWSCAN 触发扫描和 SIOCGIWSCAN 来获取扫描结果的 ioctl 调用。但是这些系统调用是如何捕获和分析信标帧的呢?
问问题
9515 次
1 回答
11
iwlist(8)和其他无线工具为支持Linux 无线扩展(WEXT)的不同无线设备驱动程序提供了一个通用前端。每个驱动程序将向 WEXT 注册处理程序,以实现此接口定义的设备特定操作。对于扫描,两个处理程序是触发扫描(命令 SIOCSIWSCAN)和获取扫描结果(命令 SIOCGIWSCAN)。设备完成扫描后,通过netlink接口向 WEXT 发送 SIOCGIWSCAN 事件。侦听此套接字的应用程序可以发出 SIOCGIWSCAN 命令以从设备获取扫描结果。请注意,设备可以随意执行扫描。例如,它可以被动地监听信标或通过发送探测请求来主动扫描。
上面故意模糊了向设备发送命令的机制,因为有传统方式(ioctl)和新方式(netlink - cfg80211)。但举一个具体的例子,考虑传统的方式。ioctl 调用在 WEXT 模块中实现,但处理此命令的代码在设备驱动程序中实现。当用户空间应用程序生成 ioctl 时,WEXT 会查找设备驱动程序的处理程序并运行它。
于 2009-05-29T15:12:03.630 回答