PCAP vs. PCAPNG: Unterschiede der Dateiformate erklärt
PCAP vs. PCAPNG Block für Block: Header, Interfaces, Zeitstempelauflösung, Metadaten, welche Tools welches Format schreiben und wie Sie sicher konvertieren.
Kurz gesagt. Klassisches pcap besteht aus einem 24 Byte langen Datei-Header und darauf folgenden Paketeinträgen, mit genau einem Link-Layer-Typ, einer Snaplen und einer Zeitstempelauflösung für die ganze Datei. pcapng ist eine Folge typisierter Blöcke: Es kann mehrere Capture-Interfaces mit unterschiedlichen Link-Typen und Zeitstempelauflösungen beschreiben und speichert Metadaten wie Interface-Namen, Kommentare, Namensauflösung, Statistiken und sogar Entschlüsselungsgeheimnisse. Wireshark und dumpcap schreiben standardmäßig pcapng, tcpdump schreibt pcap. Die Umwandlung von pcapng in pcap funktioniert nur, wenn alle Pakete denselben Link-Typ haben, und sie verwirft Metadaten. Bewahren Sie die Originaldatei als Beweismittel auf und konvertieren Sie Kopien.
Beide Formate werden derzeit in der IETF-Arbeitsgruppe Operations and Management Area spezifiziert, im Draft PCAP Capture File Format und im Draft PCAP Now Generic (pcapng). Die folgenden Details stützen sich auf diese Dokumente.
Klassisches pcap: ein Header, dann Einträge
Eine klassische pcap-Datei hat einen festen Aufbau.
| Teil | Größe | Felder |
|---|---|---|
| Datei-Header | 24 Byte | Magic Number, Haupt- und Nebenversion, zwei reservierte Felder, SnapLen, LinkType |
| Eintrags-Header | 16 Byte pro Paket | Zeitstempel-Sekunden, Zeitstempel-Bruchteil, aufgezeichnete Länge, Originallänge |
| Paketdaten | aufgezeichnete Länge | die Bytes ab der Sicherungsschicht |
Die Magic Number erfüllt zwei Aufgaben. Sie verrät dem Leser die Bytereihenfolge des schreibenden Systems (A1 B2 C3 D4 big-endian gelesen, D4 C3 B2 A1 little-endian) und legt die Zeitstempelauflösung fest: 0xA1B2C3D4 bedeutet Mikrosekunden, 0xA1B23C4D Nanosekunden.
Alles andere gilt global. Es gibt genau einen LinkType pro Datei (Ethernet, Linux Cooked Capture, Raw IP, BSD-Loopback ...), daher passt ein Mitschnitt von zwei unterschiedlichen Interface-Typen nicht in eine pcap-Datei. Es gibt genau eine SnapLen: die maximale Anzahl an Bytes, die pro Paket gespeichert wird. Ist die aufgezeichnete Länge eines Eintrags kleiner als die Originallänge, wurde das Paket abgeschnitten, und der Rest ist endgültig verloren. Das ist später für die TCP-Reassemblierung und die Dateiextraktion wichtig.
Die Stärke des Formats ist seine Einfachheit. Nahezu jedes Netzwerk-Tool der letzten fünfundzwanzig Jahre kann es lesen, und ein Parser passt in ein paar Dutzend Zeilen.
pcapng: ein Strom typisierter Blöcke
pcapng ersetzt den festen Header durch Blöcke. Jeder Block beginnt mit Blocktyp und Gesamtlänge und wiederholt die Gesamtlänge am Ende, sodass ein Leser unbekannte Blöcke überspringen und die Datei sogar rückwärts durchlaufen kann. Die meisten Blöcke können Optionen tragen (typisierte Schlüssel-Wert-Felder); so kommen Metadaten hinzu, ohne ältere Leser zu brechen.
Der Draft definiert diese Blöcke:
| Block | Aufgabe |
|---|---|
| Section Header Block (SHB) | Beginnt eine Section. Enthält die Byte-Order-Magic 0x1A2B3C4D und Optionen wie Hardware, Betriebssystem und aufzeichnende Anwendung. |
| Interface Description Block (IDB) | Einer pro Interface: Link-Typ, Snaplen und Optionen wie if_name, if_description, if_tsresol, if_tsoffset oder der Capture-Filter. |
| Enhanced Packet Block (EPB) | Ein Paket: Interface-ID, 64-Bit-Zeitstempel, aufgezeichnete und Originallänge, Daten, optionale Kommentare und Flags. |
| Simple Packet Block (SPB) | Ein minimaler Paketeintrag ohne Zeitstempel, dem ersten Interface zugeordnet. |
| Name Resolution Block (NRB) | Zuordnungen von Adressen zu Namen, die bei der Aufzeichnung beobachtet wurden. |
| Interface Statistics Block (ISB) | Zähler wie empfangene und verworfene Pakete des Interfaces. |
| Decryption Secrets Block (DSB) | Sitzungsgeheimnisse, etwa ein TLS-Keylog, in der Aufzeichnung gespeichert. |
| Custom Block | Herstellerspezifische Daten. |
Ältere Dateien können außerdem den veralteten Packet Block enthalten, den der EPB ersetzt hat.
Mehrere Interfaces in einer Datei
Da der Link-Typ im IDB steht, kann eine einzige pcapng-Datei gleichzeitig Pakete eines Ethernet-Adapters und eines Loopback-Adapters enthalten; jeder EPB verweist per Index auf sein Interface. Eine Datei kann auch mehrere Sections enthalten, die jeweils mit einem eigenen SHB beginnen. Zwei aneinandergehängte pcapng-Dateien ergeben daher wieder eine gültige pcapng-Datei.
Zeitstempelauflösung pro Interface
Ein EPB-Zeitstempel ist ein 64-Bit-Zähler von Einheiten seit 1970. Die Einheit wird pro Interface über if_tsresol festgelegt; fehlt die Option, schreibt der Draft Mikrosekunden vor, wie beim klassischen pcap. Ein Mitschnitt kann also ein Interface mit Mikrosekunden- und eines mit Nanosekundenauflösung mischen, und if_tsoffset kann die Uhr eines Interfaces um eine feste Anzahl Sekunden verschieben. Ein Leser, der diese Optionen ignoriert, zeigt falsche Zeiten an – einer der klassischen Fehler selbstgeschriebener Parser.
Der fiktive Beispielmitschnitt von PCAP Parser zeigt genau das: Er enthält ein Ethernet-Interface mit Mikrosekunden- und ein BSD-Loopback-Interface mit Nanosekundenauflösung in derselben Datei.
Direkter Vergleich
| pcap | pcapng | |
|---|---|---|
| Aufbau | fester Header + Einträge | typisierte Blöcke mit Optionen |
| Link-Typen pro Datei | einer | einer pro Interface, mehrere Interfaces |
| Zeitstempelauflösung | µs oder ns, für die ganze Datei | pro Interface (if_tsresol), standardmäßig µs |
| Interface-Namen, Betriebssystem, Anwendung | nein | ja (IDB- und SHB-Optionen) |
| Kommentare und Flags pro Paket | nein | ja (EPB-Optionen) |
| Namensauflösung, Statistiken | nein | NRB, ISB |
| Eingebettete Entschlüsselungsgeheimnisse | nein | DSB |
| Standardmäßig geschrieben von | tcpdump, libpcap-basierte Tools | Wireshark, dumpcap, tshark |
| Tool-Unterstützung | nahezu universell | breit, aber nicht in jedem Alt-Tool |
Welche Tools welches Format schreiben
- Wireshark, dumpcap und tshark schreiben standardmäßig pcapng. tshark kann mit
-F pcapklassisches pcap schreiben, wie im tshark-Handbuch beschrieben. - tcpdump schreibt klassisches pcap. Ergänzen Sie
-s 0(oder einen großen Wert), damit Pakete bei älteren Versionen nicht durch eine kleine Snaplen abgeschnitten werden. - pktmon und netsh trace unter Windows zeichnen im ETL-Format auf, das keines der beiden ist. Wandeln Sie das ETL zuerst in pcapng um; der Leitfaden zum Öffnen eines Mitschnitts im Browser behandelt diesen Fall.
Dateiendungen sind nur ein Hinweis. Viele .pcap-Dateien sind in Wahrheit pcapng, und umgekehrt kommt es ebenfalls vor. Ein guter Leser erkennt das Format an den ersten Bytes, nicht am Namen. PCAP Parser macht genau das und benennt Formate, die er nicht lesen kann (komprimierte Mitschnitte, Solaris snoop, Microsoft Network Monitor, die Variante „modified pcap"), statt stillschweigend zu scheitern.
Zwischen pcap und pcapng konvertieren
Die Wireshark-Suite bringt die passenden Werkzeuge mit. editcap schreibt eine Datei mit -F in ein anderes Format um:
# pcapng -> classic pcap (microseconds)
editcap -F pcap capture.pcapng capture.pcap
# pcapng -> classic pcap keeping nanosecond timestamps
editcap -F nsecpcap capture.pcapng capture.pcap
# classic pcap -> pcapng
editcap -F pcapng capture.pcap capture.pcapng
# check the result: file type, encapsulation, interfaces, precision
capinfos capture.pcap
Wenn pcapng nach pcap scheitert
Enthält die pcapng-Datei Interfaces mit unterschiedlichen Link-Typen, kann das klassische Format sie nicht abbilden. Teilen Sie zuerst nach Interface auf und konvertieren Sie dann jeden Teil:
tshark -r capture.pcapng -Y "frame.interface_id == 0" -F pcap -w eth0.pcap
Bei jeder Umwandlung von pcapng in pcap gehen verloren: Interface-Namen und -Beschreibungen, Kommentare, Flags pro Paket, Namensauflösungs- und Statistikblöcke sowie jeder Decryption Secrets Block. Letzteres sollten Sie kennen: editcap kann einer pcapng-Datei mit --inject-secrets ein TLS-Keylog hinzufügen, und die Umwandlung in pcap wirft es weg.
Konvertierung und Beweissicherung
Die Umwandlung schreibt jeden Eintrags-Header neu, daher hat die Ausgabedatei einen anderen Hash als das Original. Im Ermittlungsfall hashen und behalten Sie das Original, konvertieren eine Arbeitskopie und notieren den Befehl in Ihren Fallnotizen. „Aktualisieren" Sie nie die einzige Kopie.
Was ein Parser unterstützen muss
Wenn Sie ein Tool auswählen oder selbst schreiben, ist die Liste kurz, aber streng:
- Beide pcap-Magic-Numbers in beiden Bytereihenfolgen, Mikro- und Nanosekunden.
- Die pcapng-Blöcke SHB, IDB, EPB und SPB sowie den veralteten Packet Block.
- Mehrere Interfaces und mehrere Sections, jede mit eigener Bytereihenfolge.
if_tsresolundif_tsoffsetpro Interface.- Klare Meldungen über durch die Snaplen abgeschnittene Pakete und über nicht dekodierte Link-Typen.
PCAP Parser erfüllt diese Liste: Er liest klassisches pcap in beiden Bytereihenfolgen mit µs und ns sowie pcapng mit SHB, IDB, EPB, SPB und dem veralteten Packet Block, mehreren Interfaces und Sections und Auflösung und Offset pro Interface. Er erkennt Decryption Secrets Blocks und weist darauf hin, entschlüsselt TLS aber nicht. Was er nach dem Öffnen anzeigt, zeigt der Rundgang PCAP Parser nutzen.
FAQ
Ist pcapng besser als pcap?
pcapng speichert mehr: mehrere Interfaces mit unterschiedlichen Link-Typen, Zeitstempelauflösung pro Interface, Kommentare, Namensauflösung und Statistiken. Klassisches pcap ist einfacher und wird von mehr alten Tools unterstützt. Als Beweismittel bewahren Sie die Originaldatei in dem Format auf, in dem sie aufgezeichnet wurde.
Lässt sich jede pcapng-Datei in pcap umwandeln?
Nein. Klassisches pcap hat einen Link-Typ und eine Snaplen pro Datei. Eine pcapng-Datei mit Interfaces unterschiedlicher Link-Typen muss zuerst pro Interface aufgeteilt werden, und Kommentare, Interface-Namen und eingebettete Schlüssel gehen bei der Umwandlung verloren.
Wie erkenne ich das Format einer Datei unabhängig von ihrer Endung?
Sehen Sie sich die ersten vier Bytes an. Klassisches pcap beginnt mit einer Magic Number wie A1 B2 C3 D4 oder D4 C3 B2 A1; pcapng beginnt mit dem Section-Header-Block-Typ 0A 0D 0D 0A. Auch capinfos aus der Wireshark-Suite zeigt den Dateityp an.