Tes-NetConnection memeriksa buka / tutup port TCP dari PowerShell

Masuk Powerhell 4.0 (Windows 2012 R2, Windows 8.1 dan lebih tinggi) cmdlet bawaan untuk memeriksa koneksi jaringan - Tes-Koneksi internet. Menggunakan cmdlet ini, Anda dapat memeriksa ketersediaan server jarak jauh atau layanan jaringan di dalamnya, memblokir port TCP oleh firewall, memeriksa ketersediaan ICMP dan perutean. Pada dasarnya sebuah cmdlet Tes-netconnection memungkinkan Anda mengganti beberapa utilitas jaringan yang sudah dikenal sekaligus: ping, traceroute, pemindai port TCP, dll..

Konten:

  • TCP Port Ping: Menggunakan Test-NetConnection untuk Menguji Port Terbuka dan Ketersediaan Server
  • Tes-NetConnection dalam skrip pemantauan
  • Pemindai Jaringan PowerShell

Administrator mana pun secara berkala harus memeriksa ketersediaan layanan pada server jarak jauh dengan memeriksa respons dari port TCP jarak jauh (misalnya, ketersediaan email atau server web). Selain itu, semua orang terbiasa dengan fakta bahwa pemeriksaan seperti itu paling cepat dilakukan menggunakan perintah telnet. Misalnya, untuk memeriksa ketersediaan layanan SMTP pada server mail (secara default ia merespons ke port TCP 25), jalankan saja perintah telnet msk-msg01.winitpro.ru 25. Tetapi mulai dengan Windows 7, klien telnet didedikasikan untuk komponen terpisah yang perlu diinstal secara terpisah. Mari kita lihat bagaimana melakukan tindakan serupa di PowerShell.

Manfaat utama cmdlet Test-NetConnection adalah sudah menjadi bagian dari semua versi Windows modern dan Anda tidak perlu menginstalnya secara terpisah. Cmdlet adalah bagian dari modul. NetTCPIP (dimulai dengan PoSh v4.0).

Kiat. Anda dapat memeriksa versi PowerShell yang diinstal saat ini dengan perintah $ PSVersionTable.PSVersion

Nilai 4 di kolom Utama menunjukkan bahwa PowerShell 4.0 diinstal pada komputer.

TCP Port Ping: Menggunakan Test-NetConnection untuk Menguji Port Terbuka dan Ketersediaan Server

Periksa apakah port TCP 25 (protokol SMTP) terbuka di server email menggunakan Test-NetConnection:

Test-NetConnection -ComputerName msk-msg01 -Port 25

Catatan. Menggunakan cmdlet Test-NetConnection, Anda hanya dapat memverifikasi koneksi TCP; itu tidak berlaku untuk memeriksa ketersediaan port UDP.

Dalam bentuk singkat, perintah serupa terlihat seperti ini:

TNC msk-mail1 -Port 25

Mari kita menganalisis hasil dari perintah:

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

Seperti yang Anda lihat, cmdlet menyelesaikan nama server ke alamat IP, memeriksa respons ICMP (mirip dengan ping) dan ketersediaan port TCP. Server yang ditentukan dapat diakses melalui ICMP (PingSucceeded = Benar) dan 25 port TCP juga merespons (RemotePort = 25, TcpTestSucceeded = Benar).

Catatan.  Dalam beberapa kasus, mungkin ternyata PingSucceeded = False, dan TcpTestSucceeded = True. Kemungkinan besar berarti bahwa ICMP Ping dinonaktifkan pada server jauh.

Cmdlet memiliki parameter khusus -CommonTCPPort, memungkinkan Anda untuk menentukan nama protokol jaringan yang dikenal (HTTP, RDP, SMB, WINRM).

Misalnya, untuk memeriksa ketersediaan server web, Anda dapat menggunakan perintah:

Uji-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP

Atau ketersediaan port RDP (3389):

Uji-NetConnection msk-rds1 -CommonTCPPort RDP

Anda dapat mencetak semua parameter yang dikembalikan cmdlet Test-NetConnection:

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

Jika Anda hanya memerlukan informasi tentang ketersediaan port TCP, dalam bentuk yang lebih ringkas, pemeriksaan dapat dilakukan seperti ini:

TNC msk-mail1 -Port 25 -InformasiTingkat Tenang

Cmdlet kembali Benar, yang berarti port jarak jauh tersedia.

Kiat. Di versi PowerShell sebelumnya, Anda dapat memeriksa ketersediaan port TCP jarak jauh dengan:

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

Di Windows 10 / Windows Server 2016, Anda dapat menggunakan cmdlet Test-NetConnection untuk melacak rute ke server jauh menggunakan -Pelacakan (analog tracert). Menggunakan parameter -Hop Anda dapat membatasi jumlah harapan maksimum saat memeriksa.

Test-NetConnection msk-man01 -TraceRoute

Cmdlet mengembalikan penundaan jaringan ketika mengakses server dalam milidetik (PingReplyDetails (RTT): 41 ms) dan semua alamat IP router dalam perjalanan ke server target.

Tes-NetConnection dalam skrip pemantauan

Perintah berikut memungkinkan Anda untuk memeriksa ketersediaan port tertentu pada banyak server, daftar yang disimpan di file teks servers.txt. Kami tertarik pada server di mana layanan yang diinginkan tidak merespons:

Dapatkan-Konten c: \ Distr \ servers.txt | di mana -NOT (Tes-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Format-Tabel -AutoSize

Demikian pula, Anda dapat membuat sistem pemantauan sederhana yang memeriksa ketersediaan server dan menampilkan pemberitahuan jika salah satu server tidak tersedia.

Misalnya, Anda dapat memeriksa ketersediaan layanan dasar pada semua pengontrol domain (daftar DC dapat diperoleh dengan cmdlet Get-ADDomainController). Mari kita periksa layanan berikut di DC (Utilitas PortQry memiliki aturan Domain dan trust yang serupa):

  • 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 = Dapatkan-ADDomainController -Filter * | Select-Object Hostname, Ipv4address, isGlobalCatalog, Site, Forest, OperatingSystem
ForEach ($ DC dalam $ AllDCs)

Foreach ($ P dalam $ Ports)
$ check = Tes-NetConnection $ DC -Port $ P -WarningAction SilentlyContinue
Jika ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green -Separator "=>"
lain
Write-Host $ DC.name $ P -Separator "=>" -ForegroundColor Red

Skrip akan memeriksa port TCP yang ditentukan pada pengontrol domain, dan jika salah satu port tidak tersedia, sorot dengan warna merah (dengan modifikasi kecil, Anda dapat menjalankan skrip PowerShell ini sebagai layanan Windows).

Pemindai Jaringan PowerShell

Anda juga dapat menerapkan port sederhana dan pemindai subnet IP untuk memindai server atau subnet jarak jauh untuk port TCP yang terbuka / tertutup.

Kami memindai rentang alamat IP pada port terbuka 3389:

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

Kami memindai rentang port TCP dari 1 hingga 1024 di server yang ditentukan:

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