Test-NetConnection проверява отваряне / затваряне на TCP портове от PowerShell

Най- PowerShell 4.0 (Windows 2012 R2, Windows 8.1 и по-нова версия) вграден командлет за проверка на мрежовите връзки - тест-NetConnection. С помощта на този командлет можете да проверите наличието на отдалечен сървър или мрежова услуга на него, да блокирате TCP портовете чрез защитни стени, да проверите наличността и маршрутизацията на ICMP. По същество командлет Тест-NetConnection ви позволява да замените няколко познати мрежови програми едновременно: ping, traceroute, TCP порт скенер и т.н..

Съдържание:

  • TCP Port Ping: Използване на Test-NetConnection за тестване на отворени портове и наличност на сървъра
  • Test-NetConnection в скриптове за наблюдение
  • Мрежов скенер PowerShell

Всеки администратор периодично трябва да проверява наличието на услугата на отдалечения сървър, като проверява отговора от отдалечения TCP порт (например наличието на поща или уеб сървър). Освен това всички са свикнали с това, че подобна проверка се извършва най-бързо с помощта на командата telnet. Например, за да проверите наличността на SMTP услугата на пощенския сървър (по подразбиране той отговаря на TCP порт 25), просто изпълнете командата telnet msk-msg01.winitpro.ru 25. Но като започнем от Windows 7, клиентът на telnet е посветен на отделен компонент, който трябва да бъде инсталиран отделно. Нека да видим как да извършим подобно действие в PowerShell.

Основното предимство на командлета Test-NetConnection е, че той вече е част от всички съвременни версии на Windows и не е необходимо да го инсталирате отделно. Cmdlet е част от модула. NetTCPIP (започва с PoSh v4.0).

съвет. Можете да проверите текущата инсталирана версия на PowerShell с командата $ PSVersionTable.PSVersion

Стойност 4 в колоната Основни показва, че PowerShell 4.0 е инсталиран на компютъра.

TCP Port Ping: Използване на Test-NetConnection за тестване на отворени портове и наличност на сървъра

Проверете дали TCP порт 25 (протокол SMTP) е отворен на пощенския сървър с помощта на Test-NetConnection:

Test-NetConnection -ComputerName msk-msg01 -Port 25

забележка. С помощта на командлета Test-NetConnection можете да проверите само TCP връзка; тя не е приложима за проверка на наличността на UDP портове.

В съкратена форма подобна команда изглежда така:

TNC msk-mail1 -Port 25

Нека анализираме резултата от командата:

ComputerName: msk-msg01 RemoteAddress: 10.10.1.7 RemotePort: 25 InterfaceAlias: CORP SourceAddress: 10.10.1.70 PingПревършено: True PingReplyDetails (RTT): 0 ms TcpTestSucceded: True 

Както можете да видите, командлетът разрешава името на сървъра на IP адрес, проверява ICMP отговора (подобно на ping) и наличието на TCP порта. Указаният сървър е достъпен чрез ICMP (PingSucceeded = Вярно) и 25 TCP порта също отговаря (RemotePort = 25, TcpTestSucceeded = True).

забележка.  В някои случаи може да се окаже, че PingSucceeded = False, а TcpTestSucceeded = True. Най-вероятно означава, че ICMP Ping е деактивиран на отдалечения сървър.

Cmdlet има специален параметър -CommonTCPPort, което ви позволява да посочите името на известен мрежов протокол (HTTP, RDP, SMB, WINRM).

Например, за да проверите наличието на уеб сървър, можете да използвате командата:

Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP

Или наличие на RDP порт (3389):

Test-NetConnection msk-rds1 -CommonTCPPort RDP

Можете да отпечатате всички параметри, които командлерът Test-NetConnection връща:

Test-NetConnection msk-man01 -port 445 | Формат-списък *

Ако се нуждаете само от информация за наличността на TCP порта, в по-кратка форма, проверката може да се извърши така:

TNC msk-mail1 -Port 25 -InformationLevel тих

Cmdlet върна True, което означава, че отдалеченият порт е наличен.

съвет. В предишните версии на PowerShell можете да проверите наличието на отдалечен TCP порт чрез:

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

В Windows 10 / Windows Server 2016 можете да използвате командлета Test-NetConnection, за да проследите маршрута до отдалечен сървър, като използвате -Traceroute (аналог на tracert). Използване на параметър -Хмел можете да ограничите максималния брой надежди при проверка.

Test-NetConnection msk-man01 -TraceRoute

Командлетът върна забавянето в мрежата при достъп до сървъра за милисекунди (PingReplyDetails (RTT): 41 ms) и всички IP адреси на рутери по пътя към целевия сървър.

Test-NetConnection в скриптове за наблюдение

Следващата команда ви позволява да проверите наличието на конкретен порт на много сървъри, списък на които се съхранява в текстовия файл сървъри.txt. Интересуваме се от сървъри, на които желаната услуга не отговаря:

Get-Content c: \ Distr \ servers.txt | където -NOT (Test-Netconnection $ _ -Port 25 -InformationLevel Quiet) | Format-Table -AutoSize

По същия начин можете да създадете проста система за наблюдение, която проверява наличието на сървъри и показва известие, ако един от сървърите не е наличен.

Например, можете да проверите наличието на основни услуги на всички контролери на домейни (DC списък може да бъде получен с командлета Get-ADDomainController). Нека проверим следните услуги на DC (помощната програма PortQry има подобно правило за домейн и тръстове):

  • RPC - TCP / 135
  • LDAP - TCP / 389
  • LDAP - TCP / 3268
  • DNS - TCP / 53
  • Керберос - TCP / 88
  • SMB - TCP / 445

$ Ports = "135", "389", "636", "3268", "53", "88", "445", "3269", "80", "443"
$ AllDCs = Get-ADDomainController -Filter * | Select-Object Име на хост, Ipv4address, isGlobalCatalog, Сайт, гора, OperatingSystem
ForEach ($ DC в $ AllDC)

Foreach ($ P в $ портове)
$ check = Test-NetConnection $ DC -Port $ P -WarningAction SilentlyContinue
Ако ($ check.tcpTestSucceeded -eq $ true)
Write-Host $ DC.name $ P -ForegroundColor Green -Separator "=>"
още
Write-Host $ DC.name $ P -Separator "=>" -ForegroundColor Red

Скриптът ще провери посочените TCP портове на контролерите на домейна и ако един от портовете не е наличен, подчертайте го в червено (с малки изменения можете да стартирате този скрипт на PowerShell като услуга на Windows).

Мрежов скенер PowerShell

Можете също така да внедрите прост скенер за порт и IP подмрежа, за да сканирате отдалечени сървъри или подмрежи за отворени / затворени TCP портове.

Сканираме обхвата на IP адресите на отворен порт 3389:

foreach ($ ip в 5 ... 30) Test-NetConnection -Port 3389 -InformationLevel "Подробно" 10.10.10. $ ip

Сканираме обхвата на TCP портовете от 1 до 1024 на посочения сървър:

foreach ($ порт за 1 ... 1024) If (($ a = Test-NetConnection srvfs01 -Port $ port -WarningAction SilentlyContinue) .tcpTestSucceeded -eq $ true) "TCP port $ port е отворен!"