Capturer le trafic réseau sous Windows
De quoi s’agit-il ?
Cela m’arrive si souvent… quelque chose est étrange ou ne fonctionne pas comme prévu, et la question se pose : “Que se passe-t-il ? Pourquoi le client ou le serveur se comporte-t-il ainsi ?” Souvent, ce sont des problèmes liés au réseau.
Un chercheur en sécurité m’a dit un jour : “Si vous voulez comprendre comment un système fonctionne, vous devez comprendre le trafic réseau. Presque tous les problèmes peuvent être diagnostiqués au niveau du réseau.” D’après mon expérience : il s’avère que c’est vrai. 🥳
Malheureusement, mon expérience est également que beaucoup de gens ne savent pas comment capturer le trafic réseau sous Windows, et la seule solution est “installons Wireshark”.
Eh bien, même si Wireshark est un excellent outil, ce n’est pas la seule solution et probablement pas la meilleure solution pour une capture rapide et unique. Il existe certainement de meilleures et probablement plus rapides solutions, surtout quand il s’agit de vos serveurs hautement sécurisés et bien protégés.

Considérations sur la situation
Encore une fois, Wireshark est un outil puissant et plus ou moins, le standard de facto des analyseurs de protocoles réseau. Vous l’utiliserez pour analyser ce qui a été capturé, c’est sûr. Mais l’inconvénient de Wireshark est :
- Il n’est pas capable de capturer sans installer un composant supplémentaire à côté du produit lui-même : un pilote réseau (WinPcap ou Npcap).
- C’est un outil vivant et complexe avec beaucoup de binaires et un potentiel de vulnérabilités.
- Chaque installation sur un serveur est un vecteur d’attaque potentiel et contribue à la complexité de vos serveurs.
Ce n’est probablement pas un outil que vous souhaitez avoir sur un serveur de production, surtout si vous voulez juste capturer un peu de trafic pour une analyse rapide.
En tout cas, mettez-le sur votre station de travail pour analyser ce qui a été capturé. Vous n’avez même pas besoin d’avoir des droits d’administrateur pour analyser avec Wireshark ! Wireshark fonctionne parfaitement bien en tant qu’installation portable sans aucune installation à l’échelle du système.
Alors, quelles sont les alternatives ?
Il existe plusieurs alternatives pour accomplir la tâche sous Windows. Et le meilleur dans tout ça, c’est que vous n’avez besoin d’installer quoi que ce soit sur la machine. Il existe des outils intégrés dans Windows pour faire le travail… et ils sont assez puissants. Combinés avec un peu de PowerShell et la capacité de PSRemoting, cela s’adapte facilement.
1. netsh trace - L’ancien mais doré
La commande netsh trace est un outil intégré dans Windows qui vous permet de capturer le trafic réseau sans avoir besoin de logiciel supplémentaire. Elle utilise le Windows Event Tracing for Windows (ETW) pour capturer et enregistrer les événements réseau.
Essentiellement, il s’agit de netsh trace start et netsh trace stop pour démarrer et arrêter la capture, mais il y a netsh trace show pour afficher l’état actuel et netsh trace convert pour convertir les données capturées dans un format plus lisible.
Voici un aperçu rapide des commandes disponibles dans netsh trace :
Les commandes suivantes sont disponibles :
Commandes dans ce contexte :
? - Affiche une liste de commandes.
convert - Convertit un fichier de trace en un rapport HTML.
correlate - Normalise ou filtre un fichier de trace vers un nouveau fichier de sortie.
diagnose - Démarre une session de diagnostic.
dump - Affiche un script de configuration.
export - Exporte un scénario vers un profil WPR.
help - Affiche une liste de commandes.
merge - Fusionne des fichiers de trace et ajoute des métadonnées de symboles.
postreset -
show - Liste les interfaces, les fournisseurs et l'état de traçage.
start - Démarre le traçage.
stop - Arrête le traçage.
Pour afficher l'aide pour une commande, tapez la commande, suivie d'un espace, puis
tapez ?.
Maintenant, concentrons-nous sur les commandes start et stop, qui sont celles que vous utiliserez pour capturer le trafic réseau. La dénomination est assez explicite, je suppose. Pour démarrer une capture réseau, vous devez spécifier quelques paramètres supplémentaires. En gros, vous devez simplement spécifier que vous souhaitez capturer le trafic. C’est simplement le paramètre capture=yes.
Même si c’est tout ce dont vous avez besoin comme minimum absolu, il y a un paramètre supplémentaire recommandé pour l’efficacité. Si vous ne vous souciez que de capturer le trafic réseau, vous pouvez désactiver le comportement de génération de rapport de netsh avec report=disabled. Cela accélérera le processus de capture et réduira la taille du fichier capturé, car il n’inclura pas les données de rapport supplémentaires.
Le reste des paramètres peut être utilisé pour personnaliser le processus de capture selon vos besoins. Bien sûr, vous pouvez spécifier où enregistrer la trace et ce que vous souhaitez capturer, mais ce n’est pas obligatoire.
Comme la capture du trafic réseau est une opération à l’échelle du système et affecte tous les processus (et tous les utilisateurs) sur le système, vous devez exécuter la commande netsh trace avec des privilèges administratifs.
Voici la commande de base pour commencer à capturer le trafic réseau à l’aide de netsh trace :
# Capturer le trafic réseau sur l'interface "Ethernet" et l'enregistrer dans un fichier
netsh trace start capture=yes report=disabled
dès que vous avez ce dont vous avez besoin, vous pouvez arrêter la capture avec la commande suivante :
# Arrêter la capture du trafic réseau
netsh trace stop

Le trafic capturé est enregistré dans un fichier .etl, qui peut être analysé plus tard. Si vous souhaitez avoir un nom de fichier et un emplacement personnalisés pour les données capturées, vous pouvez le spécifier avec le paramètre tracefile.
# Capturer le trafic réseau et l'enregistrer dans un fichier spécifique
netsh trace start capture=yes report=disabled tracefile=C:\Administration\Logs\MyTraceFile.etl
Maintenant que nous avons capturé le trafic, nous devons l'analyser...
Ouvrir le fichier etl dans Wireshark nécessite - malheureusement - une étape supplémentaire. Mais, restez avec moi, ce n’est pas si difficile et cela ne nécessite toujours pas d’installation :
Utilisez simplement etl2pcapng, un très petit outil fourni par Microsoft, et vous êtes prêt à partir. Il convertit le fichier etl en un fichier pcapng, qui peut être facilement ouvert dans Wireshark pour analyse.
# Convertir le fichier .etl en format .pcapng
etl2pcapng nettrace.etl nettrace.pcapng
Bien sûr, le nom de fichier dans la commande peut être un chemin entièrement qualifié, y compris la lettre de lecteur et les répertoires. C’est juste un exemple rapide.

Le fichier etl créé peut être supprimé après la conversion, si vous n’en avez plus besoin. Le fichier pcapng est celui que vous utiliserez pour l’analyse dans Wireshark.
En plus de ne pas avoir à installer quoi que ce soit sur le système en utilisant cette méthode, vous avez également l’avantage d’avoir une capture plus détaillée, car netsh trace capture plus que le simple trafic réseau. Il capture également des informations supplémentaires sur le système et les processus, ce qui peut être très utile pour le dépannage et l’analyse :

Ce processus fonctionne très bien sur tous les systèmes Windows depuis Windows 7 et Windows Server 2008 R2. Étant donné cela, c’est plutôt bon pour une solution intégrée pour obtenir ce que vous voulez.
Encore une fois, tout cela fonctionne sans installer quoi que ce soit sur le système, ce qui est un énorme avantage, surtout sur les serveurs de production. Vous pouvez simplement exécuter les commandes, capturer le trafic et l’analyser sur votre station de travail avec Wireshark sans aucune installation sur le serveur lui-même.
Il existe beaucoup plus de paramètres et d’options disponibles pour netsh trace, qui vous permettent de personnaliser le processus de capture selon vos besoins. Par exemple, vous pouvez spécifier
- des filtres de protocole
- des filtres de types Ethernet
- des filtres d’adresses IP
- des interfaces spécifiques à capturer
- et bien plus encore
Vous pouvez consulter toutes les options disponibles en exécutant netsh trace show CaptureFilterHelp. Cela vous donnera une liste détaillée de tous les filtres et options disponibles que vous pouvez utiliser pour personnaliser votre capture.
Mes préférés personnels sont :
# Pour capturer uniquement le trafic IPv4 :
Ethernet.Type=IPv4
# Pour capturer uniquement TCP/UDP/ ou les deux :
Protocol=TCP
Protocol=UDP
Protocol=(TCP,UDP)
# Réduire la capture à des adresses IP spécifiques :
IPv4.SourceAddress=<adresse IPv4>
IPv4.DestinationAddress=<adresse IPv4>
IPv4.Address=(<Adresse IPv4>,<Adresse IPv4>)
Avec ces options, vous devriez être équipé pour capturer efficacement le trafic le plus pertinent pour votre analyse et votre dépannage. Vous pouvez combiner les filtres pour capturer uniquement le trafic qui est pertinent pour votre cas d’utilisation spécifique, ce qui peut vous aider à vous concentrer sur les données importantes et à réduire le bruit dans votre capture.
Vous pouvez trouver quelques exemples dans la section exemples pratiques ci-dessous.
2. pktmon - Le nouveau venu
Pktmon est un outil intégré plus récent dans Windows 10 / Windows Server 2019 et versions ultérieures qui fournit des capacités de surveillance des paquets plus pratiques.
C’est aussi un outil en ligne de commande qui vous permet de capturer du trafic, mais il est plus axé sur la surveillance des paquets que netsh trace et offre une interface un peu plus conviviale pour gérer les filtres de paquets et capturer le trafic. La syntaxe est un peu différente, mais à peu près la même. Si vous êtes familier avec netsh trace, vous devriez vous sentir à l’aise pour l’utiliser. Voici un aperçu rapide des commandes disponibles dans pktmon :
pktmon <commande> [OPTIONS | aide]
Capture avancée de paquets et collecte d'événements.
Commandes
filter Gérer les filtres de paquets.
list Lister les composants de traitement des paquets.
start Démarrer
```capture de paquets, compteurs et collecte d'événements.
stop Arrêter la collecte de données.
status Interroger l'état actuel.
unload Décharger le pilote PktMon.
counters Afficher les compteurs de paquets actuels.
reset Réinitialiser les compteurs de paquets à zéro.
etl2txt Convertir le fichier journal au format texte.
etl2pcap Convertir le fichier journal au format pcapng.
hex2pkt Décoder le paquet au format hexadécimal.
help Afficher le texte d'aide pour une commande spécifique.
Exemple : pktmon start help
Parce qu’il utilise également le Windows Event Tracing for Windows (ETW) pour capturer les événements réseau, il produit également des fichiers etl. Voici un exemple rapide de comment l’utiliser :
# Commencer à capturer des paquets et enregistrer la sortie dans un fichier
pktmon start --capture pktmon.etl
# Arrêter la capture
pktmon stop
Comme vous pouvez le voir, même si la syntaxe est un peu différente de netsh trace, elle s’en rapproche. Vous pouvez ignorer le paramètre de rapport, qui est nécessaire dans son ancien homologue. Cela rend l’appel un peu plus court.

Voici un réel avantage de pktmon : Contrairement à l’ancien netsh trace, les données capturées peuvent être directement converties en fichier .pcapng grâce à la capacité intégrée de pktmon. Cela signifie que, dans un système d’exploitation actuel, vous n’avez même pas besoin d’utiliser l’outil supplémentaire etl2pcapng pour la conversion.
Vous pouvez directement convertir les données capturées en un fichier .pcapng pour analyse avec Wireshark :
# Convertir le fichier .etl en format .pcapng
pktmon etl2pcap pktmon.etl
Le fichier etl créé peut être supprimé après la conversion, si vous n’en avez plus besoin. Le fichier pcapng est celui que vous utiliserez pour l’analyse dans Wireshark. Comme le fichier pcapng contient uniquement les données de trafic, et pas tant d’informations supplémentaires sur le système et les processus, il est plus léger que le fichier etl. Mais en cas de capture prolongée ou de trafic élevé, il peut encore être assez volumineux.

Comme indiqué pour netsh trace, pktmon offre également de nombreuses options de filtrage. Encore une fois, vous pouvez spécifier des filtres de protocole, des adresses IP, et bien plus encore pour réduire votre capture.
Vous pouvez consulter toutes les options disponibles en exécutant pktmon filter add help. Cela vous donnera une liste détaillée de tous les filtres et options disponibles que vous pouvez utiliser pour personnaliser votre capture. La principale différence est que vous devez ajouter les filtres avant de commencer la capture, ce qui est une réelle différence par rapport à netsh trace, où vous pouvez spécifier les filtres directement dans la commande de démarrage. Mais cela ne devrait pas poser de problème lorsque vous le faites via des scripts. À mon avis, cela facilite la lisibilité de la commande, car vous n’avez pas beaucoup de paramètres dans la commande de démarrage, mais c’est plus séparé et structuré.
Voici quelques exemples de filtres que vous pouvez utiliser avec pktmon :
# Pour capturer uniquement le trafic IPv4 :
pktmon filter add -p IPv4
# Pour capturer uniquement TCP/UDP/ ou les deux :
pktmon filter add -p TCP
pktmon filter add -p UDP
# Réduire la capture à des adresses IP spécifiques :
pktmon filter add -a IPv4.SourceAddress <adresse IPv4>
pktmon filter add -a IPv4.DestinationAddress <adresse IPv4>
pktmon filter add -a IPv4.Address <adresse IPv4>
Le fait que vous puissiez exécuter les commandes d’ajout de filtre plusieurs fois pour ajouter plusieurs filtres peut être très utile, car cela vous permet de construire votre configuration de filtre étape par étape et de la garder plus organisée. Vous pouvez également lister les filtres actuellement configurés avec pktmon filter list pour voir quels filtres sont actuellement actifs avant de commencer la capture.
3. Get-NetEventSession - La méthode native PowerShell
Si vous êtes un passionné de PowerShell, voici une autre façon de capturer le trafic réseau en utilisant la cmdlet Get-NetEventSession, qui fait partie du module NetEventPacketCapture. Cette cmdlet vous permet de créer et de gérer des sessions d’événements réseau, qui peuvent être utilisées pour capturer le trafic réseau. Même si cela nécessite un peu plus de texte, PowerShell offre des capacités assez intéressantes :
- Complétion automatique intégrée pour les paramètres
- Télécommande PowerShell via les paramètres -CimSession intégrés dans les cmdlets
# Créer une nouvelle session d'événements réseau
$session = New-NetEventSession -Name "MySession" -LocalFilePath "C:\path\to\capture.etl"
# Ajouter un fournisseur pour capturer le trafic réseau (par exemple, Microsoft-Windows-Kernel-Network)
Add-NetEventProvider -SessionName $session.Name -Name "Microsoft-Windows-Kernel-Network"
# Vérifier la session créée
$session
# Démarrer la session pour commencer à capturer le trafic
$session | Start-NetEventSession
# Arrêter la session pour mettre fin à la capture
$session | Stop-NetEventSession
De la même manière que les outils en ligne de commande, le trafic capturé est enregistré dans un fichier .etl, qui peut être analysé après conversion au format .pcapng en utilisant etl2pcapng ou pktmon. Je ne vais pas le redétailler, car c’est le même processus que décrit ci-dessus.

Je dois honnêtement admettre que ce n’est pas ma façon préférée de capturer le trafic réseau, car il est un peu complexe de gérer les différentes commandes et les concepts sous-jacents des sessions d’événements réseau et des fournisseurs. Mais si vous souhaitez rester entièrement dans un monde PowerShell, c’est tout de même une méthode intégrée et puissante pour capturer le trafic.
Dans la section d’exemple pratique ci-dessous, vous trouverez un exemple où j’ai utilisé les capacités de télécommande PowerShell pour capturer le trafic réseau sur un système distant combiné avec les outils en ligne de commande ci-dessus. C’est une combinaison assez puissante et, à mon avis personnel, il n’y a rien de mal à utiliser des outils en ligne de commande en combinaison avec PowerShell. Comme c’est souvent le cas… utilisez ce qui convient le mieux pour vous et votre cas d’utilisation. Il n’y a pas de solution universelle.
Bien sûr, ❤️ PowerShell ❤️ est assez proche d’une solution universelle. 😁
4. La méthode GUI : Performance Monitor
Si vous préférez une interface graphique classique basée sur MMC dans Windows, vous pouvez également utiliser le Moniteur de performance (PerfMon) intégré. PerfMon vous permet de créer des ensembles de collecteurs de données qui peuvent capturer diverses métriques de performance, y compris le trafic réseau.

Effectivement, tous les outils mentionnés ci-dessus sont basés sur la même technologie sous-jacente, le Windows Event Tracing for Windows (ETW), et ils offrent simplement différentes interfaces et capacités pour capturer des événements. Le Moniteur de performance est juste l’interface basée sur GUI pour ETW.
Pour capturer le trafic réseau à l’aide du Moniteur de performance, vous pouvez suivre ces étapes :
- Ouvrez le Moniteur de performance en tapant
perfmondans le menu Démarrer et en appuyant sur Entrée. - Dans le panneau de gauche, développez “Ensembles de collecteurs de données” et faites un clic droit sur “Défini par l’utilisateur”. Sélectionnez “Nouveau” > “Ensemble de collecteurs de données”.
- Donnez un nom à votre ensemble de collecteurs de données (par exemple, “CaptureTraficRéseau”) et sélectionnez “Créer manuellement (Avancé)”. Cliquez sur “Suivant”.
- Dans l’étape “Créer des collecteurs de données”, sélectionnez “Compteur de performance” et cliquez sur “Suivant”.
- Cliquez sur “Ajouter” pour ajouter des compteurs de performance. Dans la boîte de dialogue “Ajouter des compteurs”, développez “Interface réseau” et sélectionnez les compteurs que vous souhaitez capturer (par exemple, “Octets Total/sec”, “Paquets/sec”). Cliquez sur “Ajouter” puis sur “OK”.
- Cliquez sur “Suivant” et spécifiez l’emplacement où vous souhaitez enregistrer les données capturées. Cliquez sur “Suivant” puis sur “Terminer” pour créer l’ensemble de collecteurs de données.
- Pour commencer à capturer le trafic réseau, faites un clic droit sur votre nouvel ensemble de collecteurs de données créé (par exemple, “CaptureTraficRéseau”) et sélectionnez “Démarrer”. Les compteurs de performance commenceront à capturer des données.
- Pour arrêter la capture, faites à nouveau un clic droit sur l’ensemble de collecteurs de données et sélectionnez “Arrêter”. Les données capturées seront enregistrées à l’emplacement spécifié.

C’est une méthode particulièrement utile si vous souhaitez capturer des métriques de performance liées au trafic réseau via différents horaires et sur une période prolongée. Ce n’est pas la meilleure méthode pour une capture et une analyse rapides, mais elle peut être très utile pour surveiller et analyser les performances réseau au fil du temps.
En plus de la planification, de tels ensembles de collecteurs de données définis peuvent facilement être exportés et importés sur d’autres systèmes, ce qui peut être très utile pour standardiser le processus de capture sur plusieurs serveurs ou stations de travail. Cela est particulièrement utile si vous combinez diverses métriques avec la capture de trafic réseau, comme l’utilisation du CPU, l’utilisation de la mémoire, les E/S de disque, etc., pour obtenir une vue plus complète des performances et du comportement du système par rapport au trafic réseau.
Je ne vais pas entrer dans plus de détails à ce sujet, car l’intention principale de cet article de blog est de montrer comment capturer rapidement et dans la console.
Exemple Pratique
Capturer uniquement le trafic HTTP ou HTTPS
C’est peut-être un cas d’utilisation courant.
Malheureusement, autant que je sache, il n’y a pas de capacité intégrée dans netsh trace start pour capturer des ports spécifiques. 😣 Les filtres ne vous permettent pas d’être aussi précis. Mais avec pktmon, vous pouvez facilement le faire. Eh bien, il convient de mentionner que cela n’est possible que dans Windows Server 2019 et les versions Windows 10+ ultérieures à 1809.
Vous pouvez utiliser la commande suivante pour capturer uniquement le trafic HTTP et HTTPS :
pktmon filter add "http + https" -d IPv4 -t TCP -p 80 443
pktmon start --capture --file-name https_traffic.etl
pktmon stop
pktmon filter remove
Capturer uniquement le trafic DNS
Si vous êtes uniquement intéressé par la capture du trafic DNS, vous pouvez utiliser la commande suivante pour capturer uniquement le trafic DNS :
pktmon filter add "UDP DNS" -d IPv4 -t UDP -p 53
pktmon filter add "TCP DNS" -d IPv4 -t TCP -p 53
pktmon start --capture --file-name dns_traffic.etl
pktmon stop
pktmon filter remove
Capturer uniquement le trafic SMTP
Si vous souhaitez capturer uniquement le trafic SMTP, vous pouvez utiliser la commande suivante pour capturer uniquement le trafic SMTP :
pktmon filter add "SMTP" -d IPv4 -t TCP -p 25
pktmon start --capture --file-name smtp_traffic.etl
pktmon stop
pktmon filter remove
Ceci est juste un autre exemple rapide de la façon dont vous pouvez utiliser les capacités de filtrage de `pktmon` pour capturer uniquement des types de trafic spécifiques.
Capturer via netsh trace avec une IP spécifique
Si vous êtes contraint d’utiliser netsh trace, en raison de systèmes d’exploitation plus anciens ou si vous préférez l’utiliser, je vous recommande de spécifier un filtre IP pour l’IP de votre système. De cette façon, vous coupez le trafic de diffusion et d’autres trafics qui ne sont probablement pas liés à votre système.
Tout d’abord, préparez votre filtre IP et le chemin du fichier pour la capture :
$localIpList = (Get-NetIPAddress -AddressState Preferred -PrefixOrigin Dhcp, Manual -AddressFamily IPv4).ipaddress
$ipFilter = "($($localIpList -join ","))"
$filePath = "traffic.etl"
Ensuite, démarrez la capture avec le filtre IP :
netsh trace start capture=yes report=disabled overwrite=yes fileMode=circular Protocol="(UDP,TCP)" tracefile="$($filePath)" IPv4.Address=$ipFilter
Vérifiez l’état de la capture :
netsh trace show status
Faites ce que vous avez à faire, et lorsque vous avez terminé, arrêtez la capture :
netsh trace stop
Avec cette approche, vous pouvez facilement capturer uniquement le trafic qui est pertinent pour votre système, ce qui peut vous aider à vous concentrer sur les données importantes et à réduire le bruit dans votre capture. Cela est particulièrement utile dans des environnements avec beaucoup de trafic réseau, où capturer tout entraînerait un fichier de capture très volumineux et ingérable.
Capturer le trafic via PowerShell remoting
Je voudrais souligner un autre cas d’utilisation pratique que j’ai utilisé dans la vie réelle plusieurs fois. Lorsqu’il s’agit de grands environnements avec plusieurs serveurs, il n’est pas vraiment efficace de se connecter à chaque serveur et d’exécuter les commandes de capture une par une.
C’est exactement là que PowerShell remoting brille. 🎉
Vous pouvez combiner les capacités de PowerShell remoting avec les outils en ligne de commande ci-dessus pour capturer facilement le trafic sur un nombre arbitraire de systèmes. Je considérerais cela comme une combinaison assez puissante !
Voici un exemple rapide de la façon de procéder :
(Pour l’évidence, vous pouvez personnaliser les blocs de script pour inclure des filtres ou des paramètres supplémentaires selon les besoins pour votre cas d’utilisation spécifique)
# Définir la liste des serveurs distants sur lesquels vous souhaitez capturer le trafic
$remoteServers = @("Server1", "Server2", "Server3")
# Définir le chemin de base et le nom de fichier sur les serveurs distants
$remoteBasePath = "C:\Administration\Logs"
$remoteCaptureFileName = "traffic_http"
# Créer une session vers les serveurs distants
$sessions = New-PSSession -ComputerName $remoteServers
# Définir le bloc de script pour commencer à capturer le trafic réseau en utilisant pktmon
$scriptStart = {
$filePath = "$($using:remoteBasePath)\$($using:remoteCaptureFileName)_$($env:COMPUTERNAME)_$(Get-Date -Format 'yyyy-MM-dd-HH-mm-ss').etl"
PktMon.exe filter add "HTTP" -d IPv4 -t TCP -p 80
PktMon.exe start --capture --file-name "$($filePath)"
}
# Exécuter le bloc de script sur chaque serveur distant en utilisant PowerShell remoting
Invoke-Command -Session $sessions -ScriptBlock $scriptStart
Maintenant, faites ce que vous devez faire pour obtenir ce que vous voulez…
Vous pouvez vérifier l’état de la capture sur chaque serveur distant avec la commande suivante :
Invoke-Command -Session $sessions -ScriptBlock { PktMon.exe status }
Lorsque vous êtes prêt, vous pouvez arrêter la capture et convertir les données capturées au format .pcapng sur chaque serveur distant avec la commande suivante :
$scriptStop = {
# Arrêter la capture
PktMon.exe stop | Out-Null
# Supprimer les filtres (pour être propre pour la prochaine capture)
PktMon.exe filter remove | Out-Null
# Convertir le fichier .etl en format .pcapng
PktMon.exe etl2pcap $filePath
# Purger le fichier .etl original après conversion
Remove-Item -Path $filePath -Force
}
Invoke-Command -Session $sessions -ScriptBlock $scriptStop
Maintenant, vous avez capturé le trafic sur chaque serveur distant, mais de la même manière, vous avez un fichier de capture sur chaque serveur. Heureusement, PowerShell vous aide également dans cette situation. Vous pouvez utiliser les mêmes capacités de remoting pour copier les fichiers capturés sur votre station de travail locale pour analyse avec Wireshark. Vous pouvez utiliser la cmdlet Copy-Item avec le paramètre -ToSession pour copier les fichiers des serveurs distants vers votre machine locale.
# Définir le chemin local où vous souhaitez enregistrer les fichiers capturés
$localPath = Join-Path -Path $home -ChildPath "LocalData"
# Copier les fichiers capturés de chaque serveur distant vers la machine locale
foreach ($session in $sessions) {
$remoteFilePath = "$($remoteBasePath)\$($remoteCaptureFileName)_*.pcapng"
Copy-Item -Path $remoteFilePath -Destination $localPath -FromSession $session
}
# Purger les fichiers pcapng des serveurs distants après la copie
Invoke-Command -Session $sessions -ScriptBlock {
Remove-Item -Path ($filePath -replace ".etl", ".pcapng") -Force
}
Lorsque vous avez terminé, supprimez les sessions vers les serveurs :
# Supprimer les sessions vers les serveurs distants
Remove-PSSession -Session $sessions
Comme cet exemple le montre, vous pouvez facilement capturer le trafic réseau sur plusieurs systèmes, en **combinant `PowerShell` et `pktmon`**. Cette approche vous permet de gérer et d'analyser efficacement le trafic réseau dans votre environnement sans avoir besoin d'intervention manuelle ou d'installer quoi que ce soit sur les serveurs distants. Cet exemple suppose que vous avez des systèmes avec - plus ou moins - des versions actuelles de Windows. Dans le cas où `pktmon` n'est pas disponible sur vos systèmes, remplacez simplement les commandes `pktmon` par les commandes `netsh trace` correspondantes.
Consultez les exemples netsh ci-dessus pour obtenir des idées sur la façon de les utiliser. La structure générale des blocs de script restera la même.
Conclusion
Capturer le trafic réseau sous Windows peut FACILEMENT être fait en utilisant divers outils intégrés, chacun ayant ses propres avantages et cas d’utilisation. Que vous préfériez des outils en ligne de commande comme netsh trace et pktmon, ou une interface graphique comme Performance Monitor, il existe des options disponibles pour répondre à différents besoins et préférences.
Pour des captures et analyses rapides, pktmon est un excellent choix en raison de sa facilité d’utilisation et de ses capacités de conversion directe. (Si vous êtes sur Windows Server 2019 ou Windows 10+ version ultérieure à 1809) Sur les systèmes plus anciens, netsh trace peut être un outil puissant qui - fait le travail - également.
Et pour ceux qui préfèrent une interface graphique, Performance Monitor offre un moyen complet de capturer et d’analyser les métriques de performance réseau. En fin de compte, le meilleur outil pour capturer le trafic réseau sous Windows dépend de vos exigences spécifiques et du niveau de détail dont vous avez besoin pour votre analyse.
