2010-12-01 40 views
0

我写了一个非常简单的C程序来使用pcap进行数据包捕获。事情是,它只是在我的网络活动的一小部分。 (我认为这种模式只能在新的TCP连接上起作用)。pcap只接收新的连接

例如,当我使用浏览器或wget执行GET请求时,或者启动时,它会拾取一大堆数据包我的X聊天IRC客户端和连接。

但是,当我离开我的IRC客户端运行时,它不会接收对应于文本消息的数据包。同样,它不会在我家网络上的ARP广播上播放,或者在ping网站时ping数据包。

我想知道为什么它只接收我正在发送/接收的数据包的这个小子集。这是我的代码。我很感激任何反馈。

代码:http://pastebin.com/QDHRy6jM

回答

0

固定它。当我将TIMEOUT值从-1更改为其他值时(即它在所有网络活动中启动)。真的不知道那里发生了什么(还没有想太多),所以如果有人请霍拉。

0

什么是可能是发生的情况是,您正在一个平台上运行超时行为,它使用WInPcap处理BPF(* BSD,OS X),Solaris或Windows,其中底层数据包捕获机制pcap正在使用不立即传递数据包,但缓冲了一批数据包,并在缓冲区填满或超时过期时将它们传递给pcap,并且-1被解释为“无超时”或“非常长时间到”。

在这种情况下,如果有足够的数据包到达填满缓冲区,例如,如果您执行HTTP获取并返回足够大的回复,或者IRC会话涉及大量数据包连接,数据包会显示出来,但是如果只有偶尔的数据包到达,比如大多数安静网络上的ARP数据包,数据包将保留在缓冲区中,直到有足够的数据包到达填满缓冲区为止,这可能会花费无限期的时间,或者很长的超时时间到期,这可能需要相当长的一段时间。

降低超时时间(tcpdump使用1000,即1秒,Wireshark使用100,即1/10秒)意味着数据包将在相当短的时间内出现,即​​使没有足够的数据包到达来填满缓冲区。