W Powerhell 4.0 (Windows 2012 R2, Windows 8.1 i nowsze) wbudowane polecenie cmdlet do sprawdzania połączeń sieciowych - Testuj-Połączenie sieciowe. Za pomocą tego polecenia cmdlet można sprawdzić dostępność zdalnego serwera lub usługi sieciowej, zablokować porty TCP za pomocą zapór ogniowych, sprawdzić dostępność i routing ICMP. Zasadniczo polecenie cmdlet Test-połączenie sieciowe
pozwala zastąpić kilka znanych narzędzi sieciowych jednocześnie: ping, traceroute, skaner portów TCP itp..
Treść
- Ping portów TCP: Używanie Test-NetConnection do testowania otwartych portów i dostępności serwera
- Test-NetConnection w skryptach monitorowania
- Skaner sieciowy PowerShell
telnet msk-msg01.winitpro.ru 25
. Jednak począwszy od systemu Windows 7 klient Telnet jest dedykowany osobnemu komponentowi, który należy zainstalować osobno. Zobaczmy, jak wykonać podobną akcję w PowerShell.Główną zaletą cmdletu Test-NetConnection jest to, że jest on już częścią wszystkich nowoczesnych wersji systemu Windows i nie trzeba go instalować osobno. Polecenie cmdlet jest częścią modułu. NetTCPIP (począwszy od PoSh v4.0).
Wskazówka. Możesz sprawdzić bieżącą zainstalowaną wersję programu PowerShell za pomocą polecenia$ PSVersionTable.PSVersion
Wartość 4 w kolumnie Major wskazuje, że PowerShell 4.0 jest zainstalowany na komputerze.
Ping portów TCP: Używanie Test-NetConnection do testowania otwartych portów i dostępności serwera
Sprawdź, czy port TCP 25 (protokół SMTP) jest otwarty na serwerze pocztowym za pomocą Test-NetConnection:
Test-NetConnection -ComputerName msk-msg01 -Port 25
W skrócie podobne polecenie wygląda następująco:
TNC msk-mail1 -Port 25
Przeanalizujmy wynik polecenia:
ComputerName: msk-msg01 RemoteAddress: 10.10.1.7 RemotePort: 25 InterfaceAlias: CORP SourceAddress: 10.10.1.70 PingSucceeded: True PingReplyDetails (RTT): 0 ms TcpTestSucceeded: True
Jak widać, polecenie cmdlet rozpoznaje nazwę serwera na adres IP, sprawdza odpowiedź ICMP (podobną do polecenia ping) i dostępność portu TCP. Określony serwer jest dostępny za pośrednictwem ICMP (PingSucceeded = True
), a port 25 TCP również odpowiada (RemotePort = 25, TcpTestSucceeded = True
).
Polecenie cmdlet ma specjalny parametr -CommonTCPPort, umożliwiając określenie nazwy znanego protokołu sieciowego (HTTP, RDP, SMB, WINRM).
Na przykład, aby sprawdzić dostępność serwera WWW, możesz użyć polecenia:
Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP
Lub dostępność portu RDP (3389):
Test-NetConnection msk-rds1 -CommonTCPPort RDP
Możesz wydrukować wszystkie parametry, które zwraca polecenie cmdlet Test-NetConnection:
Test-NetConnection msk-man01 -port 445 | Lista formatów *
Jeśli potrzebujesz jedynie informacji o dostępności portu TCP, w bardziej zwięzłej formie, sprawdzenie można wykonać w następujący sposób:
TNC msk-mail1 -Port 25 -InformacjeLevel Quiet
Polecenie cmdlet zwróciło wartość True, co oznacza, że port zdalny jest dostępny.
Wskazówka. W poprzednich wersjach programu PowerShell można sprawdzić dostępność zdalnego portu TCP przez:(New-Object System.Net.Sockets.TcpClient) .Connect ('msk-msg01', 25)
W systemie Windows 10 / Windows Server 2016 można użyć polecenia cmdlet Test-NetConnection, aby prześledzić trasę do zdalnego serwera za pomocą -Traceoutout (analog tracert). Za pomocą parametru -Chmiel podczas sprawdzania możesz ograniczyć maksymalną liczbę nadziei.
Test-NetConnection msk-man01 -TraceRoute
Polecenie cmdlet zwróciło opóźnienie sieciowe podczas uzyskiwania dostępu do serwera w milisekundach (PingReplyDetails (RTT): 41 ms
) i wszystkie adresy IP routerów w drodze do serwera docelowego.
Test-NetConnection w skryptach monitorowania
Następujące polecenie pozwala sprawdzić dostępność określonego portu na wielu serwerach, których lista jest zapisana w pliku tekstowym server.txt. Interesują nas serwery, na których żądana usługa nie odpowiada:
Get-Content c: \ Distr \ servers.txt | gdzie -NOT (Test-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Format-Table -AutoSize
Podobnie możesz stworzyć prosty system monitorowania, który sprawdza dostępność serwerów i wyświetla powiadomienie, jeśli jeden z serwerów jest niedostępny.
Na przykład można sprawdzić dostępność podstawowych usług na wszystkich kontrolerach domeny (listę kontrolerów domeny można uzyskać za pomocą polecenia cmdlet Get-ADDomainController). Sprawdźmy następujące usługi na DC (narzędzie PortQry ma podobną regułę Domeny i zaufania):
- RPC - TCP / 135
- LDAP - TCP / 389
- LDAP - TCP / 3268
- DNS - TCP / 53
- Kerberos - TCP / 88
- SMB - TCP / 445
$ Porty = „135”, „389”, „636”, „3268”, „53”, „88”, „445”, „3269”, „80”, „443”
$ AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname, Ipv4address, isGlobalCatalog, Site, Forest, OperatingSystem
ForEach ($ DC w $ AllDCs)
Foreach ($ P w $ Porty)
$ check = Test-NetConnection $ DC -Port $ P -WarningAction SilentlyContinue
Jeśli ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green -Separator "=>"
jeszcze
Write-Host $ DC.name $ P -Separator "=>" -ForegroundColor Red
Skrypt sprawdzi określone porty TCP na kontrolerach domeny, a jeśli jeden z portów jest niedostępny, zaznacz go na czerwono (z niewielkimi modyfikacjami możesz uruchomić ten skrypt PowerShell jako usługę Windows).
Skaner sieciowy PowerShell
Możesz także wdrożyć prosty skaner portów i podsieci IP, aby skanować zdalne serwery lub podsieci w poszukiwaniu otwartych / zamkniętych portów TCP.
Skanujemy zakres adresów IP na otwartym porcie 3389:
foreach ($ ip za 5 ... 30) Test-NetConnection -Port 3389 -InformationLevel „Szczegółowe” 10.10.10. $ ip
Skanujemy zakres portów TCP od 1 do 1024 na określonym serwerze:
foreach ($ port w 1 ... 1024) If (($ a = Test-NetConnection srvfs01 -Port $ port -WarningAction SilentlyContinue) .tcpTestSucceeded -eq $ true) "Port TCP $ port jest otwarty!"