用于PCAP实时捕获的最佳SNAPLEN

时间:2012-02-19 17:58:13

标签: c live pcap snapshot mtu

使用pcap_open_live从界面嗅探时,我看到很多使用各种数字作为SNAPLEN值的示例,范围从BUFSIZ<stdio.h>)到“魔术数字“。

将SNAPLEN设置为我们捕获的接口的MTU不是更有意义吗? 通过这种方式,我们可以在PCAP缓冲区中同时容纳更多数据包。假设MRU等于MTU是否安全?

否则,是否有一种非常规的方式来设置SNAPLEN值?

由于

1 个答案:

答案 0 :(得分:6)

MTU是可以传递到链路层的最大有效载荷大小;它不包括任何链路层标头,因此,例如,在以太网上它将是1500,而不是1514或1518,并且不会大到足以捕获全尺寸以太网数据包。

此外,它不包含任何元数据标头,例如802.11无线电信息的radiotap标头。

如果适配器正在执行任何形式的碎片/分段/重组卸载,则传递给适配器或从适配器接收的数据包可能尚未分段或分段,或者可能已经重新组装,因此可能 大于MTU。

至于在PCAP缓冲区中安装更多数据包,这仅适用于Linux中具有固定大小数据包插槽的内存映射TPACKET_V1和TPACKET_V2捕获机制;其他捕获机制不为每个数据包保留最大大小的插槽,因此较短的快照长度无关紧要。对于TPACKET_V1和TPACKET_V2,较小的快照长度可能会有所不同,但至少对于以太网,libpcap 1.2.1尽可能地尝试为以太网选择合适的缓冲区大小。 (TPACKET_V3似乎没有固定大小的每个数据包插槽,在这种情况下它不会出现这个问题,但它最近才出现在官方发布的内核中,并且在libpcap中还没有支持它。)