我们在Linux上我们得到的每个数据包的报头嗅探使用libpcap的数据包的样子:
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
现在,这是我的理解是caplen是我们抓获LEN时是电线上的数据包的长度数据的长度。 在某些情况下(例如设定当打开PCAP设备时snaplen有过低),我们可以捕捉数据包的唯一部分,即长度将被“caplen”,而“len个”是原来的长度。 因此,caplen应等于或小于LEN,但从未大于LEN。
那是一个正确的认识? 我们在某些机器seing caplen> LEN
你的理解是正确的,至少基于PCAP手册页。
caplen是数据提供给您的捕获量。 LEN是该数据包的实际长度。
我不知道那会给你一个caplen> LEN任何情况。 我通常似乎他们等于为我的snaplen有足够高。
是你的理解是正确的Caplen总是比莱恩少。 有时候,我们不需要捕获整个数据包。 但是,为什么你would'nt捕捉有机会全包? 由于沉重的网络流量would'nt是一个好主意。 Are'nt我们实际上失去了宝贵的数据,如果我们不捕获在电线上出现的全包? 第其实这取决于你的目的,如果你只是想根据协议,并就注定了应用包进行分类,U只需要大约14个字节(以太网)加上20个字节(IP)+加上另外20(TCP)因而你显然只需要54个字节的数据进行分类基于协议的报文,所以很多负荷和时间的保存在减少从pcappkthdr-> LEN到pcappkthdr-> caplen :)加工尺寸
如果在数据包标头被破坏(这意味着如果headerlength值弄乱以某种方式)然后所捕获的长度将大于分组的实际长度。
如果caplen> len个,这是一个错误; 您使用的是什么版本的libpcap?