Подтвердить что ты не робот

Pcap struct pcap_pkthdr len vs caplen

Мы обнюхиваем пакеты, используя libpcap на linux Заголовок, который мы получаем для каждого пакета, выглядит следующим образом:

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) мы можем захватывать только части пакета, эта длина будет "caplen", а "len" - это исходная длина. Таким образом, caplen должен быть равен или меньше len, но не больше len.

Это правильное понимание? Мы используем капель > len на некоторых машинах.

4b9b3361

Ответ 1

Ваше понимание правильное, по крайней мере, на основе страницы man pcap.

caplen - это объем данных, доступных вам при захвате. len была фактической длиной пакета.

Я не знаю ни одного случая, который дал бы вам caplen > len. Обычно я кажусь им равным, так как моя хватка достаточно высока.

Ответ 2

Да, ваше понимание правильное. Каплен всегда меньше Лен. Иногда нам не нужно захватывать весь пакет. Но почему бы вам не захватить весь пакет, если у вас есть шанс? Потому что в тяжелом сетевом трафике, который не будет хорошей идеей. Разве мы не теряем драгоценные данные, если мы не собираем весь пакет, который появляется на проводе? Нет. На самом деле это зависит от вашей цели, если вы просто хотите классифицировать пакеты на основе протоколов и приложения, которому оно предназначено, вам просто нужно около 14 байтов (Ethernet) плюс 20 байт (Ip) + плюс еще 20 (Tcp) поэтому вам, по-видимому, требуется всего 54 байта данных для классификации пакетов на основе протоколов, поэтому сохраняется большая загрузка и время для уменьшения размера обработки с pcappkthdr- > len до pcappkthdr- > caplen:)

Если заголовки в пакетах повреждены (это означает, что если значения длины заголовка каким-то образом перепутаны), то захваченная длина будет больше, чем фактическая длина пакета.

Ответ 3

Если caplen > len, это ошибка; какую версию libpcap вы используете?

Ответ 4

Я установил максимальную длину до 60, затем

Если у меня есть пакет длиной 100,

caplen будет равен 60,

len будет 100 (если я правильно понимаю ваши слова)

Тогда в следующий раз, когда я получу пакет

Остаток до пакета (длина 40)?

или Новый (остальные могут попасть в самосвал?)