Test-NetConnection kontroluje otvorené / zatvorené TCP porty z PowerShell

PowerShell 4.0 (Windows 2012 R2, Windows 8.1 a novší) vstavaný cmdlet na kontrolu sieťových pripojení - skúška-NetConnection. Pomocou tohto rutiny cmdlet môžete skontrolovať dostupnosť vzdialeného servera alebo sieťovej služby, blokovať porty TCP pomocou brán firewall, skontrolovať dostupnosť a smerovanie protokolu ICMP. V podstate cmdlet Test-NetConnection umožňuje nahradiť niekoľko známych sieťových nástrojov naraz: ping, traceroute, skener portov TCP atď..

obsah:

  • TCP Port Ping: Použitie Test-NetConnection na testovanie otvorených portov a dostupnosti servera
  • Test-NetConnection v monitorovacích skriptoch
  • Sieťový skener PowerShell

Každý správca musí pravidelne kontrolovať dostupnosť služby na vzdialenom serveri kontrolou odpovede zo vzdialeného portu TCP (napríklad dostupnosť pošty alebo webového servera). Každý je navyše zvyknutý na to, že takáto kontrola sa najrýchlejšie vykonáva pomocou príkazu telnet. Napríklad ak chcete skontrolovať dostupnosť služby SMTP na poštovom serveri (predvolene reaguje na port TCP 25), stačí spustiť príkaz telnet msk-msg01.winitpro.ru 25. Počnúc Windows 7 je však klient telnetu vyhradený pre samostatný komponent, ktorý je potrebné nainštalovať osobitne. Pozrime sa, ako vykonať podobnú akciu v PowerShell.

Hlavnou výhodou rutiny Test-NetConnection je to, že je už súčasťou všetkých moderných verzií systému Windows a nemusíte ju inštalovať osobitne. Rutina je súčasťou modulu. NetTCPIP (začínajúce PoSh v4.0).

rada. Pomocou príkazu môžete skontrolovať aktuálnu nainštalovanú verziu PowerShell $ PSVersionTable.PSVersion

Hodnota 4 v stĺpci Major označuje, že v počítači je nainštalovaný program PowerShell 4.0.

TCP Port Ping: Použitie Test-NetConnection na testovanie otvorených portov a dostupnosti servera

Skontrolujte, či je na poštovom serveri pomocou protokolu Test-NetConnection otvorený port TCP 25 (protokol SMTP):

Test-NetConnection -ComputerName msk-msg01 -Port 25

poznámka. Pomocou rutiny Test-NetConnection môžete overiť iba pripojenie TCP, nie je použiteľné na kontrolu dostupnosti portov UDP..

V skrátenej podobe vyzerá podobný príkaz takto:

TNC msk-mail1 - časť 25

Poďme analyzovať výsledok príkazu:

Názov_počítača: msk-msg01 RemoteAddress: 10.10.1.7 RemotePort: 25 InterfaceAlias: CORP SourceAddress: 10.10.1.70 PingSucceeded: True PingReplyDetails (RTT): 0 ms TcpTestSucceeded: True 

Ako vidíte, rutina prekladá názov servera na IP adresu, kontroluje odozvu ICMP (podobnú pingu) a dostupnosť portu TCP. Zadaný server je prístupný cez ICMP (PingSucceeded = True) a 25 port TCP tiež odpovedá (RemotePort = 25, TcpTestSucceeded = True).

poznámka.  V niektorých prípadoch sa môže ukázať, že PingSucceeded = False a TcpTestSucceeded = True. Pravdepodobne to znamená, že ICMP Ping je na vzdialenom serveri zakázaný.

Rutina má špeciálny parameter -CommonTCPPort, umožňuje zadať názov známeho sieťového protokolu (HTTP, RDP, SMB, WINRM).

Napríklad na kontrolu dostupnosti webového servera môžete použiť príkaz:

Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP

Alebo dostupnosť portu RDP (3389):

Test-NetConnection msk-rds1 -ommonTCPPort RDP

Môžete vytlačiť všetky parametre, ktoré vracia rutina Test-NetConnection:

Test-NetConnection msk-man01 -port 445 | Zoznam formátov *

Ak potrebujete iba informácie o dostupnosti portu TCP, v stručnejšej podobe sa kontrola môže vykonať takto:

TNC msk-mail1 -Port 25 -InformationLevel Quiet

Rutina cmdlet vrátila hodnotu True, čo znamená, že vzdialený port je k dispozícii.

rada. V predchádzajúcich verziách programu PowerShell môžete skontrolovať dostupnosť vzdialeného portu TCP pomocou:

(New-Object System.Net.Sockets.TcpClient) .Pripojenie ('msk-msg01', 25)

Vo Windows 10 / Windows Server 2016 môžete použiť rutinu Test-NetConnection na sledovanie trasy na vzdialený server pomocou -Traceroute (analógový záznam). Pomocou parametra -chmeľ pri kontrole môžete obmedziť maximálny počet nádejí.

Test-NetConnection msk-man01 -TraceRoute

Rutina vrátila sieťové oneskorenie pri prístupe k serveru v milisekundách (PingReplyDetails (RTT): 41 ms) a všetky adresy IP smerovačov na ceste k cieľovému serveru.

Test-NetConnection v monitorovacích skriptoch

Nasledujúci príkaz vám umožňuje skontrolovať dostupnosť konkrétneho portu na mnohých serveroch, ktorých zoznam je uložený v textovom súbore servery.txt. Zaujímajú nás servery, na ktoré požadovaná služba neodpovedá:

Get-Content c: \ Distr \ server.txt | kde -NOT (Test-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Tabuľka formátu -AutoSize

Podobne môžete vytvoriť jednoduchý monitorovací systém, ktorý kontroluje dostupnosť serverov a zobrazuje upozornenie, ak jeden zo serverov nie je k dispozícii.

Napríklad môžete skontrolovať dostupnosť základných služieb na všetkých radičoch domény (zoznam DC je možné získať pomocou rutiny Get-ADDomainController). V DC skontrolujte nasledujúce služby (obslužný program PortQry má podobné pravidlo domény a dôveryhodnosti):

  • 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ázov hostiteľa objektu Select, Ipv4address, jeGlobalCatalog, Site, Forest, OperatingSystem
ForEach ($ DC v $ AllDCs)

Foreach ($ P v $ portoch)
$ check = Test-NetConnection $ DC -Port $ P -WarningAction SilentlyContinue
Ak ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green - Separator "=>"
inak
Write-Host $ DC.name $ P - Separator "=>" -ForegroundColor Red

Skript skontroluje zadané porty TCP v radičoch domény a ak jeden z portov nie je k dispozícii, zvýraznite ho červenou farbou (s malými úpravami môžete tento skript PowerShell spustiť ako službu Windows).

Sieťový skener PowerShell

Môžete tiež implementovať jednoduchý skener portov a podsiete na skenovanie vzdialených serverov alebo podsiete, či neobsahujú otvorené alebo zatvorené porty TCP.

Testujeme rozsah IP adries na otvorenom porte 3389:

foreach ($ ip za 5 ... 30) Test-NetConnection -Port 3389 -InformationLevel "Detailed" 10.10.10. $ ip

Na zadanom serveri kontrolujeme rozsah portov TCP od 1 do 1024:

foreach ($ port in 1 ... 1024) If (($ a = Test-NetConnection srvfs01 -Port $ port -WarningAction SilentlyContinue) .tcpTestSucceeded -eq $ true) "Port TCP $ $ je otvorený!"