Airkiss icon indicating copy to clipboard operation
Airkiss copied to clipboard

在Linux 电脑上运行能够截获wifi密码,但是在嵌入式设备不行

Open aurora5161 opened this issue 8 years ago • 14 comments

您好,非常谢谢您开发的airkiss,我用您的代码在Linux 电脑上运行没有问题,电脑能够获得airkissDebugger 发送的wifi账号和密码。我在orangePi zero 开发板上测试时,代码能够编译通过且正常运行,但是用airkissDebugger发送wifi账号和密码时,开发板始终无法获得。从开发板输出的打印信息可以看到,设备一直处于scan all channels状态,刚开始怀疑是wifi信号不够强,将路由器放在开发板旁边仍然不行,请问这会是什么原因造成的呢,期待您的回答,谢谢!

aurora5161 avatar Feb 16 '17 14:02 aurora5161

这个项目的本意一个airkiss协议的实现。发送账号密码的上层应用只是简单示例,因为Wifi的操作与其平台和驱动有直接联系。比如: 1.切换混杂模式 2.切换信道 3.接收数据 如果驱动有对应接口,则可以直接在代码中使用。在PC中,我这里的方法是用aircrack的方法,针对不同型号的wifi芯片,使用不同的bash命令(如 iw)。对于不同的操作系统,需要自己替换成对应的命令或API。 至于你的这个具体问题,可以通过打印wifi接收到的数据帧的前24个字节,来确定混杂模式,切换信道以及数据接收是否正常。

evilpan avatar Feb 16 '17 16:02 evilpan

不好意思回复晚了,好的,我再看看,谢谢您的回答!

aurora5161 avatar Feb 18 '17 02:02 aurora5161

@aurora5161 您好,请问已经解决问题了么?我这边也是用orangepi zero,遇到同一问题

VIRGIL-YAN avatar Feb 18 '17 17:02 VIRGIL-YAN

我也是这种问题,手机端连接不同的路由器,电脑端Wi-Fi数据都能正确接收。但是在嵌入式设备上,有的路由器可以配置成功,有的不可以。可能是硬件支持问题吧

w450434204 avatar Feb 20 '17 03:02 w450434204

@VIRGIL-YAN @aurora5161 @pannzh 我知道是什么问题了,你使用这个命令sudo iwlist wlan0 channel。它的代码有点BUG,在电脑上实际上是切换信道了,在开发板中没有切换信道。你修复下就可以了。我就是这样解决的

w450434204 avatar Feb 21 '17 11:02 w450434204

@w450434204 是怎么切换信道的呢,能不能解释详细一点儿呢?还有你用的也是 Orange Pi Zero 这个板子吗?

mulorc avatar Feb 21 '17 14:02 mulorc

@mulorc 我用的不是那个板子。 输入即可查看当前信道 sudo iwlist wlan0 channel 如果想要切换当前监听信道, 即可执行以下语句: iwconfig wlan0 channel 11 再次执行以下命令即可查看当前信道 iwlist wlan0 channel

w450434204 avatar Feb 22 '17 08:02 w450434204

我的设备连续信道切换 ,好像不起作用。你可以通过预扫描查看所连接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,要自己添加代码。

w450434204 avatar Feb 22 '17 08:02 w450434204

@pannzh 想请教你一个问题,WiFi网卡在切换信道时,在定时器回调函数中会执行linux_set_channel这个函数,由于我的网卡没有对应的case相匹配,我自己添加了代码。根据打印,在程序运行的过程中,信道是切换了,但是抓取的网络包是 airkiss程序运行时网卡所处的信道。

我的WiFi驱动是支持信道切换的,我通过命令行iwconfig wlan0 channel 11 和 sudo iwlist wlan0 channel进行验证了。 也就是问题是:在程序运行的过程中,如何才能正确的切换信道,并抓取相应信道上面的网络包??谢谢指教,这个问题困扰我几天了。

w450434204 avatar Feb 23 '17 07:02 w450434204

竟然那么多orange pi zero的我也是 orange pi zero 另外 nanopi air 也是不行.准备研究一下源码看看哪里出现问题

Timeend-D avatar Feb 23 '17 11:02 Timeend-D

@w450434204 一般来说,wifi的信道是全局唯一的,不会存在两个进程工作在两个不同信道的情况. 你可以试着增加切换wifi信道的时间间隔,以确保能在该信道接收到必要的数据.

evilpan avatar Feb 24 '17 09:02 evilpan

@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 avatar Mar 21 '17 14:03 aurora5161

@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

larryli avatar Aug 10 '17 09:08 larryli

@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

nero-philip-wang avatar Nov 20 '18 14:11 nero-philip-wang