【问题标题】:pcap only picking up on new connectionspcap 只接受新的连接
【发布时间】:2013-01-13 08:41:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c pcap packet-capture packet-sniffers


    【解决方案1】:

    修复它。当我将 TIMEOUT 值从 -1 更改为其他值时,它会起作用(即它会接收所有网络活动)。真的不知道那里发生了什么(还没有想太多)所以如果有人知道,请大家好。

    【讨论】:

      【解决方案2】:

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

      在这种情况下,如果有足够的数据包到达以填满缓冲区,例如,如果您执行 HTTP get 并且返回足够大的回复,或者如果 IRC 会话涉及大量要连接的数据包,则数据包会出现,但如果只是偶尔有数据包到达,例如在一个基本安静的网络上的 ARP 数据包,数据包将保留在缓冲区中,直到有足够的数据包到达以填满缓冲区,这可能需要无限长的时间,或者超时时间很长,这可能需要很长时间。

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

      【讨论】:

        猜你喜欢
        • 2014-10-05
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 2013-10-10
        • 1970-01-01
        相关资源
        最近更新 更多