我正在Ubuntu Linux 12.04环境中开发WiFi工具,需要在不同通道之间切换WiFi接口。
目前,我在Wireshark源代码ws80211_utils.c中的名为ws80211_set_freq的函数中找到了解决方案,但是我不知道如何将其实现到我的源代码中以及要包含的库以及如何进行编译,因此我可以对其进行测试。
问题是您必须使用太多的参数和标志。另外,这是我第一次开发netlink wifi工具。
如果有可用的好手册,以及如何使用Netlink进行WiFi通话,请提供给我链接。
非常感谢我前进!
在当前的Linux版本中,nl80211是与无线子系统“对话”的正确方法。请注意,您不能随每个驱动程序和每个操作模式(主,客户端,监视器等)任意设置通道。某些驱动程序仅在相应的接口“关闭”时才允许更改通道。在客户端(“托管”)等模式下,根本无法设置通道,因为它是由接入点定义的。
另请注意,并非所有无线设备驱动程序都使用mac80211 / cfg80211。对于那些不使用它的驱动程序,您要么必须使用旧的无线扩展API,要么(甚至更糟)使用驱动程序专有的API。
可悲的是,似乎没有关于nl80211接口的最新和完整的文档。如果我错了,请纠正我!
您研究其他程序源代码的方法似乎是一种合理的方法。你也可以使用源代码中的iw
命令行实用程序。iw
可以选择设置频道:
$ iw --help
Usage: iw [options] command
Options:
--debug enable netlink debugging
--version show version (3.2)
Commands:
…
dev <devname> set channel <channel> [HT20|HT40+|HT40-]
…
在phy.c中,iw
第91ff行。您可以找到在iw wlan0 set channel
执行时调用的代码。但是,此代码绝对不容易阅读。看起来,将NL80211_CMD_SET_WIPHY
命令与NL80211_ATTR_WIPHY_FREQ
属性结合在一起是可行的方法。
在这个SO答案中,您可以找到使用nl80211的框架程序。此外,Aircrack-ng(src/osdep/linux.c
,function linux_set_channel_nl80211
)的代码可以用作蓝图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句