Menu Fermer

PowerShell : lister les connexions TCP/IP

De nombreux administrateurs utilisent habituellement l’outil console netstat ou l’outil graphique TCPView pour afficher des informations sur les connexions TCP/IP actives et les ports TCP ouverts dans Windows
Au lieu de netstat, vous pouvez utiliser le cmdlet Get-NetTCPConnection dans PowerShell pour obtenir des informations sur les connexions réseau actives dans Windows, les ports TCP ouverts et les processus en cours d’exécution qui utilisent le protocole TCP/IP.
Bien sûr, PowerShell permet d’écrire facilement des scripts complexes pour obtenir des informations et surveiller les ports TCP ouverts, les processus et les connexions réseau établies.

Voici comment lister les connexions TCP/IP actives sous Windows en PowerShell.

PowerShell : lister les connexions TCP/IP

Comment lister les connexions TCP/IP actives sous Windows en PowerShell

Obtenir les informations des processus

Essayez d’exécuter la commande Get-NetTCPConnection sans aucune option pour afficher la liste des connexions avec PowerShell :

Comment lister les connexions TCP/IP actives sous Windows en PowerShell

Trier la liste des connexions sur les adresses distantes, ports locaux ou distants

Vous pouvez utiliser le cmdlet Sort-Object pour trier les colonnes.
Par exemple pour trier la liste sur la colonne des adresses distantes :

Get-NetTCPConnection | Sort-Object RemoteAddress  -Descending

Voici un autre exemple pour trier sur la colonne des ports locaux :

Get-NetTCPConnection | Sort-Object LocalPort
Comment lister les connexions TCP/IP actives sous Windows en PowerShell

Afficher uniquement les connexions établies

Je pense que le paramètre le plus important est l’état. Pour n’afficher que les connexions établies dans une vue conviviale (tableau de format), exécutez la commande suivante

Get-NetTCPConnection -State Established | Format-Table -AutoSize
Comment lister les connexions TCP/IP actives sous Windows en PowerShell

Afficher que les connexions qui s’appliquent à internet

Cette commande permet d’obtenir toutes les connexions TCP qui utilisent un paramètre TCP appliqué de Internet.

Get-NetTCPConnection -AppliedSetting Internet

Lister seulement les connexions IPv4 ou IPv6

Vous pouvez jouer sur l’option LocalAdress pour filtrer les connexions sur une adresse IP locale.
De ce fait, on peut afficher seulement les connexions IPv4 en spécifiant celle-ci :

Get-NetTCPConnection -LocalAddress 10.0.0.15 | Sort-Object LocalPort

De même, il est possible de n’afficher que les connexions IPv6 de cette manière :

Get-NetTCPConnection -LocalAddress 2a02:8388:b01:3700:215:5dff:fe6f:a01
Comment lister les connexions TCP/IP actives sous Windows en PowerShell

Afficher les noms de processus et PPID

Par obtenir le nom d’un processus parent PID, vous pouvez afficher la liste des services Windows associés qui utilisent le réseau :

Get-WmiObject Win32_Service | Where-Object -Property ProcessId -In (Get-NetTCPConnection).OwningProcess | Where-Object -Property State -eq Running | Format-Table ProcessId, Name, Caption, StartMode, State, Status, PathName
Comment lister les connexions TCP/IP actives sous Windows en PowerShell

Lister les connexions sur un PC distant en PowerShell

Vous pouvez obtenir une liste des ports et des connexions TCP ouverts sur des ordinateurs distants à l’aide des cmdlets remoting” PowerShell (Enter-PSSession et Invoke-Command).
Pour lister les connexions d’un PC distant, utilisez l’option -Computername et spécifier le nom de l’ordinateur :

Invoke-Command -ComputerName <NomPC> {Get-NetTCPConnection -State Established}

Pour récupérer toutes les connexions établies sur tous les serveurs de votre domaine (tous les OUs !) et les sauvegarder dans un fichier, lancez

(Get-ADComputer -Filter 'operatingsystem -like "*server*"').Name | Foreach-Object {Invoke-Command -ComputerName $_ {Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue} | Sort-Object PSComputerName | Select-Object PSComputername, LocalPort, RemotePort, RemoteAddress} | Out-File C:\Temp\TCPConn.txt

La cmdlet Get-NetTCPConnection (ainsi que Test-NetConnection) peut être très utile pour suivre et diagnostiquer les connexions réseau dans Windows.

Comment lister les ports en écoute avec PowerShell

Comme netstat, la commande affiche la liste de toutes les connexions actives avec les adresses IP locales et distantes, les ports, l’état de la connexion (Listen, Established, TimeWait, CloseWait, SynReceived, SynSent) et l’ID du processus (PID) qui utilise cette connexion TCP.

Vous pouvez afficher une liste des ports ouverts (en écoute) sur votre ordinateur local :

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State | Sort-Object LocalPort |ft
Comment lister les ports ouverts sur Windows (PowerShell)

Vous pouvez afficher les noms DNS des hôtes distants et les noms de processus pour les connexions TCP :

Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}},OffloadState,CreationTime |ft