Airkiss
Airkiss copied to clipboard
在Linux 电脑上运行能够截获wifi密码,但是在嵌入式设备不行
您好,非常谢谢您开发的airkiss,我用您的代码在Linux 电脑上运行没有问题,电脑能够获得airkissDebugger 发送的wifi账号和密码。我在orangePi zero 开发板上测试时,代码能够编译通过且正常运行,但是用airkissDebugger发送wifi账号和密码时,开发板始终无法获得。从开发板输出的打印信息可以看到,设备一直处于scan all channels状态,刚开始怀疑是wifi信号不够强,将路由器放在开发板旁边仍然不行,请问这会是什么原因造成的呢,期待您的回答,谢谢!
这个项目的本意一个airkiss协议的实现。发送账号密码的上层应用只是简单示例,因为Wifi的操作与其平台和驱动有直接联系。比如: 1.切换混杂模式 2.切换信道 3.接收数据 如果驱动有对应接口,则可以直接在代码中使用。在PC中,我这里的方法是用aircrack的方法,针对不同型号的wifi芯片,使用不同的bash命令(如 iw)。对于不同的操作系统,需要自己替换成对应的命令或API。 至于你的这个具体问题,可以通过打印wifi接收到的数据帧的前24个字节,来确定混杂模式,切换信道以及数据接收是否正常。
不好意思回复晚了,好的,我再看看,谢谢您的回答!
@aurora5161 您好,请问已经解决问题了么?我这边也是用orangepi zero,遇到同一问题
我也是这种问题,手机端连接不同的路由器,电脑端Wi-Fi数据都能正确接收。但是在嵌入式设备上,有的路由器可以配置成功,有的不可以。可能是硬件支持问题吧
@VIRGIL-YAN @aurora5161 @pannzh 我知道是什么问题了,你使用这个命令sudo iwlist wlan0 channel。它的代码有点BUG,在电脑上实际上是切换信道了,在开发板中没有切换信道。你修复下就可以了。我就是这样解决的
@w450434204 是怎么切换信道的呢,能不能解释详细一点儿呢?还有你用的也是 Orange Pi Zero 这个板子吗?
@mulorc 我用的不是那个板子。 输入即可查看当前信道 sudo iwlist wlan0 channel 如果想要切换当前监听信道, 即可执行以下语句: iwconfig wlan0 channel 11 再次执行以下命令即可查看当前信道 iwlist wlan0 channel
我的设备连续信道切换 ,好像不起作用。你可以通过预扫描查看所连接wifi所处的信道,然后手动切换信道,就可以接收到数据了。 我的笔记本有对应的默认驱动选项 如
case DT_MAC80211_RT:
snprintf(s, sizeof(s) - 1, "iw %s set channel %d", wi_get_ifname(wi), channel);
LOG_TRACE("exec cmd: %s\n", s);
if(system(s) == 0)
dev->channel = channel;
else
printf("cannot set channel to %d\n", channel);
return 0;
break;
开发板中没有对应的case,要自己添加代码。
@pannzh 想请教你一个问题,WiFi网卡在切换信道时,在定时器回调函数中会执行linux_set_channel这个函数,由于我的网卡没有对应的case相匹配,我自己添加了代码。根据打印,在程序运行的过程中,信道是切换了,但是抓取的网络包是 airkiss程序运行时网卡所处的信道。
我的WiFi驱动是支持信道切换的,我通过命令行iwconfig wlan0 channel 11 和 sudo iwlist wlan0 channel进行验证了。 也就是问题是:在程序运行的过程中,如何才能正确的切换信道,并抓取相应信道上面的网络包??谢谢指教,这个问题困扰我几天了。
竟然那么多orange pi zero的我也是 orange pi zero 另外 nanopi air 也是不行.准备研究一下源码看看哪里出现问题
@w450434204 一般来说,wifi的信道是全局唯一的,不会存在两个进程工作在两个不同信道的情况. 你可以试着增加切换wifi信道的时间间隔,以确保能在该信道接收到必要的数据.
@mulorc 不好意思,前段时间在忙其他的项目,airkiss这块落了好多,最近继续研究airkiss,把@w450434204方法 试了下还是不行,打印main.c的buf变量,发现orange pi zero这个buf输出为空,但是电脑上面运行buf值输出非空。@pannzh,buf输出为空,就说明开发板 wifi没有接收到数据吗?(我用iwconfig检查了的,开发板wifi处在monitor状态,信道也可以切换)。晚上调试发现一个问题:在capture/linux.c 文件中,ieee80211_radiotap_iterator_init() 初始化失败,返回的结果<0,查看ieee80211_radiotap_iterator_init() 信息,发现radiotap_header -> version == 255 结果就退出程序了
@aurora5161 我调试的代码好像是 https://github.com/pannzh/Airkiss/blob/3ac05d0591c609e6ff6656576d2d7cff6eee687e/capture/linux.c#L482 的 read() 一直阻塞。 orangepi zero: ARMBIAN 5.31 stable Ubuntu 16.04.3 LTS 3.4.113-sun8i
@mulorc 不好意思,前段时间在忙其他的项目,airkiss这块落了好多,最近继续研究airkiss,把@w450434204方法 试了下还是不行,打印main.c的buf变量,发现orange pi zero这个buf输出为空,但是电脑上面运行buf值输出非空。@pannzh,buf输出为空,就说明开发板 wifi没有接收到数据吗?(我用iwconfig检查了的,开发板wifi处在monitor状态,信道也可以切换)。晚上调试发现一个问题:在capture/linux.c 文件中,ieee80211_radiotap_iterator_init() 初始化失败,返回的结果<0,查看ieee80211_radiotap_iterator_init() 信息,发现radiotap_header -> version == 255 结果就退出程序了
综合看了一下airkiss的库,不知道是不是内核的问题 ,https://blog.csdn.net/See_mood/article/details/50614807?fps=1&locationnum=7