我在用libpcap写一个嗅探器。我的问题是,在调用pcap_loop()或pcap_next()与实际获取数据包(调用回调函数)之间有7-10秒的延迟。但是,如果我在同一设备上使用具有相同过滤器的wireshark,在我按下“开始”按钮后,就不会有这样的延迟。为什么我的程序有延迟,有没有办法解决这个问题?
我在研究atheros无线芯片。将设备设置为监视模式。
airmon-ng start wlan0我敢肯定有很多的流量可以听,因为我可以看到在wireshark的包裹。谢谢。
发布于 2015-05-12 23:35:48
我用的是10000
to_ms对pcap_open_live()和pcap_set_timeout()的参数以毫秒为单位。
10000毫秒是10秒。
尝试使用1000,这是tcpdump使用的值--这将将延迟减少到1秒--或者使用100,这是Wireshark使用的值--这将将延迟减少到1/10秒。
我在一个关于这个领域的教程中读到:“至少在某些平台上,这意味着在看到任何数据包之前,您可以等待足够数量的数据包到达,所以您应该使用非零超时。”
所讨论的教程是tcpdump.org“如何使用libpcap”教程,在这个CVS提交中添加了所讨论的段落:
revision 1.8
date: 2005/08/27 23:58:39; author: guy; state: Exp; lines: +34 -31
Use a non-zero timeout in pcap_open_live(), so you don't wait for a
bufferful of packets before any are processed.
Correctly explain the difference between pcap_loop() and
pcap_dispatch().
In sniffex.c, don't print the payload if there isn't any.所以我对它很熟悉。:-)
我需要花一些时间看一下Linux内核代码(同样),看看0的超时值对更新的内核会产生什么影响。但是,当编写使用libpcap/WinPcap进行实时捕获的代码时,您应该始终像为这样一个平台编写代码一样;然后,您的代码将更可移植到其他平台,并且如果零超时的行为发生变化,则不会中断。
https://stackoverflow.com/questions/29875110
复制相似问题