формат libpcap — заголовок пакета — incl_len/orig_len

Структура заголовка пакета libpcap имеет 2 поля длины:

typedef struct pcaprec_hdr_s {
        guint32 ts_sec;         /* timestamp seconds */
        guint32 ts_usec;        /* timestamp microseconds */
        guint32 incl_len;       /* number of octets of packet saved in file */
        guint32 orig_len;       /* actual length of packet */
} pcaprec_hdr_t;

incl_len: количество байтов пакетных данных, фактически захваченных и сохраненных в файле. Это значение никогда не должно превышать orig_len или значение snaplen глобального заголовка.

orig_len: длина пакета в том виде, в котором он появился в сети на момент захвата. Если incl_len и orig_len отличаются, фактически сохраненный размер пакета был ограничен snaplen.

Может ли кто-нибудь сказать мне, в чем разница между двумя полями длины? Мы полностью сохраняем пакет, тогда как они могут отличаться?


person broun    schedule 08.03.2012    source источник


Ответы (2)


Чтение документации на вики Wireshark ( http://wiki.wireshark.org/Development/LibpcapFileFormat ) и изучая пример файла pcap, похоже, что incl_len и orig_len обычно имеют одно и то же количество. Единственное время, когда они будут отличаться, это если длина пакета превысила размер snaplen, который указан в глобальном заголовке файла.

Я просто предполагаю, но я предполагаю, что snaplen указывает размер статического буфера, используемого для захвата. В случае, если пакет был слишком большим для буфера захвата, это метод формата для сигнализации этого факта. snaplen задокументировано как «обычно» 65535, что достаточно для большинства пакетов. Но в документации указано, что размер может быть ограничен пользователем.

person Multimedia Mike    schedule 08.03.2012

Может ли кто-нибудь сказать мне, в чем разница между двумя полями длины? Мы полностью сохраняем пакет, тогда как они могут отличаться?

Если вы сохраняете весь пакет, 2 не должны отличаться.

Однако, если, например, вы запустите tcpdump или TShark, или dumpcap, или Wireshark с захватом из командной строки, и укажете малое значение с флагом "-s n" или укажете маленькое значение в параметре «Ограничить каждый пакет до [n] байт» в графическом интерфейсе Wireshark, тогда libpcap/WinPcap будет передано это значение и будут предоставлены только первые n байты. каждого пакета в программу, и весь пакет не будет сохранен.

Ограниченная «длина снимка» означает, что вы не видите все данные пакета, поэтому некоторый анализ может быть невозможен, но означает, что в ОС требуется меньше памяти для буферизации пакетов (поэтому меньшее количество пакетов может быть отброшено) и меньше ресурсов ЦП. пропускная способность необходима для копирования данных пакета в приложение, и меньшая пропускная способность диска требуется для сохранения пакетов на диск, если приложение сохраняет их (что также может уменьшить количество отброшенных пакетов), и для сохраненных пакетов требуется меньше места на диске.

person Community    schedule 05.08.2013