Test-NetConnection provjerava otvaranje / zatvaranje TCP portova iz PowerShell-a

PowerShell 4.0 (Windows 2012 R2, Windows 8.1 i novije verzije) ugrađeni cmdlet za provjeru mrežnih veza - test-NetConnection. Pomoću ovog cmdleta možete provjeriti dostupnost udaljenog poslužitelja ili mrežne usluge na njemu, blokirati TCP portove vatrozidima, provjeriti dostupnost i usmjeravanje ICMP-a. U osnovi cmdlet Test-NetConnection omogućuje vam zamjenu nekoliko poznatih mrežnih alata odjednom: ping, traceroute, TCP port skener itd..

sadržaj:

  • TCP Port Ping: Korištenje Test-NetConnection za testiranje otvorenih portova i dostupnosti poslužitelja
  • Test-NetConnection u nadzornim skriptama
  • Mrežni skener PowerShell

Svaki administrator periodično mora provjeriti dostupnost usluge na udaljenom poslužitelju provjerom odgovora s udaljenog TCP porta (na primjer, dostupnost pošte ili web poslužitelja). Štoviše, svi su navikli da se takva provjera najbrže provodi pomoću telnet naredbe. Na primjer, da biste provjerili dostupnost SMTP usluge na poslužitelju pošte (prema zadanom odgovara na TCP priključak 25), samo pokrenite naredbu telnet msk-msg01.winitpro.ru 25. No, počevši od sustava Windows 7, telnet klijent je posvećen zasebnoj komponenti koju je potrebno instalirati odvojeno. Pogledajmo kako izvesti sličnu radnju u PowerShellu.

Glavna prednost cmdleta Test-NetConnection je ta što je on već dio svih modernih verzija sustava Windows i ne morate ga odvojeno instalirati. Cmdlet je dio modula. NetTCPIP (počevši od PoSh v4.0).

vijeće. Pomoću naredbe možete provjeriti trenutno instaliranu verziju PowerShell-a $ PSVersionTable.PSVersion

Vrijednost 4 u stupcu Major pokazuje da je PowerShell 4.0 instaliran na računalu.

TCP Port Ping: Korištenje Test-NetConnection za testiranje otvorenih portova i dostupnosti poslužitelja

Provjerite je li TCP port 25 (SMTP protokol) otvoren na poslužitelju e-pošte pomoću Test-NetConnection:

Test-NetConnection -ComputerName msk-msg01 -Port 25

primjedba. Korištenjem cmdleta Test-NetConnection možete provjeriti samo TCP vezu, ona nije primjenjiva za provjeru dostupnosti UDP portova.

U skraćenom obliku, slična naredba izgleda ovako:

TNC msk-mail1 -Port 25

Analiziramo rezultat naredbe:

ComputerName: msk-msg01 RemoteAddress: 10.10.1.7 RemotePort: 25 InterfaceAlias: CORP SourceAddress: 10.10.1.70 PingPodijeljeno: True PingReplyDetails (RTT): 0 ms TcpTestSucceded: True 

Kao što vidite, cmdlet razrješava naziv poslužitelja na IP adresu, provjerava ICMP odgovor (slično kao ping) i dostupnost TCP priključka. Navedeni poslužitelj dostupan je putem ICMP-a (PingSucceeded = Točno) i 25 TCP porta također odgovara (RemotePort = 25, TcpTestSucceeded = Točno).

primjedba.  U nekim se slučajevima može ispostaviti da je PingSucceeded = netočno, a TcpTestSucceeded = Točno. Najvjerojatnije znači da je ICMP Ping onemogućen na udaljenom poslužitelju.

Cmdlet ima poseban parametar -CommonTCPPort, omogućujući vam da odredite naziv poznatog mrežnog protokola (HTTP, RDP, SMB, WINRM).

Na primjer, za provjeru dostupnosti web poslužitelja možete upotrijebiti naredbu:

Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP

Ili dostupnost RDP priključaka (3389):

Test-NetConnection msk-rds1 -CommonTCPPort RDP

Možete ispisati sve parametre koje vraća cmdlet Test-NetConnection:

Test-NetConnection msk-man01 -port 445 | Format-lista *

Ako su vam potrebne samo informacije o dostupnosti TCP priključka, u sažetijem obliku, provjera se može izvršiti ovako:

TNC msk-mail1 -Port 25 -InformLevel Mirno

Cmdlet je vratio True, što znači da je udaljeni ulaz dostupan.

vijeće. U prethodnim verzijama PowerShell-a možete provjeriti dostupnost udaljenog TCP porta prema:

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

U sustavu Windows 10 / Windows Server 2016 možete koristiti cmdlet Test-NetConnection da biste pratili rutu do udaljenog poslužitelja koristeći -traceroute (analogni trag). Pomoću parametra -Hmelj možete ograničiti maksimalni broj nade prilikom provjere.

Test-NetConnection msk-man01 -TraceRoute

Cmdlet je vratio kašnjenje mreže prilikom pristupa poslužitelju u milisekundama (PingReplyDetails (RTT): 41 ms) i sve IP adrese usmjerivača na putu do ciljnog poslužitelja.

Test-NetConnection u nadzornim skriptama

Sljedeća naredba omogućuje vam provjeru dostupnosti određenog porta na mnogim poslužiteljima, čiji je popis spreman u tekstualnu datoteku serveri.txt. Zainteresirani smo za poslužitelje na koje željena usluga ne odgovara:

Get-Content c: \ Distr \ servers.txt | gdje je -NOT (Test-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Format-tablica -AutoSize

Slično tome, možete stvoriti jednostavan sustav nadzora koji provjerava dostupnost poslužitelja i prikazuje obavijest ako jedan od poslužitelja nije dostupan.

Na primjer, možete provjeriti dostupnost osnovnih usluga na svim kontrolerima domena (DC popis može se dobiti s cmdlet Get-ADDomainController). Provjerimo sljedeće usluge na DC-u (uslužni program PortQry ima slično pravilo Domena i pouzdanosti):

  • 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 hosta, Ipv4address, isGlobalCatalog, Web lokacija, Šuma, Operativni sustav
ForEach ($ DC u $ AllDCs)

Foreach ($ P u $ portovima)
$ check = Test-NetConnection $ DC -Port $ P -WarningAction SilentlyContinue
Ako ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green -Separator "=>"
drugo
Write-Host $ DC.name $ P -Separator "=>" -ForegroundColor Red

Skripta će provjeriti navedene TCP portove na kontrolerima domena, a ako jedan od portova nije dostupan, istaknite je crvenom bojom (uz manje izmjene, možete pokrenuti ovu skriptu PowerShell-a kao Windows uslugu).

Mrežni skener PowerShell

Također možete implementirati jednostavan skener portova i IP podmreže za skeniranje udaljenih poslužitelja ili podmreža na otvorene / zatvorene TCP portove.

Skeniramo raspon IP adresa na otvorenom priključku 3389:

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

Skeniramo raspon TCP portova od 1 do 1024 na navedenom poslužitelju:

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