iwlist()命令如何扫描无线网络?

问题描述 投票:0回答:1

我想知道 iwlist 命令如何在 Linux 中扫描可用的无线网络。我阅读了它的源代码,发现有一个 ioctl 调用,使用 SIOCSIWSCAN 来触发扫描,并使用 SIOCGIWSCAN 来获取扫描结果。但是这些系统调用如何捕获和分析信标帧呢?

linux kernel wireless ioctl
1个回答
11
投票

iwlist(8) 和其他无线工具为支持 Linux 无线扩展 (WEXT) 的不同无线设备驱动程序提供公共前端。每个驱动程序都会向 WEXT 注册处理程序,以实现此接口定义的设备特定操作。对于扫描,两个处理程序是触发扫描(命令 SIOCSIWSCAN)和获取扫描结果(命令 SIOCGIWSCAN)。设备完成扫描后,会通过 netlink 接口向 WEXT 发送 SIOCGIWSCAN 事件。然后,侦听此套接字的应用程序可以发出 SIOCGIWSCAN 命令以从设备获取扫描结果。请注意,设备可以自由选择如何实施扫描。例如,它可以被动监听信标或通过发送探测请求主动扫描。

上面对向设备发送命令的机制故意含糊不清,因为有传统方式(ioctl)和新方式(netlink - cfg80211)。但举一个具体的例子,考虑一下传统的方式。 ioctl 调用在 WEXT 模块中实现,但处理此命令的代码在设备驱动程序中实现。当用户空间应用程序进行 ioctl 时,WEXT 会查找设备驱动程序的处理程序并运行它。

© www.soinside.com 2019 - 2024. All rights reserved.