我想扫描 b/g 接口(interface)上的 WiFi,我想在每个 channel 上嗅探数据包,在每个 channel 上花费 100 毫秒。我最大的要求之一是不存储我收到的数据包(因为磁盘空间较少),我的应用程序将解析数据包,检索 Tx MAC 和 RSSI,并构建列表(MAC、Avg RSSI、#Records)在每一分钟结束时,然后清除此列表并重新开始。
我想出了两种在 linux 上进行 channel 跳跃的方法:
方案一:在C语言中使用wi_set_channel(struct wif *, channel number)系统调用,并在C语言中编写代码嗅探所有数据包
选项 2:使用 linux 命令iw dev wlan0 set channel 4,并使用 python+scapy 或 C 等任何语言嗅探数据包
我想知道两者中哪一个效率更高(如果有的话),以便 WiFi 接口(interface)切换到不同 channel 的延迟/等待时间最小。我怀疑这种延迟意味着在切换到不同 channel 时丢失数据包,是这样吗?
我还想知道在 linux 中解决这个问题的其他一些方法。
最佳答案
直接回答您的第一个问题,使用选项 1 并让两个线程执行工作 - 一个线程使用从 channel 收集的数据包填充内存中的循环缓冲区,第二个线程按顺序处理它们。您可以根据处理线程的测量性能和其他因素(如果有)确定最佳数据包丢弃算法。
至于第二个问题,我会同意上面的内容,因为您可以完全控制如何调整算法,而不是依赖于固定的处理工具。
关于linux - 在 Linux 中使用 channel 跳跃进行数据包嗅探,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21251404/