0

我编写了一个非常简单的 C 程序来使用 pcap 进行数据包捕获。问题是,它只涉及我网络活动的一小部分。(我认为模式是它只接收新的 TCP 连接。)

例如,当我使用浏览器或 wget 执行 GET 请求时,或者当我启动 X-Chat IRC 客户端并连接时,它会接收到一堆数据包。

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

我想知道为什么它只接收我发送/接收的一小部分数据包。这是我的代码。我很感激任何反馈。

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

4

2 回答 2

0

Fixed it. When I change my TIMEOUT value from -1 to something else it works (ie it picks up on all network activity). Don't really know what's going on there (haven't thought about it much yet) so if someone does please holla.

于 2010-12-02T01:35:35.130 回答
0

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

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

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

于 2013-01-13T00:41:00.493 回答