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