Test-NetConnection kontroluje otevřené / zavřené TCP porty z PowerShell

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

Každý správce musí pravidelně kontrolovat dostupnost služby na vzdáleném serveru kontrolou odpovědi ze vzdáleného portu TCP (například dostupnost pošty nebo webového serveru). Navíc je každý zvyklý na to, že taková kontrola se provádí nejrychleji pomocí příkazu telnet. Chcete-li například zkontrolovat dostupnost služby SMTP na poštovním serveru (ve výchozím nastavení odpovídá portu TCP 25), stačí spustit příkaz 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

Poznámka:. Pomocí rutiny Test-NetConnection můžete ověřit pouze připojení TCP, nelze jej použít pro kontrolu dostupnosti portů UDP..

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).

Poznámka:.  V některých případech se může ukázat, že PingSucceeded = False a TcpTestSucceeded = True. Pravděpodobně to znamená, že ICMP Ping je na vzdáleném serveru zakázán.

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!"