linux - 在 Linux 中使用 channel 跳跃进行数据包嗅探

标签 linux packet-capture packet-sniffers wifi

我想扫描 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/

相关文章:

android - 如何从 tcp/udp 数据包中提取主机名?

visual-studio-code - 使用 Charles 代理和可视化代码嗅探数据包

c - 如何阻止来自计算机端口 23 的数据包?

linux - 如何在其中包含重启命令的 shell 文件中取回控制权

linux - 我可以授予 Linux 用户与其他用户完全相同的权限吗?

Android Shark (tcpdump) 创建无效的 pcap

c# - 如何将 tsharks 输出实时传输到 C# 程序

c++ - 为什么我在时间测量中会出现如此巨大的抖动?

c - 如何使用 C 阻止退格键出现在 nCurses 中?

.net 数据包捕获 : pcap. 网络 vs Sharppcap