Vérifiez les ports ouverts (d'écoute) avec PowerShell

Dans PowerShell, vous pouvez utiliser leTest-NetConnectionapplet de commande pour vérifier si un port est disponible (ouvert) sur un ordinateur distant. Vous pouvez utiliser cette applet de commande pour vérifier la réponse et la disponibilité d'un serveur distant ou d'un service réseau, tester si le port TCP est bloqué par un pare-feu, vérifier la disponibilité ICMP et le routage. En fait,Test-NetConnectionremplace plusieurs outils d'administration réseau populaires tels queping,tracert,telnet,pathping, scanner de ports TCP, etc.

Contenu:

Vérifiez le port TCP ouvert avec Test-NetConnection

Vous pouvez utiliser la cmdlet Test-NetConnection pour vérifier uniquement les ports TCP. Par exemple, pour vérifier que le port TCP 25 (le protocole SMTP) est ouvert sur le serveur de messagerie distant :

Test-NetConnection -ComputerName ny-msg01 -Port 25

Note. Vous pouvez tester uniquement la connectivité d'un port TCP à l'aide de l'applet de commande Test-NetConnection. Toutefois, vous ne pouvez pas utiliser l'applet de commande pour vérifier la disponibilité des ports UDP distants.

La commande Test-NetConnection a l'aliasCNC. La version abrégée de la même commande ressemble à ceci :

TNC ny-msg01 -Port 25

Regardons le résultat de la commande :

ComputerName           : ny-msg01
RemoteAddress          : 10.20.1.7
RemotePort             : 25
InterfaceAlias         : CORP
SourceAddress          : 10.20.1.79
PingSucceeded          : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded       : True

Comme vous pouvez le voir, la cmdlet résout le nom du serveur en adresse IP, vérifie la réponse ICMP (similaire àping), et vérifie la réponse du port TCP (disponibilité du port). Le serveur spécifié répond via ICMP (PingSucceeded = True) et le port TCP 25 est ouvert (RemotePort=25, TcpTestSucceeded= True).

Note.Si la commande renvoie PingSucceeded=False et TcpTestSucceeded= True, cela signifie très probablement que la requête ICMP Echo (ping) est désactivée sur l'ordinateur distant.

Si vous exécutez leTest-NetConnection sans paramètres, il vérifiera si l'ordinateur est connecté à Internet (vérifie la disponibilité duinternetbeacon.msedge.nethôte).

Vous pouvez ajouter le –Niveau d'information détailléoption pour afficher des informations détaillées lors de la vérification d'un port TCP distant :

TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed

L'applet de commande a un paramètre spécial -CommonTCPPort, qui permet de préciser le nom d'un protocole réseau connu (HTTP, RDP, SMB, WINRM).

Par exemple, pour vérifier la disponibilité d'un serveur web HTTP vous pouvez utiliser la commande :

Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP

Ou vérifiez la disponibilité d'un port RDP par défaut (TCP/3389) :

Test-NetConnection ny-rds1 –CommonTCPPort RDP

Vous pouvez répertorier tous les paramètres renvoyés par la cmdlet Test-NetConnection :

Test-NetConnection ny-man01 -port 445|Format-List *

Si vous avez seulement besoin de voir si le port est disponible, vous pouvez le vérifier plus rapidement :

TNC ny-msg1 -Port 25 -InformationLevel Quiet

L'applet de commande renvoieTrue, ce qui signifie que le port TCP distant est ouvert.

Conseil.Dans les versions antérieures de Windows PowerShell (avant la version 4.0), vous pouviez vérifier la disponibilité d'un port TCP distant avec la commande :

(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)

Vous pouvez utiliser la cmdlet Test-NetConnection pour tracer un itinéraire vers un serveur distant en utilisant le –TraceRouteparamètre (similaire au paramètre intégrétracertcommande sous Windows). Vous pouvez limiter le nombre maximum de sauts lors de la vérification de l'itinéraire en utilisant le-Le houblonparamètre.

Test-NetConnection ny-man01 –TraceRoute

L'applet de commande a renvoyé un délai d'accès au réseau récapitulatif en millisecondes (PingReplyDetails (RTT): 41 ms) ainsi que toutes les adresses IP des routeurs en route vers l'hôte de destination.

PowerShell : vérifier les ports ouverts sur plusieurs hôtes

Vous pouvez utiliser PowerShell pour vérifier la disponibilité d'un port spécifique sur un certain nombre d'ordinateurs distants. Enregistrez la liste des noms d'hôtes ou des adresses IP dans un fichier texte brut avec le nomservers.txt.

Par exemple, votre tâche consiste à rechercher les hôtes sur lesquels le port TCP/25 ne répond pas ou est fermé sur une liste de serveurs :

Get-Content c:PSlist_servers.txt |  where { -NOT (Test-Netconnection $_ -Port 25  -InformationLevel Quiet)}| Format-Table -AutoSize

Vous pouvez utiliser un simple script PowerShell de surveillance qui vérifie la disponibilité des serveurs distants et affiche une notification contextuelle si l'un des serveurs est indisponible.

Par exemple, vous pouvez vérifier la disponibilité des services de base sur tous les contrôleurs de domaine lors d'un contrôle de santé AD (une liste DC peut être obtenue avec la cmdlet Get-ADDomainController). Vérifions les services suivants sur le DC (il existe une règle similaire « Domaine et confiance » dans l'outil PortQry) :

  • RPC-TCP/135
  • LDAP-TCP/389
  • LDAP-TCP/3268
  • DNS-TCP/53
  • Kerberos-TCP/88
  • PME – TCP/445

$Ports = "135","389","636","3268","53","88","445","3269", "80", "443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}

Le script vérifie les ports TCP spécifiés sur les contrôleurs de domaine et si l'un des ports n'est pas disponible, il le met en surbrillance en rouge (vous pouvez exécuter ce script PowerShell en tant que service Windows).

Scanner de port TCP/IP simple dans PowerShell

Vous pouvez utiliser PowerShell pour implémenter un scanner IP simple qui analyse les hôtes distants ou les sous-réseaux IP à la recherche de ports TCP ouverts/fermés.

Pour analyser la plage d'adresses IP entre 192.168.1.100 et 192.168.1.150 et afficher les ordinateurs dont le port 3389 est ouvert :

foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}

Analysez une plage de ports TCP (de 1 à 1 024) sur un hôte distant :

foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}

Comment répertorier les ports ouverts sous Windows avec PowerShell

Utilisez leGet-NetTCPConnectionapplet de commande pour répertorier les ports ouverts sur l'ordinateur local (il s'agit de l'équivalent PowerShell deNETSTAT). Une liste de tous les ports TCP ouverts sur l'ordinateur peut être visualisée comme suit :

Apprendre encore plus:Comment ouvrir et bloquer des ports dans le pare-feu Windows

Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-Table

Vous pouvez également utiliser la cmdlet Get-NetTCPConnection pour répertorier les connexions TCP/IP actives.

Si vous souhaitez savoir quel programme (processus) écoute sur un port spécifique de votre ordinateur, utilisez la commande suivante (où 443 est un numéro de port que vous souhaitez vérifier) :

Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path

Related Posts