Test-NetConnection preverja odpiranje / zapiranje vrat TCP iz PowerShell-a

V Powerhell 4.0 (Windows 2012 R2, Windows 8.1 in novejši) vgrajen cmdlet za preverjanje omrežnih povezav - Test-Povezava v mrežo. S tem cmdletom lahko preverite razpoložljivost oddaljenega strežnika ali omrežne storitve na njem, blokirate vrata TCP z požarnimi zidovi, preverite razpoložljivost in usmerjanje ICMP. V bistvu cmdlet Preizkusna mreža vam omogoča, da hkrati zamenjate več znanih omrežnih pripomočkov: ping, traceroute, skener vrat TCP itd..

Vsebina:

  • TCP Port Ping: Uporaba Test-NetConnection za testiranje odprtih vrat in razpoložljivosti strežnika
  • Test-NetConnection pri spremljanju skriptov
  • PowerShell Network Scanner

Vsak skrbnik mora občasno preveriti razpoložljivost storitve na oddaljenem strežniku s preverjanjem odgovora z oddaljenih vrat TCP (na primer razpoložljivost pošte ali spletnega strežnika). Poleg tega so vsi navajeni, da se takšen pregled najhitreje izvede z ukazom telnet. Na primer, če želite preveriti razpoložljivost storitve SMTP na poštnem strežniku (privzeto se odzove na vrata TCP 25), samo zaženite ukaz telnet msk-msg01.winitpro.ru 25. Toda od sistema Windows 7 je odjemalec telnet namenjen ločeni komponenti, ki jo je treba namestiti posebej. Poglejmo, kako izvesti podobno dejanje v programu PowerShell.

Glavna prednost cmdleta Test-NetConnection je, da je že del vseh sodobnih različic sistema Windows in ga ni treba nameščati posebej. Cmdlet je del modula. NetTCPIP (začenši s PoSh v4.0).

Namig. Z ukazom lahko preverite trenutno nameščeno različico PowerShell-a $ PSVersionTable.PSVersion

V stolpcu Major vrednost 4 znaša, da je PowerShell 4.0 nameščen v računalniku.

TCP Port Ping: Uporaba Test-NetConnection za testiranje odprtih vrat in razpoložljivosti strežnika

Preverite, ali je TCP vrata 25 (protokol SMTP) na poštnem strežniku odprta s pomočjo Test-NetConnection:

Test-NetConnection -ComputerName msk-msg01 -Port 25

Opomba. S pomočjo ukaznega okna Test-NetConnection lahko preverite samo povezavo TCP; ni uporabljivo za preverjanje razpoložljivosti vrat UDP.

V skrajšani obliki je podoben ukaz videti takole:

TNC msk-mail1 -Port 25

Analiziramo rezultat ukaza:

Ime računalnika: msk-msg01 RemoteAddress: 10.10.1.7 RemotePort: 25 InterfaceAlias: CORP SourceAddress: 10.10.1.70 PingSpeced: True PingReplyDetails (RTT): 0 ms TcpTestSupceeded: True 

Kot lahko vidite, cmdlet razreši ime strežnika na IP naslov, preveri odziv ICMP (podobno kot ping) in razpoložljivost TCP vrat. Do navedenega strežnika je dostopen prek ICMP (PingSucceeded = Res) in 25 TCP vrat se tudi odzove (RemotePort = 25, TcpTestSucceeded = Res).

Opomba.  V nekaterih primerih se lahko izkaže, da je PingSucceeded = napačno, TcpTestSucceeded = True. Najverjetneje pomeni, da je ICMP Ping onemogočen na oddaljenem strežniku.

Cmdlet ima poseben parameter -CommonTCPPort, ki vam omogoča, da določite ime znanega omrežnega protokola (HTTP, RDP, SMB, WINRM).

Na primer, če želite preveriti razpoložljivost spletnega strežnika, lahko uporabite ukaz:

Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP

Ali razpoložljivost vrat RDP (3389):

Test-NetConnection msk-rds1 -CommonTCPPort RDP

Natisnete lahko vse parametre, ki jih vrne cmdlet Test-NetConnection:

Test-NetConnection msk-man01 -port 445 | Seznam formatov *

Če potrebujete samo informacije o razpoložljivosti vrat TCP, v bolj jedrnate oblike, lahko preverjanje opravite tako:

TNC msk-mail1 -Port 25 -Informacija Nivo Tiho

Cmdlet je vrnil True, kar pomeni, da so oddaljena vrata na voljo.

Namig. V prejšnjih različicah PowerShell lahko preverite razpoložljivost oddaljenih vrat TCP tako, da:

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

V operacijskem sistemu Windows 10 / Windows Server 2016 lahko uporabite ukazni ukaz Test-NetConnection za sledenje poti do oddaljenega strežnika z uporabo -Izsleditev (analogni sledilni zapis). Uporaba parametra -Hmelj lahko pri preverjanju omejite največje število upanja.

Test-NetConnection msk-man01 -TraceRoute

Cmdlet je vrnil mrežno zamudo pri dostopu do strežnika v milisekundah (PingReplyDetails (RTT): 41 ms) in vsi IP naslovi usmerjevalnikov na poti do ciljnega strežnika.

Test-NetConnection pri spremljanju skriptov

Naslednji ukaz omogoča preverjanje razpoložljivosti določenega pristanišča na številnih strežnikih, seznam katerih je shranjen v besedilni datoteki strežniki.txt. Zanimajo nas strežniki, na katerih se želena storitev ne odzove:

Pridobitev vsebine c: \ Distr \ servers.txt | kjer je -NOT (Test-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Format-Tabela -AutoSize

Podobno lahko ustvarite preprost nadzorni sistem, ki preveri razpoložljivost strežnikov in prikaže obvestilo, če eden od strežnikov ni na voljo.

Na primer, lahko preverite razpoložljivost osnovnih storitev na vseh krmilnikih domen (seznam z enosmernim tokom lahko dobite z ukazom Get-ADDomainController). Preverimo naslednje storitve na DC-ju (pripomoček PortQry ima podobno pravilo domene in zaupanja):

  • 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 Ime gostitelja, Ipv4address, isGlobalCatalog, spletno mesto, gozd, operacijski sistem
ForEach ($ DC v $ AllDC)

Foreach ($ P v $ Ports)
$ check = Test-NetConnection $ DC -Port $ P -Opozorilo SilentlyContinue
Če ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green -Separator "=>"
drugače
Write-Host $ DC.name $ P -Separator "=>" -ForegroundColor Red

Skript bo preveril določena vrata TCP na krmilnikih domen in če eno od vrat ni na voljo, ga označite z rdečo barvo (z manjšimi spremembami lahko ta skript PowerShell zaženete kot storitev Windows).

PowerShell Network Scanner

Za skeniranje oddaljenih strežnikov ali podomrežij za odprta / zaprta vrata TCP lahko uporabite tudi preprost skener vrat in podmrež.

Skeniramo obseg IP naslovov na odprtem pristanišču 3389:

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

Na določenem strežniku skeniramo obseg vrat TCP od 1 do 1024:

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