15/11/2024

PowerShell

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

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.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

3 commentaires sur “PowerShell : comment tester un port avec la commande Test-NetConnection ?

  • Un développeur a travaillé sur le sujet UDP, non concerné par cet article.
    Il expose différents scripts : Lancer un client UDP, et deux autres pour créer des serveurs d’écoute en UDP et TCP.
    https://cloudbrothers.info/en/test-udp-connection-powershell/

    Concernant l’article, l’idée de récupérer l’état d’un site web comme l’exemple en PowerShell est plutôt bonne, surtout dans l’optique d’une supervision technique.
    Quelqu’un aurait un retour d’expérience quant à l’usage sous Linux des API PowerShell ? On me répondra que Perl et Python peuvent suffire, mais c’est pour l’exemple… 🙂

    Répondre
  • On peut utiliser également :

    -CommonTCPPort
    Specifies the common service TCP port number. The acceptable values for this parameter are:

    SMB
    HTTP
    RDP
    PING

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.