Strumenti classici come ping, tracert o il vecchio client telnet sono fondamentali, ma spesso restituiscono risultati frammentati. Windows offre un’alternativa moderna, potente e integrata in PowerShell: il cmdlet Test-NetConnection.
Il comando Test-NetConnection permette di verificare la raggiungibilità di un host non solo tramite il classico protocollo ICMP (ping), ma anche testando le porte TCP.
Nota: attualmente Test-NetConnection supporta esclusivamente il protocollo TCP. Per test UDP è necessario affidarsi a strumenti esterni come PortQry o script .NET personalizzati.
Esempi di utilizzo
Vediamo come verificare se un host o un sito è raggiungibile
Test-NetConnection -ComputerName google.com
ComputerName : google.com
RemoteAddress : 142.250.181.174
InterfaceAlias : LAN
SourceAddress : 192.168.0.247
PingSucceeded : True
PingReplyDetails (RTT) : 17 msOltre al semplice “risponde/non risponde”, il comando restituirà l’indirizzo IP risolto e i dettagli dell’interfaccia di rete utilizzata per la connessione. La riga più importante è PingSucceded che ha restituito True.
Utilizziamo ora il comando per verificare se una porta è aperta su un server remoto (es. RDP-3389 o SQL-1433)
Test-NetConnection -ComputerName 192.168.0.41 -Port 3389
ComputerName : 192.168.0.41
RemoteAddress : 192.168.0.41
RemotePort : 3389
InterfaceAlias : LAN
SourceAddress : 192.168.0.247
TcpTestSucceeded : TrueIn questo caso, il valore da osservare nell’output è TcpTestSucceeded. Se è True, la porta è aperta e il servizio è raggiungibile.
Quando si analizzano problemi di rete viene spesso utilizzato il comando traceroute. Il cmdlet Test-NetConnection può effettuare questo test
Test-NetConnection -ComputerName 8.8.8.8 -TraceRoute
ComputerName : 8.8.8.8
RemoteAddress : 8.8.8.8
InterfaceAlias : LAN
SourceAddress : 192.168.0.247
PingSucceeded : True
PingReplyDetails (RTT) : 20 ms
TraceRoute : 192.168.0.1
201.47.79.246
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
8.8.8.8Come visto nel primo esempio anche in questo caso abbiamo il valore PingSucceded che ha restituito True e sono inoltre presenti tutti gli hosts attraversati dal pacchetto per arrivare a destinazione.
Nell’output possono esserci hops contrassegnati da asterischi o senza IP. Questo significa che quel particolare nodo è configurato per non rispondere alle richieste ICMP per motivi di sicurezza, ma non indica necessariamente un guasto se i salti successivi funzionano.
Test-NetConnection può essere utilizzato all’interno di script più o meno complessi. In questo caso non servono output dettagliati, ma solo un valore “Vero/Falso”. Il parametro -InformationLevel Quiet permette di ottenere questo risultato
$isOnline = Test-NetConnection -ComputerName "google.com" -Port 443 -InformationLevel Quiet
if ($isOnline) { Write-Host "Il server è raggiungibile" }
Il server è raggiungibileIn questo caso il server risponde sulla porta 443 e di conseguenza $isOnline sarà valorizzato a True eseguendo il comando tra parentesi graffe.
Test-NetConnection non permette nativamente di inserire un range (es. 3388-3390), ma possiamo facilmente bypassare questo limite con un ciclo
3388..3390 | ForEach-Object {
Test-NetConnection -ComputerName "192.168.0.41" -Port $_ | Select-Object RemotePort, TcpTestSucceeded
}
RemotePort TcpTestSucceeded
---------- ----------------
3388 False
3389 True
3390 Falserestituendo l’esito per ogni porta. Qualora le porte non siano consecutive possiamo modificare il comando come segue
$ports = 80, 443, 1433, 3389
foreach ($p in $ports) {
Test-NetConnection -ComputerName "ComputerName.Domain" -Port $p | Select-Object RemotePort, TcpTestSucceeded
}
RemotePort TcpTestSucceeded
---------- ----------------
80 False
443 True
1433 False
3389 TrueNota: qualora il numero di porte da testare è elevato il tempo di esecuzione potrebbe essere molto elevato. Questo in quanto Test-NetConnection attende il timeout di rete per ogni porta chiusa (circa 2 secondi per porta).
Riepilogo dei principali parametri
| Parametro | Funzione |
|---|---|
| -ComputerName | L’host o l’IP di destinazione |
| -Port | La porta TCP da testare |
| -CommonTCPPort | Usa nomi standard come HTTP, HTTPS, RDP, SMB |
| -TraceRoute | Esegue il traceroute |
| -InformationLevel | Regola il dettaglio (Quiet per solo True/False, Detailed per il massimo dei dati) |
Conclusione
Test-NetConnection elimina la necessità di installare client telnet o strumenti di terze parti per i test di base. È presente di base in Windows, è potente e perfetto per essere inserito in script di automazione.
