Powershell - Comment tester les ports TCP ?
Et si on se passait de telnet ?
Il est courant de vouloir savoir si un port spécifique est ouvert ou fermé sur
un équipement réseau, pour ouvrir les ports depuis son firewall. Et souvent,
je peux encore voir par-ci et par-là qu'il utilise encore Telnet. Et si on
s'en passait ?
Via un site internet
Ici, nous sommes dans le cas où nous voudrions savoir si les ports de notre
serveur en DMZ*. Et quoi de mieux qu'un site externe
qui va tester pour nous notre serveur à distance.
https://www.yougetsignal.com/tools/open-ports/ est l'un des nombreux sites qui propose ce service
Via une simple recherche sur un moteur de recherche on peut trouver d'autre
site qui vous proposera la même chose par exemple sur
Duckduckgo via la recherche Open Port Check Tool
Tester la connection via un port avec PowerShell
Il y a deux solutions ici, la première est d'utiliser la fonction "Test-NetConnection" du module NetTCPIP qui est disponible depuis Windows 8. Cette fonction
remplace les commandes dos telnet, tracert et ping.
Utiliser la commande PowerShell qui suit pour vérifier que si le port TCP du
périphérique réseau est ouvert :
Test-NetConnection -ComputerName duckduckgo.com -Port 443
Le nom ou l'ip du périphérique en bleu et le numéro du port est en vert .
Si vous n'avez pas la fonction Test-NetConnection sur votre ordinateur, il suffira d'utiliser la commande powershell suivante, elle va passer une fonction Dotnet.
New-Object System.Net.Sockets.TcpClient("duckduckgo.com", 443)
Le nom ou l'ip du périphérique en bleu et le numéro du port est en vert .
Et si on faisait une petite fonction pour tester, la présence d'un serveur et
si c'est le cas, de voir si le port voulu est ouvert ?
function Test-Port { param ( [Parameter(Mandatory = $true, HelpMessage = "Indiquer le nom de l'ordinateur qui sera testé.")] $hostname, [Parameter(Mandatory = $true, HelpMessage = "Indiquer le port qui sera testé.")] $port ) # This works no matter in which form we get $host - hostname or ip address try { try { $hostname = [System.Net.Dns]::gethostentry($hostname).Hostname } Catch { Write-Warning "l'ordinateur $hostname n'a pas été résolu par le serveur DNS" } $Task = (New-Object System.Net.NetworkInformation.Ping).SendPingAsync($hostname) $ip = $Task.Result.Address.IPAddressToString } catch { Write-Warning "Il est possible que l'adresse $hostname est fausse" return } $t = New-Object Net.Sockets.TcpClient # We use Try\Catch to remove exception info from console if we can't connect try { $t.Connect($ip,$port) } catch {} if($t.Connected) { $t.Close() $msg = "Port $port sur l'adresse $ip est opérationnel" } else { $msg = "Port $port sur l'adresse $ip est bloqué, " $msg += "Il faudra contacter l'équipe réseau pour l'ouvrir." } $msg }
DMZ : Pour une zone démilitarisée, c'est un sous-réseau séparé du réseau local et isolé de celui-ci et d'Internet par un pare-feu. Ce sous-réseau contient les machines étant susceptibles d'être accédées depuis Internet, et qui n'ont pas besoin d'accéder au réseau local.
Commentaires
Enregistrer un commentaire