Это невозможно в Scapy на момент написания этой статьи. Вы все еще можете сделать это с помощью python, читая его как структуру байтов:
import struct
LITTLE_ENDIAN = "<"
BIG_ENDIAN = ">"
with open("temp.pcap", "rb") as f:
filebytes = f.read()
if filebytes[:2] == b"\xa1\xb2":
endianness = BIG_ENDIAN
elif filebytes[:2] == b"\xd4\xc3":
endianness = LITTLE_ENDIAN
# pcapng is a completely different filetype and has different headers
# It's magic number is also the same between big/little endian
elif filebytes[:2] == b"\n\r":
raise ValueError("This capture is a pcapng file (expected pcap).")
else:
raise ValueError("This capture is the wrong filetype (expected pcap.")
# Endianness is < or > and is handled by checking magic number.
pcap_headers = struct.unpack(endianness + "IHHIIII", filebytes[:24])
print(pcap_headers)
---
(2712847316, 2, 4, 0, 0, 524288, 1)
Здесь мы распаковываем <
для little-endian в моей системе macos (>
для больших -endian). H
читает 4 байта, а I
читает 2 байта. Подробнее о символах формата можно прочитать в документации Python3 struct Мы можем легко проверить число волхвов c:
>>> int(str("A1B2C3D4"), 16)
2712847316
Похоже, это действительно pcap с правильным числом волхвов c. Для маги c числа порядка байтов, взгляните на этот SO ответ (может быть несколько правильных pcap "волхвов c numbers").
Благодаря @ Cukic0d: исходный код scapy - отличное место для разбора pcap magi c numbers .