Ecoute réseau avec Pktmon

Il y a longtemps que je souhaitais créer une page sur la capture de paquet sous windows de manière native sans wireshark.

Toutes les commandes doivent être lancées dans une invite en mode administrateur

Ces outils ne permettent pas de sniffer le traffic local de l’ordinateur (localhost / 127.0.0.1)

netsh

netsh peux servir à écouter le traffic.

Démarrer la capture:

netsh trace start persistent=yes capture=yes tracefile=c:\trace\firsttrace.etl

Arreter la capture:

netsh trace stop

Pour ensuite voir les trames avec wireshark (avec la version portable ou sans avoir besoin d’installer les outils pour écouter toutes les cartes réseaux), il faut convertir la trame etl en pcap avec l’outil etl2pcap de microsoft disponible ici.

Liens utiles sur netsh

PktMon

L’outil pktmon est présent dans Windows 10 depuis la version 1809, cet outil remplace le netsh trace et apporte l’ajout de filtre et simplifier la gestion des captures. Par défaut, pktmon ne capture pas les données des paquets, il ne capture que les entêtes.

  • L’équivalent de la commande netsh trace:
pktmon start -c
  • Sauvegarder vers un fichier spécifique (par défaut c:/Windows/System32):
pktmon start -c --file-name <nom du fichier>.etl
  • Arreter la capture:
pktmon stop
  • Afficher la liste des cartes réseaux:
pktmon list -a

Avec l’argument –json il est possible de récupérer un format exploitable en json, idéal pour les scripts ou autres programmes

  • Capturer sur une interface spécifique:
pktmon start --comp <id interface>

Plusieurs interfaces peuvent être précisées en les séparant avec des espaces

Les filtres

Il est possible d’ajouter des filtres à la capture pour diminuer le nombre d’éléments enregistrés.

  • Lister les filtres actifs:
pktmon filter list
  • Retirer tous les filtres:
pktmon filter remove
  • Ajouter un/des filtre(s):
pktmon filter add [nom du filtre] <arg filtre>

Le nom du filtre est optionnel

Les filtres sont cumultables, un filter peux filtrer un réseau associé à un/des port(s) ainsi qu’à un protocole.

  • Filtre par ip ou réseau:
pktmon filter add -i <ip>[/subnet]
  • Filtre par port:
pktmon filter add -p <num port>
  • Filtre pour un protocole de transport:
pktmon filter add -t TCP
  • Filtrer les paquets d’un VLAN:
pktmon filter add -v 

L’aide pour les filtres peux être consulté avec la commande:

pktmoon filter add help

Commandes à connaitre

  • Convertir un fichier etl en pcap:
pktmon etl2pcap <fichier>.etl [-o <nom du fichier en sortie>.pcap]