用于PCAP实时捕获的最佳SNAPLEN

前端之家收集整理的这篇文章主要介绍了用于PCAP实时捕获的最佳SNAPLEN前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当使用pcap_open_live从界面嗅探时,我已经看到很多使用各种数字作为SNAPLEN值的示例,范围从BUFSIZ(< stdio.h>)到“幻数”.

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

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

谢谢

解决方法

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中还没有支持它.)

猜你在找的C&C++相关文章