首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么pcap_loop()和获取数据包之间会有很长的延迟呢?

为什么pcap_loop()和获取数据包之间会有很长的延迟呢?
EN

Stack Overflow用户
提问于 2015-04-26 07:52:13
回答 1查看 3.2K关注 0票数 6

我在用libpcap写一个嗅探器。我的问题是,在调用pcap_loop()或pcap_next()与实际获取数据包(调用回调函数)之间有7-10秒的延迟。但是,如果我在同一设备上使用具有相同过滤器的wireshark,在我按下“开始”按钮后,就不会有这样的延迟。为什么我的程序有延迟,有没有办法解决这个问题?

我在研究atheros无线芯片。将设备设置为监视模式。

代码语言:javascript
复制
airmon-ng start wlan0

我敢肯定有很多的流量可以听,因为我可以看到在wireshark的包裹。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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提交中添加了所讨论的段落:

代码语言:javascript
复制
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进行实时捕获的代码时,您应该始终像为这样一个平台编写代码一样;然后,您的代码将更可移植到其他平台,并且如果零超时的行为发生变化,则不会中断。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29875110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档