PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

PowerShell : comment tester un port avec la commande Test-NetConnection ?

mardi 1 août 2023 à 08:28

I. Présentation

Dans ce tutoriel, nous allons apprendre à tester un port avec la commande Test-NetConnection de PowerShell. Disons que c'est une alternative moderne à la fameuse astuce basée sur l'utilisation de la commande Telnet.

En PowerShell, la commande Test-NetConnection représente une alternative à la commande ping, mais grâce à ses différents paramètres, il est possible d'aller plus loin puisque l'on peut effectuer un test sur un port spécifique (uniquement en TCP). Ainsi, on peut utiliser cette commande pour déterminer si un port est ouvert ou non.

II. Tester un port avec Test-NetConnection

Que ce soit avec Windows PowerShell ou PowerShell, vous pouvez utiliser la commande Test-NetConnection. Dans cet exemple, une machine sous Linux, qui héberge un serveur Web Apache sera testée, à la fois sur le port 80 et sur le port 443. Nous verrons si elle répond à l'un ou l'autre de ces deux ports, ou peut-être même aux deux !

La commande Test-NetConnection s'utilise de cette façon :

Test-NetConnection -ComputerName <Nom ou IP de la cible> -Port <Numéro de port>

Si l'on veut tester le port 443 de la machine 192.168.14.131, on exécutera cette commande :

Test-NetConnection -ComputerName 192.168.14.131 -Port 443

Ici, le port 443 est visiblement fermé sur le serveur distant (pare-feu local qui bloque, service Web qui n'est pas accessible en HTTPS ou sur un port personnalisé, etc...), car on obtient le statut "failed" et surtout la propriété "TcpTestSucceeded" est égale à "false" ce qui indique que le test a échoué.

PowerShell - Test-NetConnection - Port fermé

Faisons le même test sur le port 80 :

Test-NetConnection -ComputerName 192.168.14.131 -Port 80

Cette fois-ci, la propriété "TcpTestSucceeded" est égale à "true",  ce qui indique que le test a réussi. Sur le serveur Web, le port 80 est bien ouvert !

PowerShell - Test-NetConnection - Port ouvert

Puisqu'il s'agit d'une commande PowerShell, on peut l'utiliser dans un script ! Par exemple, on peut tester un port sur une machine distante et effectuer une action uniquement si le test réussi. Avec un serveur Web, on peut tester le port 80 : s'il y a une réponse, c'est que le port est ouvert et que le service est en ligne, donc on peut récupérer le contenu d'une page ou télécharger un fichier.

Ce qui donne un bout de code comme celui-ci :

$ServeurWebIP = "192.168.14.131"
if(Test-NetConnection -ComputerName $ServeurWebIP -Port 80){

   Write-Host "Le serveur Web ($ServeurWebIP) est en ligne !"
   $PageWeb = Invoke-WebRequest -Uri http://$ServeurWebIP/index.html

}else{
   Write-Host "Le serveur Web ($ServeurWebIP) est injoignable !"
}

On peut aussi imaginer créer une boucle pour tester plusieurs hôtes, car le paramètre -ComputerName n'accepte pas plusieurs valeurs.

Enfin, sachez que cette commande prend en charge aussi certains services, ce qui évite de préciser le numéro de port. Pour un test sur le port 80, on peut utiliser le paramètre -CommonTCPPort et la valeur "HTTP" :

Test-NetConnection -ComputerName 192.168.14.131 -CommonTCPPort HTTP

III. Conclusion

À l'exécution, la commande Test-NetConnection est plus lente que la méthode basée sur le client Telnet. Toutefois, elle présente l'avantage d'être intégrée nativement à Windows puisqu'elle est dans PowerShell ! De plus, on peut l'utiliser facilement dans un script, ce qui ouvre d'autres possibilités : on peut l'utiliser pour des tests manuels, mais aussi des tests automatiques.

The post PowerShell : comment tester un port avec la commande Test-NetConnection ? first appeared on IT-Connect.