9

在使用pcap_open_live从接口嗅探时,我看到了很多使用各种数字作为SNAPLEN值的示例,范围从BUFSIZ( <stdio.h>) 到“幻数”。

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

否则,是否有一种非异国情调的方法来设置 SNAPLEN 值?

谢谢

4

1 回答 1

8

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 中尚不存在对它的支持。)

于 2012-02-19T19:26:38.917 回答