Capturer le trafic réseau sous Windows avec Pktmon
L’outil « Pktmon » dont le nom signifie « Packet Monitor » a été introduit pour la première fois dans Windows Server 2019 et Windows 10 version 1809. Toujours disponible dans Windows 11 et Windows Server 2025, cet outil sert à capturer les paquets envoyés et reçus sur une carte réseau de la machine, mais aussi à détecter les pertes de paquets et à compter les paquets. C’est un outil d’analyse et de diagnostic.
Il peut s’avérer utile pour analyser les flux réseau sans utiliser un outil tiers comme Wireshark, que vous connaissez probablement. Malgré tout, il reste plus limité et son utilisation se résume à la ligne de commande via l’exécutable « Pktmon.exe ». Pour aller plus loin et bénéficier d’une interface graphique, il faut s’appuyer sur son intégration dans Windows Admin Center.
Sachez que Packet Monitor prend en charge plusieurs formats pour son fichier de sortie.
- Format texte exploitable avec TextAnalysisTool.NET
- Format PCAPNG exploitable avec Wireshark
- Format ETL exploitable avec l'outil Network Monitor de Microsoft
Vous pouvez donc effectuer une capture réseau sur un serveur, exporter les résultats dans un fichier PCAPNG et réaliser l’analyse à partir d’un poste de travail équipé de Wireshark. Ceci évite d’installer un outil tiers sur un serveur.
Remarque : en complément de Pktmon, vous pouvez utiliser l’outil gratuit « TCPView » présent dans la suite SysInternals de Microsoft.
Sommaire
I. Effectuer sa première capture avec Packet Monitor
Packet Monitor peut capturer tout le trafic réseau sur une machine. Néanmoins, plus la capture contient d’informations, plus l’analyse sera difficile. C’est pour cette raison qu’il est préférable de déclarer un ou plusieurs filtres pour capturer uniquement les paquets « qui nous intéressent » en fonction du contexte.
Nous devons donc apprendre à écrire un filtre. Packet Monitor prend en charge jusqu’à 32 filtres actifs en même temps. Au-delà de mes instructions, pensez à consulter l’aide de l’outil puisqu’elle est relativement bien faite. Pour obtenir de l’aide sur l’utilisation de Pktmon, indiquez le mot clé « help » à la fin de votre commande.
Packet Monitor est capable d’appliquer des filtres selon plusieurs critères : adresses IP, adresses MAC, ports, protocole de transport, identifiant de VLAN et EtherType (champ dans une trame Ethernet pour identifier le protocole de niveau supérieur).
Commencez par ouvrir une console PowerShell ou une Invite de commandes en tant qu'administrateur, afin d’utiliser Pktmon. Pour la rédaction de vos filtres, ces deux commandes pourront vous aider :
pktmon filter help
pktmon filter add help
Ce qui donne les résultats suivants :

Nous allons configurer un filtre sur le serveur « SRV-WS2025 » afin de capturer le trafic associé aux connexions SSH entrantes.
Le filtre ci-dessous, nommé « SSH » permet de capturer le trafic sur l’adresse IP « 192.168.10.211 » (adresse IP du serveur en lui-même), sur le port « 222 » (indiquez « 22 » pour le port par défaut de SSH). L’option « -p » est utilisée pour spécifier le numéro de port.
pktmon filter add SSH -i 192.168.10.211 -p 222
Remarque : l’adresse IP spécifiée peut correspondre à l’adresse IP source ou destination, cela n’a pas d’importance vis-à-vis de Packet Monitor.
Vous pouvez lister les filtres actifs, via cette commande :
pktmon filter list
Nous pouvons visualiser le filtre « SSH » que nous venons de créer.

Désormais, démarrons une capture en temps réel (aucun fichier de sortie) basé sur ce filtre :
pktmon start --etw -m real-time
Une fois la capture lancée, il convient d’initier une connexion SSH depuis une machine distante pour simuler une connexion sur le port 222. Par exemple :
ssh [email protected] -p 222
Dans la console, il n’est pas aisé de lire le contenu des échanges, même si nous pouvons voir qu’il y a bien des paquets capturés. On peut aussi identifier l’adresse IP de la machine à l’origine de la connexion SSH : 192.168.10.223.

Par la suite, nous verrons comment créer un fichier de sortie pour l’exploiter dans Wireshark.
Appuyez simplement sur les touches « CTRL + C » de votre clavier afin d’arrêter la capture.
Pour supprimer votre filtre, appelez-le par son nom. Le fait d’indiquer un nom à chaque filtre facilite leur gestion.
pktmon filter remove SSH
Puis, nous pourrions effectuer un exercice similaire pour capturer le trafic lié au DNS (port 53/UDP) grâce à un nouveau filtre nommé « DNS ».
pktmon filter add DNS -t UDP -p 53
L’option « -t » sert à préciser le protocole, il peut s’agir de UDP ou de TCP, mais aussi de ICMP ou ICMPv6 (pour le ping). Un filtre pour capturer les ping en IPv4 doit s’écrire de cette façon :
pktmon filter add PING -t ICMP
Il est essentiel de connaître le système de filtres pour bien prendre en main Packet Monitor.
II. Enregistrer une capture Pktmon dans un fichier de sortie
Précédemment, nous avons lancé une capture avec l’option « -m Real-Time », ce qui signifie que les résultats de la capture sont inscrits en temps réel dans la console. Sachez qu’il est possible d’effectuer une capture en tâche de fond et de stocker les résultats dans un fichier de sortie.
Quand vous lancez une capture, vous avez la possibilité de sélectionner une carte réseau spécifique ou de capturer le trafic sur toutes les cartes réseau. Chacune d’elle est associée à un ID, que vous pouvez visualiser via cette commande :
pktmon list
Dans mon cas, il n’y a qu’une seule carte réseau associée à l’ID « 17 ».

Ensuite, vous pouvez lancer une capture uniquement sur cette carte réseau et stocker les résultats dans le fichier « ping.etl » (stocké dans le répertoire courant) :
pktmon start -c --comp 17 --pkt-size 0 -f ping.etl

Quelques explications sont nécessaires :
- -c : activer le mode capture, c’est un raccourci de l’option « --capture »
- --comp : spécifier un ID de carte réseau à partir duquel effectuer la capture
- --pkt-size : nombre d’octets à journaliser à partir de chaque paquet : 128 octets par défaut. Si l’on indique 0, on journalise l’intégralité de chaque paquet
- -f : nom du fichier de sortie
Ensuite, la capture va tourner en tâche de fond… Pour savoir si vous avez reçu des paquets correspondants, affichez le compteur de paquets :
pktmon counters
Si cette commande retourne la valeur « Tous les compteurs sont remis à zéro » (la traduction est un peu trompeuse, au passage), cela signifie que Packet Monitor n’a pas capturé le moindre paquet pour le moment. Soit le filtre est trop restrictif, soit il n’y a pas eu de trafic.
Dans le cas présent, j’ai activé le filtre pour tracer les flux ICMP associés au ping. Il faut donc effectuer un ping vers ce serveur depuis une machine distante…
Et, là, le compteur de paquets a évolué :
pktmon counters

Pour arrêter la capture, exécutez cette commande (sinon elle continuera de tourner !).
pktmon stop
Un fichier de sortie « c:\ping.etl » a été généré. Néanmoins, le format ETL n’est pas pris en charge par Wireshark… Alors comment faire pour lire la capture avec cet outil ?
Remarque : pour compter les paquets sans les capturer, utilisez l’option « -o » à la place de « -c ». Par exemple : pktmon start -o --comp 17
III. Lire une capture Pktmon avec Wireshark
Packet Monitor ne peut pas créer un fichier de sortie directement au format « PCAPNG » utilisé par Wireshark. Mais, il est capable de convertir le fichier « ETL » en « PCAPNG » afin de nous fournir un fichier de sortie correspondant à nos besoins.
Nous allons prendre le fichier de sortie « ping.etl » créé à l’étape précédente afin de le convertir et obtenir un fichier « ping.pcapng ».
pktmon etl2pcap ping.etl -o ping.pcapng
Le fichier sera immédiatement converti, sous la forme d’une copie (le fichier source n’est pas altéré). Nous avons bien deux fichiers :

Il ne reste plus qu’à transférer le fichier « ping.pcapng » sur une machine équipée de Wireshark afin de l’ouvrir et effectuer l’analyse.

IV. Packet Monitor avec Windows Admin Center
La solution de gestion Windows Admin Center (WAC) intègre Packet Monitor par l'intermédiaire d'une extension nommée « Surveillance des paquets » (dans la version française). Elle est installée par défaut dans WAC.
Quand vous accédez à une connexion, vous pourrez retrouver la section « Surveillance des paquets » à gauche. Vous pouvez alors lancer une nouvelle capture avec des filtres personnalisés (adresse IP, numéro de port, etc.), sans vous connecter directement sur le serveur distant.
Vous pouvez arrêter la capture à tout moment et les paquets correspondants seront visibles dans l’interface de Windows Admin Center. Il est important de noter que deux applications seront installées sur la machine distante : Wireshark et PayloadParser. Un message d’avertissement apparaît la première fois que l’extension PktMon est utilisée via WAC.

Personnellement, je préfère utiliser PktMon en ligne de commande sur un serveur puis exporter le fichier de capture vers une autre machine où l’analyse est effectuée. Cette extension dans WAC est encore en « aperçu » donc elle devrait évoluer et s’améliorer par la suite.
En attendant, vous pouvez utiliser les instructions décrites dans ce chapitre pour utiliser PktMon à partir de la ligne de commande et convertir la capture dans un format lisible par Wireshark.

