In PowerShell können Sie das verwenden Test-NetConnection Cmdlet, um zu überprüfen, ob ein Port auf einem Remotecomputer verfügbar (offen) ist. Mit diesem Cmdlet können Sie die Antwort und Verfügbarkeit eines Remote-Servers oder eines Netzwerkdienstes überprüfen, testen, ob der TCP-Port durch eine Firewall blockiert ist, die ICMP-Verfügbarkeit und das Routing überprüfen. In der Tat, Test-NetConnection
ersetzt mehrere beliebte Netzwerkadministrationstools wie z ping
, tracert
, telnet
, pathping
, TCP-Port-Scanner usw.
Inhalt:
- Suchen Sie mit Test-NetConnection nach einem offenen TCP-Port
- PowerShell: Auf mehreren Hosts nach offenen Ports suchen
- Einfacher TCP/IP-Port-Scanner in PowerShell
- So listen Sie offene Ports unter Windows mit PowerShell auf
Suchen Sie mit Test-NetConnection nach einem offenen TCP-Port
Mit dem Cmdlet Test-NetConnection können Sie nur TCP-Ports überprüfen. Um beispielsweise zu überprüfen, ob TCP-Port 25 (das SMTP-Protokoll) auf dem Remote-Mailserver geöffnet ist:
Test-NetConnection -ComputerName ny-msg01 -Port 25
Notiz. Sie können nur eine TCP-Port-Konnektivität testen, indem Sie das Cmdlet Test-NetConnection verwenden. Sie können das Cmdlet jedoch nicht verwenden, um die Verfügbarkeit der Remote-UDP-Ports zu überprüfen.
Der Befehl Test-NetConnection hat den Alias TNC. Die verkürzte Version desselben Befehls sieht folgendermaßen aus:
TNC ny-msg01 -Port 25
Schauen wir uns das Ergebnis des Befehls an:
Computername: ny-msg01. RemoteAddress: 10.20.1.7. RemotePort: 25. InterfaceAlias: CORP. Quelladresse: 10.20.1.79. PingSucceeded: True. PingReplyDetails (RTT): 0 ms. TcpTestSucceeded: True.
Wie Sie sehen, löst das Cmdlet den Servernamen in eine IP-Adresse auf und überprüft die ICMP-Antwort (ähnlich wie ping
) und prüft die Antwort vom TCP-Port (Portverfügbarkeit). Der angegebene Server antwortet über ICMP (PingSucceeded = True
) und der TCP-Port 25 ist offen (RemotePort=25, TcpTestSucceeded= True
).
Notiz. Wenn der Befehl zurückkehrt PingSucceeded=Falsch Und TcpTestSucceeded= True, bedeutet dies höchstwahrscheinlich, dass die ICMP-Echo-Anfrage (Ping) auf dem Remote-Computer deaktiviert ist.
Wenn Sie das ausführen Test-NetConnection ohne Parameter, prüft es, ob der Computer mit dem Internet verbunden ist (überprüft die Verfügbarkeit von internetbeacon.msedge.net
Gastgeber).
Sie können Folgendes hinzufügen:Informationsebene detailliert Option zum Anzeigen detaillierter Informationen beim Überprüfen eines Remote-TCP-Ports:
TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed
Das Cmdlet hat einen besonderen Parameter –CommonTCPPort, mit dem Sie den Namen eines bekannten Netzwerkprotokolls (HTTP, RDP, SMB, WINRM).
Um beispielsweise die Verfügbarkeit eines HTTP-Webservers zu überprüfen, können Sie den Befehl verwenden:
Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP
Oder prüfen Sie die Verfügbarkeit eines Standard-RDP-Port (TCP/3389):
Test-NetConnection ny-rds1 –CommonTCPPort RDP
Sie können alle Parameter auflisten, die das Cmdlet Test-NetConnection zurückgibt:
Test-NetConnection ny-man01 -port 445|Format-List *
Wenn Sie nur sehen müssen, ob der Port verfügbar ist, können Sie dies schneller überprüfen:
TNC ny-msg1 -Port 25 -InformationLevel Quiet
Das Cmdlet kehrt zurück True
, was bedeutet, dass der Remote-TCP-Port geöffnet ist.
(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)
Sie können das Cmdlet Test-NetConnection verwenden, um eine Route zu einem Remoteserver zu verfolgen, indem Sie Folgendes verwenden:TraceRoute Parameter (ähnlich dem integrierten tracert
Befehl in Windows). Sie können die maximale Anzahl von Hops während der Routenprüfung begrenzen, indem Sie die verwenden -Hopfen Parameter.
Test-NetConnection ny-man01 –TraceRoute
Das Cmdlet hat eine zusammenfassende Netzwerkzugriffsverzögerung in Millisekunden zurückgegeben (PingReplyDetails (RTT): 41 ms
) sowie alle IP-Adressen der Router auf dem Weg zum Zielhost.
PowerShell: Auf mehreren Hosts nach offenen Ports suchen
Mit PowerShell können Sie die Verfügbarkeit eines bestimmten Ports auf mehreren Remotecomputern prüfen. Speichern Sie die Liste der Hostnamen oder IP-Adressen in einer Nur-Text-Datei mit dem Namen servers.txt
.
Ihre Aufgabe besteht beispielsweise darin, in einer Liste von Servern Hosts zu finden, bei denen der TCP/25-Port nicht antwortet oder geschlossen ist:
Get-Content c:\PS\list_servers.txt | where { -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)}| Format-Table -AutoSize
Sie können ein einfaches Überwachungs-PowerShell-Skript verwenden, das die Verfügbarkeit von Remote-Servern überprüft und zeigt eine Popup-Benachrichtigung an wenn einer der Server nicht verfügbar ist.
Sie können beispielsweise die Verfügbarkeit grundlegender Dienste auf allen Domänencontrollern während eines überprüfen AD-Gesundheitscheck (Eine DC-Liste erhalten Sie mit der Get-ADDomainController-Cmdlet). Schauen wir uns die folgenden Dienste auf dem DC an (es gibt ein ähnliches „Domäne und Trusts„Herrschaft in der PortQry Werkzeug):
- RPC – TCP/135
- LDAP – TCP/389
- LDAP – TCP/3268
- DNS – TCP/53
- Kerberos – TCP/88
- SMB – 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}
}
}
Das Skript überprüft die angegebenen TCP-Ports auf den Domänencontrollern. Wenn einer der Ports nicht verfügbar ist, markiert es ihn rot (Sie können dies tun). Führen Sie dieses PowerShell-Skript als Windows-Dienst aus).
Einfacher TCP/IP-Port-Scanner in PowerShell
Mit PowerShell können Sie einen einfachen IP-Scanner implementieren, der Remote-Hosts oder IP-Subnetze nach offenen/geschlossenen TCP-Ports durchsucht.
So scannen Sie den IP-Adressbereich zwischen 192.168.1.100 und 192.168.1.150 und zeigen Computer an, auf denen Port 3389 geöffnet ist:
foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}
Scannen Sie einen Bereich von TCP-Ports (von 1 bis 1024) auf einem Remote-Host:
foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}
So listen Sie offene Ports unter Windows mit PowerShell auf
Benutzen Sie die Get-NetTCPConnection Cmdlet zum Auflisten der Ports, die auf dem lokalen Computer geöffnet sind (dies ist das PowerShell-Äquivalent von NETSTAT
). Eine Liste aller offenen TCP-Ports auf dem Computer kann wie folgt angezeigt werden:
Get-NetTcpConnection -State Listen | Select-Object LocalAddress, LocalPort| Sort-Object -Property LocalPort | Format-Table
Wenn Sie es herausfinden wollen welches Programm (Prozess) auf einem bestimmten Port lauscht Verwenden Sie auf Ihrem Computer den folgenden Befehl (wobei 443 eine Portnummer ist, die Sie überprüfen möchten):
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path