V Powerhell 4.0 (Windows 2012 R2, Windows 8.1 a vyšší) vestavěná rutina pro kontrolu síťových připojení - Test-Síťové připojení. Pomocí tohoto rutiny cmdlet můžete zkontrolovat dostupnost vzdáleného serveru nebo síťové služby, blokovat porty TCP brány firewall, zkontrolovat dostupnost ICMP a směrování. V podstatě rutina Test-netconnection
umožňuje nahradit několik známých síťových nástrojů najednou: ping, traceroute, skener portů TCP atd..
Obsah:
- TCP Port Ping: Použití Test-NetConnection k testování otevřených portů a dostupnosti serveru
- Test-NetConnection v monitorovacích skriptech
- Síťový skener PowerShell
telnet msk-msg01.winitpro.ru 25
. Počínaje Windows 7 je však klient telnetu vyhrazen pro samostatnou součást, kterou je třeba nainstalovat samostatně. Podívejme se, jak provést podobnou akci v PowerShell.Hlavní výhodou rutiny Test-NetConnection je, že je již součástí všech moderních verzí systému Windows a nemusíte ji instalovat samostatně. Rutina je součástí modulu. NetTCPIP (počínaje PoSh v4.0).
Tip. Pomocí příkazu můžete zkontrolovat aktuální nainstalovanou verzi PowerShell$ PSVersionTable.PSVersion
Hodnota 4 ve sloupci Major označuje, že v počítači je nainstalována aplikace PowerShell 4.0.
TCP Port Ping: Použití Test-NetConnection k testování otevřených portů a dostupnosti serveru
Zkontrolujte, zda je na poštovním serveru pomocí protokolu Test-NetConnection otevřen port TCP 25 (protokol SMTP):
Test-NetConnection -ComputerName msk-msg01 -Port 25
Ve zkrácené podobě vypadá podobný příkaz takto:
TNC msk-mail1 -Port 25
Pojďme analyzovat výsledek příkazu:
Název_počítače: 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 vidíte, rutina přeřadí název serveru na IP adresu, zkontroluje odpověď ICMP (podobně jako ping) a dostupnost portu TCP. Zadaný server je přístupný prostřednictvím ICMP (PingSucceeded = True
) a 25 port TCP také reaguje (RemotePort = 25, TcpTestSucceeded = True
).
Rutina má speciální parametr -CommonTCPPort, umožňuje zadat název známého síťového protokolu (HTTP, RDP, SMB, WINRM).
Chcete-li například zkontrolovat dostupnost webového serveru, můžete použít příkaz:
Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP
Nebo dostupnost portu RDP (3389):
Test-NetConnection msk-rds1 -ommonTCPPort RDP
Můžete vytisknout všechny parametry, které vrací rutina Test-NetConnection:
Test-NetConnection msk-man01 -port 445 | Seznam formátů *
Pokud potřebujete pouze informace o dostupnosti portu TCP, ve stručnější podobě lze kontrolu provést takto:
TNC msk-mail1 -Port 25 -InformationLevel Quiet
Cmdlet vrátil True, což znamená, že je k dispozici vzdálený port.
Tip. V předchozích verzích PowerShell můžete zkontrolovat dostupnost vzdáleného portu TCP:(New-Object System.Net.Sockets.TcpClient) .Connect ('msk-msg01', 25)
V systému Windows 10 / Windows Server 2016 můžete pomocí rutiny Test-NetConnection sledovat trasu ke vzdálenému serveru pomocí -Traceoutout (analogický záznam). Pomocí parametru -Chmel při kontrole můžete omezit maximální počet nadějí.
Test-NetConnection msk-man01 -TraceRoute
Rutina vrátila síťové zpoždění při přístupu k serveru v milisekundách (PingReplyDetails (RTT): 41 ms
) a všechny adresy IP směrovačů na cestě k cílovému serveru.
Test-NetConnection v monitorovacích skriptech
Následující příkaz umožňuje zkontrolovat dostupnost konkrétního portu na mnoha serverech, jejichž seznam je uložen v textovém souboru servery.txt. Máme zájem o servery, na které požadovaná služba neodpovídá:
Get-Content c: \ Distr \ servery.txt | kde -NOT (Test-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Tabulka formátu -AutoSize
Podobně můžete vytvořit jednoduchý monitorovací systém, který kontroluje dostupnost serverů a zobrazuje upozornění, pokud jeden ze serverů není k dispozici.
Můžete například zkontrolovat dostupnost základních služeb na všech řadičích domény (seznam DC lze získat pomocí rutiny Get-ADDomainController). Podívejme se na následující služby v systému DC (obslužný program PortQry má podobné pravidlo domény a důvěryhodnosti):
- 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 * | Název hostitele Select-Object, Ipv4address, isGlobalCatalog, Site, Forest, OperatingSystem
ForEach ($ DC v $ AllDCs)
Foreach ($ P v $ portech)
$ check = Test-NetConnection $ DC -Port $ P -WarningAction SilentlyContinue
Pokud ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green - Separator "=>"
jinde
Write-Host $ DC.name $ P -Separator "=>" -ForegroundColor Red
Skript zkontroluje zadané porty TCP v řadičích domény a pokud jeden z portů není k dispozici, zvýrazněte jej červeně (s malými úpravami můžete tento skript PowerShell spustit jako službu Windows).
Síťový skener PowerShell
Můžete také implementovat jednoduchý skener podsítě a IP podsítě pro skenování vzdálených serverů nebo podsítí pro otevřené / uzavřené porty TCP.
Testujeme rozsah IP adres na otevřeném portu 3389:
foreach ($ ip za 5 ... 30) Test-NetConnection -Port 3389 -InformationLevel "Detailní" 10.10.10. $ ip
Testujeme rozsah TCP portů od 1 do 1024 na zadaném serveru:
foreach ($ port in 1 ... 1024) If (($ a = Test-NetConnection srvfs01 -Port $ port -WarningAction SilentlyContinue) .tcpTestSucceeded -eq $ true) "Port TCP $ $ je otevřen!"