Mes Projets

PCAP Toolkit

L’origine du projet : un collègue me parle de son problème lors du replay de PCAPs sur les sonde Suricata — les horodatages devaient être décalés manuellement pour coller à la fenêtre de replay. Ce premier besoin a vite débordé sur une boîte à outils complète de traitement de captures réseau, écrite en Rust, conçue autour d’une contrainte centrale : les captures qui dépassent la RAM disponible.

Le tri chronologique en deux passes ne conserve que ~20 octets par paquet en mémoire (horodatage, offset, longueur), ce qui permet de traiter des captures de plusieurs téraoctets sans rien charger en RAM. Autre particularité notable : l’analyseur de filtres BPF entièrement écrit en Rust — sans dépendance à libpcap — couvre la syntaxe tcpdump utilisée en pratique.

Comparaison avec les outils similaires

Fonctionnalitépcap-toolkittsharktcpreplaygopherCap
Tri économe en RAM (échelle To)
Fusion chronologique multi-fichiers
Filtrage par expression BPF
Décalage d’horodatages
Remappage d’adresses IP
Remappage inter-famille IPv4↔IPv6
Export Parquet / Avro
Statistiques par flux
replay simultané multi-interfaces
Sans dépendance libpcap

tshark reste le meilleur outil pour l’inspection interactive de protocoles et les requêtes de filtres d’affichage avancés. tcpreplay excelle dans le replay à vitesse ligne. gopherCap gère les scénarios de replay à grande échelle. pcap-toolkit comble l’espace entre eux : traitement par lots, intégration dans des pipelines, et modification du trafic à l’échelle — sans nécessiter libpcap sur la machine.

Cas d’usage courants

Préparer une capture pour le replay Suricata — fusionner une semaine de fichiers, décaler les horodatages, puis rejouer :

pcap-toolkit sort week/*.pcap --output sorted.pcap --timestamp-start 2024-06-01T00:00:00Z
pcap-toolkit replay sorted.pcap --interface eth0

Exporter en Parquet pour une analyse DuckDB :

pcap-toolkit export capture.pcap --output traffic.parquet
# duckdb: SELECT src_ip, dst_ip, dst_port, count(*) FROM read_parquet('traffic.parquet') GROUP BY ALL

Triage d’incident — statistiques de flux puis filtrage du trafic suspect :

pcap-toolkit stats capture.pcap
pcap-toolkit sort capture.pcap --output suspicious.pcap \
    --src-ip 10.0.0.0/8 --filter "tcp and dst port 443"

Fusionner et découper un mois de captures en fichiers horaires :

pcap-toolkit sort day*.pcap --output /archive/ --slice 1h --on-disk

Installation

cargo install pcap-toolkit

Les binaires pré-compilés pour Linux (x86_64, aarch64), macOS et Windows sont disponibles sur la page des releases. Le replay nécessite CAP_NET_RAW sous Linux.

Dépôt · crates.io · lib.rs