Най- PowerShell 4.0 (Windows 2012 R2, Windows 8.1 и по-нова версия) вграден командлет за проверка на мрежовите връзки - тест-NetConnection. С помощта на този командлет можете да проверите наличието на отдалечен сървър или мрежова услуга на него, да блокирате TCP портовете чрез защитни стени, да проверите наличността и маршрутизацията на ICMP. По същество командлет Тест-NetConnection
ви позволява да замените няколко познати мрежови програми едновременно: ping, traceroute, TCP порт скенер и т.н..
Съдържание:
- TCP Port Ping: Използване на Test-NetConnection за тестване на отворени портове и наличност на сървъра
- Test-NetConnection в скриптове за наблюдение
- Мрежов скенер PowerShell
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
В съкратена форма подобна команда изглежда така:
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
).
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 е отворен!"