Capture de paquets headless sur un terminal Linux et Windows

Un rédacteur XDA cette semaine a plaidé pour ignorer Wireshark sur Windows 11 et commencer par pktmon, le moniteur de paquets intégré. Ce cadrage correspond à une réalité plus large avec laquelle vivent la plupart des opérateurs : la boîte que nous devons renifler n’est rarement celle sur laquelle nous sommes assis. Cela pourrait être un conteneur Docker, un VPS non géré, une Raspberry Pi dans un placard ou un routeur OPNsense avec rien d’ouvert sauf SSH. C’est le problème de capture headless, et l’interface graphique de Wireshark n’est pas la solution. Ce dont nous avons besoin est une CLI qui fonctionne sur SSH, écrit un pcap rotatif sans surveillance et lit les filtres BPF de la même manière que le moteur de capture de Wireshark. Nous avons testé sept outils qui font exactement cela, sur les hôtes Windows et Linux, et les avons classés par force.

À la recherche d’un outil de capture de paquets headless

Une capture à distance a des contraintes différentes d’une capture de bureau. Six choses font la différence :

C’est la liste de contrôle. Maintenant les outils.

Comparaison rapide

OutilIdéal pourPlateformesForfait gratuitPrix initial/moisÉvaluation
TSharkDissecteurs Wireshark complets sur la ligne de commandeWindows, macOS, LinuxOuiGratuit5/5
tcpdumpCaptures headless omniprésentes sur Linux et BSDLinux, macOS, BSDOuiGratuit5/5
pktmonCaptures Windows sans installer quoi que ce soitWindows 10, 11, Server 2019+OuiGratuit4/5
tcpflowReconstruction des flux TCP dans les fichiersLinux, macOSOuiGratuit4/5
ngrepCorrespondance de motifs de style grep sur le filLinux, macOS, WindowsOuiGratuit4/5
ZeekTransforming packets into searchable logsLinux, macOS, BSDOuiGratuit4.5/5
TermsharkInterface Wireshark à l’intérieur d’une session SSHLinux, macOS, Windows, BSDOuiGratuit4/5

Les outils

1. TShark, pour les dissecteurs Wireshark complets sur la ligne de commande

TShark est livré avec Wireshark et exécute le moteur dissécteur exact, moins l’interface graphique. Chaque protocole que Wireshark décode, TShark le décode vers stdout, et chaque filtre d’affichage que nous connaissons de Wireshark fonctionne littéralement (-Y "http.request.method == POST"). Pointez-le vers une interface avec -i eth0, ajoutez -w capture.pcap pour écrire, ajoutez -b duration:600 -b files:24 pour tourner toutes les heures pendant une journée complète, et nous avons capture et analyse sans surveillance en un seul binaire.

Où il tombe court : sous Windows, il a besoin de l’installation complète de Wireshark pour récupérer Npcap ; sur les images Linux réduites, il tire les bibliothèques dissecteur, qui ne sont pas petites. Le déchiffrement TLS en direct nécessite toujours un fichier keylog, comme l’interface graphique.

Tarification : Gratuit, open-source, GPLv2.

Plateformes : Windows, macOS, la plupart des distributions Linux, BSD.

Télécharger : Fondation Wireshark

En résumé : le défaut lorsque nous voulons le cerveau de Wireshark sans la fenêtre de Wireshark.

2. tcpdump, pour les captures headless sur Linux et BSD

tcpdump est l’outil que chaque hôte Unix a déjà, ou est à un paquet d’avoir. tcpdump -i eth0 -w /var/log/capture.pcap -G 3600 -C 200 'tcp port 443' enregistre dans un pcap rotatif que nous pouvons récupérer plus tard et ouvrir dans Wireshark, TShark ou l’un des outils ci-dessous. Sa syntaxe de filtre BPF correspond exactement aux filtres de capture de Wireshark, et le binaire pèse moins de 2 Mo sur la plupart des distributions.

Où il tombe court : pas de filtres d’affichage, pas de décodage de protocole au-delà du mode -vvv intégré. Sur macOS Big Sur et versions ultérieures, certaines interfaces sont verrouillées sans autorisations supplémentaires.

Tarification : Gratuit, open-source, BSD 3-clause.

Plateformes : Linux, macOS, FreeBSD, OpenBSD, NetBSD.

Télécharger : Groupe Tcpdump

En résumé : la réponse réflexe sur n’importe quelle boîte Unix qui fonctionne headless.

3. pktmon, pour les captures Windows sans installer quoi que ce soit

pktmon est le Packet Monitor que Microsoft livre avec Windows 10, Windows 11 et Windows Server 2019 et versions ultérieures. pktmon start --capture --pkt-type all --file-size 200 enregistre dans un fichier ETL que nous convertissons avec pktmon pcapng (ou, sur les anciens builds, pktmon etl2txt) et ouvrons dans Wireshark ou TShark ailleurs. Pour une boîte Server Core, ou un ordinateur portable durci où l’installation d’un renifleur est un ticket de changement, pktmon effectue la capture avec les outils déjà sur le disque.

Où il tombe court : la CLI est verbeuse, sa syntaxe de filtrage utilise les ID de composant plutôt que BPF, et l’étape ETL-à-pcap est un mouvement supplémentaire qui nous lie à une machine Windows pour la conversion.

Tarification : Gratuit, livré avec Windows.

Plateformes : Windows 10, Windows 11, Windows Server 2019+.

Télécharger : Microsoft Learn

En résumé : la réponse quand l’hôte est Windows et toucher l’inventaire logiciel ne l’est pas.

4. tcpflow, pour la reconstruction des flux TCP dans les fichiers

tcpflow capture le trafic en direct (ou lit un pcap) et écrit chaque flux TCP reconstruit dans son propre fichier, une direction par fichier. C’est souvent ce que nous voulons réellement quand la question est « qu’a envoyé ce client à ce serveur » et parcourir les paquets dans Wireshark est la mauvaise altitude. Il est livré dans Debian, Ubuntu, Fedora et Homebrew, et son langage de filtrage est du pur BPF.

Où il tombe court : UDP est un citoyen de seconde classe ; TLS et les autres flux chiffrés dumpent du ciphertext comme tcpdump. Les fichiers reconstruits grossissent également rapidement sur les captures longues.

Tarification : Gratuit, open-source, GPLv3.

Plateformes : Linux, macOS.

Télécharger : Simson Garfinkel sur GitHub

En résumé : le choix quand le livrable est « le corps HTTP », pas « la trace de paquet ».

5. ngrep, pour la correspondance de motifs de style grep sur le fil

ngrep apporte un motif de style POSIX familier au trafic en direct et aux fichiers pcap. ngrep -q -W byline -d eth0 'GET|POST' 'tcp port 80' imprime uniquement les paquets dont la charge utile correspond à la regex, le filtre BPF entourant rétrécissant le côté interface. Pour des questions rapides comme « le client envoie-t-il le mauvais en-tête Host » ou « la réponse contient-elle cette chaîne d’erreur », ngrep gagne la gymnastique des filtres d’affichage.

Où il tombe court : il ne comprend pas TLS ou HTTP/2 framing, donc tout ce qui est chiffré revient comme du bruit. Son cycle de libération a ralenti, et bien que la plupart des distributions le emballent toujours, certaines ne le font pas.

Tarification : Gratuit, open-source, BSD révisé.

Plateformes : Linux, macOS, Windows via WSL.

Télécharger : ngrep sur GitHub

En résumé : celui auquel tendre quand notre premier instinct est grep.

6. Zeek, pour transformer les paquets en journaux interrogeables

Zeek, anciennement Bro, se situe entre capture brute et un IDS complet. Au lieu de pcap, il écrit des journaux structurés par protocole (conn.log, dns.log, http.log, ssl.log, x509.log et des dizaines d’autres) que nous pouvons grep, envoyer à Splunk ou Loki, ou alimenter un SIEM. Sur un laboratoire à domicile ou un routeur avec un port miroir, Zeek nous donne des semaines de données de comportement dans une empreinte que pcap ne pourrait pas toucher.

Où il tombe court : ce n’est pas une installation de cinq minutes ; attendez-vous à une étape de compilation ou à un paquet distro plus une légère passe de configuration. La courbe d’apprentissage est réelle, et la valeur apparaît le deuxième jour, pas le jour zéro.

Tarification : Gratuit, open-source, BSD révisé.

Plateformes : Linux, macOS, FreeBSD.

Télécharger : Projet Zeek

En résumé : le choix quand nous voulons répondre aux questions des semaines plus tard, pas regarder les paquets aujourd’hui.

7. Termshark, pour l’interface Wireshark à l’intérieur d’une session SSH

Termshark est un front-end terminal pour TShark. Ouvrez un pcap ou attachez-vous à une interface en direct et nous obtenons une liste de paquets familière, un arbre de protocole et un volet hex, tout rendu dans le terminal déjà ouvert. Cela fonctionne sur SSH, sur tmux, sur une console série dans une VM headless, partout où TTY est tout ce que nous avons.

Où il tombe court : à 80 colonnes, la mise en page devient encombrée, et les captures en direct sur les liaisons très haut débit peuvent prendre du retard dans l’interface utilisateur. C’est une visionneuse, pas un remplacement pour la collecte scripté.

Tarification : Gratuit, open-source, MIT.

Plateformes : Linux, macOS, Windows, FreeBSD.

Télécharger : Termshark

En résumé : le plus proche que nous obtenons de Wireshark sur une boîte qui n’aura jamais d’écran.

Comment choisir

FAQ

Quel est le meilleur outil de capture de paquets headless pour un serveur Windows ?

pktmon sur Windows Server 2019 et versions ultérieures. Il est livré avec le système d’exploitation, capture au niveau ETW, se fait tourner seul et génère pcapng directement sur les builds actuels. Quand nous avons besoin des dissecteurs de Wireshark, nous convertissons le fichier et l’ouvrons dans TShark sur une station de travail.

Pouvons-nous exécuter TShark ou tcpdump sans root ?

Oui sous Linux, avec setcap cap_net_raw,cap_net_admin+eip sur le binaire. Cela accorde des privilèges de capture à un exécutable spécifique sans donner au appelant root complet. Sur BSD, ajoutez l’utilisateur au groupe qui possède les appareils bpf. Sous Windows, TShark a besoin d’Administrator pour parler à Npcap.

Comment faisons-nous pivoter les captures pour qu’une session longue ne remplisse pas le disque ?

tcpdump utilise -G <seconds> pour la rotation basée sur le temps et -C <MB> pour la rotation basée sur la taille, combinée avec -W <count> pour limiter le nombre de fichiers conservés. TShark expose le même via -b duration: et -b filesize:. pktmon est limité avec --file-size et son mode de journal circulaire. Zeek fait pivoter ses journaux selon un calendrier fixe tout seul.

Le langage de filtre d’affichage de Wireshark est-il le même que la syntaxe tcpdump ?

Non. Le filtre de capture de tcpdump et TShark (-f) utilise la syntaxe BPF (tcp port 443 and host 10.0.0.1). Le filtre d’affichage de Wireshark et TShark (-Y) est un langage différent (tcp.port == 443 && ip.addr == 10.0.0.1). Tous les deux méritent d’être appris ; le filtre côté capture s’exécute à la vitesse du noyau, celui côté affichage s’exécute sur des paquets déjà capturés.

pktmon peut-il remplacer complètement Wireshark ?

Non. pktmon est un outil de capture, pas un analyseur. Il enregistre dans ETL, convertit en pcapng sur les builds plus récents et s’arrête. Pour décoder les poignées de main TLS, les flux HTTP/2 ou QUIC, nous ouvrons toujours le pcap résultant dans Wireshark ou TShark. Les deux se complètent, pas se remplacent.

Est-il sûr d’exécuter ces outils sur un hôte de production ?

Oui, avec une prudence raisonnable. La capture de paquets est passive et ne modifie pas le trafic, mais le coût CPU sur une liaison occupée n’est pas zéro, et les fichiers pcap peuvent croître rapidement. Limitez le disque avec une politique de rotation, réduisez le filtre BPF pour limiter le CPU, et préférez un port miroir ou un robinet à la capture en ligne où le profil de risque compte.