Skip to content

PCAP vs PCAPNG : différences entre les deux formats

PCAP vs PCAPNG comparés bloc par bloc : en-têtes, interfaces, résolution des horodatages, métadonnées, outils qui écrivent chaque format et conversion.

Publié le 9 min de lecture

En bref. Le pcap classique est un en-tête de fichier de 24 octets suivi d'enregistrements de paquets, avec un seul type de couche liaison, un seul snaplen et une seule résolution d'horodatage pour tout le fichier. Le pcapng est une suite de blocs typés : il peut décrire plusieurs interfaces de capture avec des types de lien et des résolutions différents, et il stocke des métadonnées comme les noms d'interface, des commentaires, de la résolution de noms, des statistiques et même des secrets de déchiffrement. Wireshark et dumpcap écrivent du pcapng par défaut ; tcpdump écrit du pcap. La conversion de pcapng vers pcap ne fonctionne que si tous les paquets partagent un même type de lien, et elle supprime des métadonnées. Conservez le fichier original comme preuve et convertissez des copies.

Les deux formats sont en cours de spécification au sein du groupe de travail Operations and Management Area de l'IETF, dans le brouillon PCAP Capture File Format et le brouillon PCAP Now Generic (pcapng). Les détails ci-dessous suivent ces documents.

Le pcap classique : un en-tête, puis des enregistrements

Un fichier pcap classique a une structure fixe.

PartieTailleChamps
En-tête de fichier24 octetsnombre magique, version majeure et mineure, deux champs réservés, SnapLen, LinkType
En-tête d'enregistrement16 octets par paquetsecondes de l'horodatage, fraction de l'horodatage, longueur capturée, longueur d'origine
Données du paquetlongueur capturéeles octets à partir de la couche liaison

Le nombre magique remplit deux rôles. Il indique au lecteur l'ordre des octets de la machine qui a écrit le fichier (A1 B2 C3 D4 lu en big-endian, D4 C3 B2 A1 en little-endian), et il fixe la résolution des horodatages : 0xA1B2C3D4 signifie que la fraction est en microsecondes, 0xA1B23C4D en nanosecondes.

Tout le reste est global. Il y a un seul LinkType pour le fichier (Ethernet, Linux cooked capture, IP brut, loopback BSD...), donc une capture prise sur deux types d'interface différents ne peut pas tenir dans un seul fichier pcap. Il y a un seul SnapLen : le nombre maximal d'octets conservés par paquet. Quand la longueur capturée d'un enregistrement est inférieure à sa longueur d'origine, le paquet a été tronqué, et tout ce qui dépasse est perdu pour de bon. Cela compte plus tard pour le réassemblage TCP et l'extraction de fichiers.

La force du format, c'est sa simplicité. Presque tous les outils réseau écrits depuis vingt-cinq ans savent le lire, et un parseur tient en quelques dizaines de lignes.

pcapng : un flux de blocs typés

Le pcapng remplace l'en-tête fixe par des blocs. Chaque bloc commence par un type et une longueur totale, et répète cette longueur à la fin : un lecteur peut ainsi sauter les blocs qu'il ne comprend pas, et même parcourir le fichier à l'envers. La plupart des blocs acceptent des options (des champs clé/valeur typés), ce qui permet d'ajouter des métadonnées sans casser les lecteurs plus anciens.

Le brouillon définit ces blocs :

BlocRôle
Section Header Block (SHB)Ouvre une section. Contient le nombre magique d'ordre des octets 0x1A2B3C4D et des options comme le matériel, l'OS et l'application de capture.
Interface Description Block (IDB)Un par interface : type de lien, snaplen, et des options comme if_name, if_description, if_tsresol, if_tsoffset, le filtre de capture.
Enhanced Packet Block (EPB)Un paquet : ID d'interface, horodatage sur 64 bits, longueurs capturée et d'origine, données, commentaires et drapeaux optionnels.
Simple Packet Block (SPB)Un enregistrement minimal sans horodatage, rattaché à la première interface.
Name Resolution Block (NRB)Correspondances adresse-nom observées au moment de la capture.
Interface Statistics Block (ISB)Compteurs comme les paquets reçus et perdus par l'interface.
Decryption Secrets Block (DSB)Secrets de session, par exemple un journal de clés TLS, stockés dans la capture.
Custom BlockDonnées propres à un éditeur.

Les fichiers anciens peuvent aussi contenir l'ancien Packet Block, obsolète, que l'EPB a remplacé.

Plusieurs interfaces dans un seul fichier

Comme le type de lien se trouve dans l'IDB, un même fichier pcapng peut contenir des paquets d'une carte Ethernet et d'une interface de loopback en même temps, chaque EPB désignant son interface par un index. Un fichier peut aussi contenir plusieurs sections, chacune ouverte par son propre SHB. Concaténer deux fichiers pcapng produit donc un fichier pcapng valide.

Une résolution d'horodatage par interface

L'horodatage d'un EPB est un compteur sur 64 bits d'unités écoulées depuis 1970. L'unité est fixée par interface via if_tsresol ; en l'absence de cette option, le brouillon spécifie la microseconde, comme le pcap classique. Une capture peut donc mélanger une interface à la microseconde et une interface à la nanoseconde, et if_tsoffset peut décaler l'horloge d'une interface d'un nombre fixe de secondes. Un lecteur qui ignore ces options affichera des heures fausses : c'est l'un des bugs classiques des parseurs maison.

La capture d'exemple fictive fournie avec PCAP Parser l'illustre : elle contient une interface Ethernet à la microseconde et une interface de loopback BSD à la nanoseconde, dans le même fichier.

Comparaison côte à côte

pcappcapng
Structureen-tête fixe + enregistrementsblocs typés avec options
Types de lien par fichierunun par interface, plusieurs interfaces
Résolution d'horodatageµs ou ns, pour tout le fichierpar interface (if_tsresol), µs par défaut
Noms d'interface, OS, applicationnonoui (options IDB et SHB)
Commentaires et drapeaux par paquetnonoui (options EPB)
Résolution de noms, statistiquesnonNRB, ISB
Secrets de déchiffrement embarquésnonDSB
Outil qui l'écrit par défauttcpdump, outils basés sur libpcapWireshark, dumpcap, tshark
Prise en chargequasi universellelarge, mais pas par tous les anciens outils

Quels outils écrivent quel format

  • Wireshark, dumpcap et tshark écrivent du pcapng par défaut. tshark peut écrire du pcap classique avec -F pcap, comme l'indique le manuel de tshark.
  • tcpdump écrit du pcap classique. Ajoutez -s 0 (ou une grande valeur) pour que les paquets ne soient pas tronqués par un petit snaplen sur les anciennes versions.
  • pktmon et netsh trace sous Windows enregistrent au format ETL, qui n'est ni l'un ni l'autre. Convertissez d'abord l'ETL en pcapng ; le guide pour ouvrir une capture en ligne traite ce cas.

Les extensions de fichier ne sont qu'un indice. Beaucoup de fichiers .pcap sont en réalité du pcapng, et l'inverse arrive aussi. Un bon lecteur identifie le format à partir des premiers octets, pas du nom. PCAP Parser fait exactement cela, et il nomme les formats qu'il ne sait pas lire (captures compressées, snoop de Solaris, Microsoft Network Monitor, la variante « modified pcap ») au lieu d'échouer en silence.

Convertir entre pcap et pcapng

La suite Wireshark fournit les bons outils. editcap réécrit un fichier dans un autre format avec -F :

# 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

Quand la conversion pcapng vers pcap échoue

Si le pcapng contient des interfaces avec des types de lien différents, le format classique ne peut pas le représenter. Découpez d'abord par interface, puis convertissez chaque partie :

tshark -r capture.pcapng -Y "frame.interface_id == 0" -F pcap -w eth0.pcap

Dans toute conversion de pcapng vers pcap, attendez-vous à perdre : les noms et descriptions d'interface, les commentaires, les drapeaux par paquet, les blocs de résolution de noms et de statistiques, et tout Decryption Secrets Block. Ce dernier point mérite d'être connu : editcap peut ajouter un journal de clés TLS à un pcapng avec --inject-secrets, et la conversion en pcap le jette.

Conversion et gestion de la preuve

La conversion réécrit chaque en-tête d'enregistrement : le fichier produit a donc une empreinte différente de l'original. Dans une enquête, calculez l'empreinte de l'original et conservez-le, convertissez une copie de travail et notez la commande dans vos notes. Ne « mettez jamais à niveau » l'unique exemplaire.

Ce qu'un parseur doit prendre en charge

Si vous choisissez ou écrivez un outil, la liste est courte mais stricte :

  1. Les deux nombres magiques pcap dans les deux ordres d'octets, en microsecondes et en nanosecondes.
  2. Les blocs pcapng SHB, IDB, EPB et SPB, plus l'ancien Packet Block.
  3. Plusieurs interfaces et plusieurs sections, chacune avec son propre ordre d'octets.
  4. if_tsresol et if_tsoffset par interface.
  5. Un signalement clair des paquets tronqués par le snaplen et des types de lien non décodés.

PCAP Parser remplit cette liste : il lit le pcap classique dans les deux ordres d'octets en µs et en ns, et le pcapng avec SHB, IDB, EPB, SPB et l'ancien Packet Block, plusieurs interfaces et sections, et une résolution et un décalage par interface. Il détecte les Decryption Secrets Blocks et vous signale leur présence, mais il ne déchiffre pas le TLS. Pour voir ce qu'il affiche une fois le fichier ouvert, lisez comment utiliser PCAP Parser.

FAQ

pcapng est-il meilleur que pcap ?

pcapng contient davantage : plusieurs interfaces avec des types de lien différents, une résolution d'horodatage par interface, des commentaires, de la résolution de noms et des statistiques. Le pcap classique est plus simple et reconnu par davantage d'anciens outils. Pour une preuve, conservez le fichier original dans le format où il a été capturé.

Tout fichier pcapng peut-il être converti en pcap ?

Non. Le pcap classique n'a qu'un type de lien et un snaplen par fichier. Un pcapng dont les interfaces ont des types de lien différents doit d'abord être découpé par interface, et les commentaires, noms d'interface et secrets embarqués sont perdus lors de la conversion.

Comment savoir quel est le format d'un fichier, quelle que soit son extension ?

Regardez les quatre premiers octets. Un pcap classique commence par un nombre magique tel que A1 B2 C3 D4 ou D4 C3 B2 A1 ; un pcapng commence par le type de Section Header Block 0A 0D 0D 0A. capinfos, de la suite Wireshark, affiche aussi le type de fichier.

Articles liés

Comparatif équitable de Wireshark, tshark, NetworkMiner, Zeek, Zui et PCAP Parser pour l'analyse pcap : points forts, limites et quel outil pour quel usage.
Ouvrir un fichier pcap ou pcapng en ligne sans rien installer : upload ou lecture dans le navigateur, formats qui échouent et limites d'un outil web.
Lire le DNS dans une capture réseau : requêtes et réponses, codes de retour, domaines rares ou aléatoires et signes de tunnel DNS, avec leurs limites.