Prendre une capture réseau en Powershell

1. Introduction

Wireshark est l’outil open source le plus connu pour prendre des traces réseaux. Le problème de ce logiciel et qu’il n’est pas simple de l’installer sur des serveurs dans des contextes de production.

Avec Windows 2016 et plus il est possible de prendre des traces réseaux sans rien installer. Le fichier obtenu sera un fichier ETL. Il sera ensuite possible de la convertir en fichier PCAP avec une script Powershell pour ensuite l’ouvrir et l’analyser avec Wireshark.

2. Prendre la capture en Powershell

La prise de capture réseau en Powershell est relativement simple mais il ne faut pas oublier de préciser une taille de paquet supérieur au MTU réseau. Sans préciser cette valeur, de nombreux paquets seront tronqués et illisibles.

En Powershell avec un compte admin créez un objet NetEventSession. Précisez le nom du fichier ETL qui sera généré et la taille maximale en ko du fichier.

New-NetEventSession -Name DebugSession -LocalFilePath “M:\temp\networktrace.etl” -MaxFileSize 4096

Ajoutez un objet NetEventPacketCaptureProvider à l’objet créé précédement et précisez une taille de 2500 (supérieur au MTU utilisé sans Jumbo Frame).

Add-NetEventPacketCaptureProvider -SessionName DebugSession -TruncationLength 2500

Vous pouvez préciser de filtrer la capture par rapport à une adresse IP

Set-NetEventPacketCaptureProvider -SessionName DebugSession -IpAddresses 192.168.1.34

Vous pouvez ensuite démarrer la trace avec la commande “Start”.

Start-NetEventSession -Name DebugSession

Le fichier ETL va grossir. Une fois le trafic généré vous pouvez stopper la capture avec un “Stop” puis un “Remove”.

Stop-NetEventSession -Name DebugSession

Remove-NetEventSession -Name DebugSession

3. Convertir le fichier ETL en PCAP en powershell

Le fichier obtenu doit être converti en fichier PCAP pour être lisible avec Wireshark.

Différents projets sur GibHub permettent de faire cela. Par exemple : https://github.com/chentiangemalc/PowerShellScripts/blob/master/ConvertEtl-ToPcap.ps1

Ce type de script utilise du code C# dans un fichier Powershell. Il faut cependant le modifier pour limiter le code C# aux évènements avec ID numéro 1001. Un exemple de script corrigé est disponible sur notre site : https://admin365.fr/download/ConvertEtlToPcap.zip

Vous pouvez alors convertir le fichier ETL en fichier PCAP simplement.

.\ConvertEtlToPcap.ps1 -Path “M:\Temp\networktrace.etl” -Destination “M:\Temp\\networktrace.pcap”

Le fichier PCAP peut alors être ouvert simplement avec Wireshark.