Проверьте открытые (прослушиваемые) порты с помощью PowerShell
В PowerShell вы можете использовать командлет Test-NetConnection, чтобы проверить, доступен ли (открыт) порт на удаленном компьютере. Вы можете использовать этот командлет, чтобы проверить ответ и доступность удаленного сервера или сетевой службы, проверить, заблокирован ли TCP-порт брандмауэром, проверить доступность ICMP и маршрутизацию. Фактически,
Test-NetConnectionзаменяет несколько популярных инструментов сетевого администратора, таких как
ping,
tracert,
telnet,
pathping
, сканер TCP-портов и т. д.
Проверьте открытый TCP-порт с помощью Test-NetConnection
Вы можете использовать командлет Test-NetConnection для проверки только TCP-портов. Например, чтобы проверить, открыт ли TCP-порт 25 (протокол SMTP) на удаленном почтовом сервере:
Test-NetConnection -ComputerName ny-msg01 -Port 25Примечание. Вы можете проверить только подключение TCP-порта с помощью командлета Test-NetConnection. Однако вы не можете использовать этот командлет для проверки доступности удаленных портов UDP.
Команда Test-NetConnection имеет псевдоним TNC. Сокращенная версия той же команды выглядит так:
TNC ny-msg01 -Port 25Посмотрим на результат команды:
ComputerName : ny-msg01
RemoteAddress : 10.20.1.7
RemotePort : 25
InterfaceAlias : CORP
SourceAddress : 10.20.1.79
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : True
Как видите, командлет преобразует имя сервера в IP-адрес, проверяет ответ ICMP (аналогично
ping) и проверяет ответ TCP-порта (доступность порта). Указанный сервер отвечает через ICMP (
PingSucceeded = True) и TCP-порт 25 открыт (
RemotePort=25, TcpTestSucceeded= True).
Примечание. Если команда возвращает PingSucceeded=False и TcpTestSucceeded= True, это, скорее всего, означает, что эхо-запрос ICMP (ping) отключен удаленный компьютер.
Если запустить Test-NetConnection без параметров, он проверит, подключен ли компьютер к Интернету (проверяет наличие
internetbeacon.msedge.netхозяин).
Вы можете добавить параметр -InformationLevel Detailed для отображения подробной информации при проверке удаленного TCP-порта:
TNC 192.168.32.101 -Port 3389 -InformationLevel DetailedВ командлете есть специальный параметр - CommonTCPPort, который позволяет указать имя известного сетевого протокола (HTTP, RDP, SMB, WINRM).
Например, чтобы проверить доступность веб-сервера HTTP, вы можете использовать команду:
Test-NetConnection -ComputerName active-directory.ru -CommonTCPPort HTTPИли проверьте наличие порта RDP по умолчанию (TCP/3389):
Test-NetConnection ny-rds1 -CommonTCPPort RDPВы можете перечислить все параметры, которые возвращает командлет Test-NetConnection:
Test-NetConnection ny-man01 -port 445|Format-List *
Если вам нужно только посмотреть, доступен ли порт, его можно проверить быстрее:
TNC ny-msg1 -Port 25 -InformationLevel QuietКомандлет возвращает
True, что означает, что удаленный TCP-порт открыт.
Совет. В более ранних версиях Windows PowerShell (до версии 4.0) можно было проверить доступность удаленного TCP-порта с помощью команды:
(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)Вы можете использовать командлет Test-NetConnection для отслеживания маршрута к удаленному серверу с помощью параметра -TraceRoute (аналогично встроенному
tracertкоманда в Windows). Вы можете ограничить максимальное количество прыжков во время проверки маршрута, используя параметр -Hops.
Test-NetConnection ny-man01 -TraceRouteКомандлет вернул сводную задержку доступа к сети в миллисекундах (
PingReplyDetails (RTT): 41 ms), а также все IP-адреса маршрутизаторов на пути к хосту назначения.
PowerShell: проверка открытых портов на нескольких хостах
Вы можете использовать PowerShell для проверки доступности определенного порта на нескольких удаленных компьютерах. Сохраните список имен хостов или IP-адресов в текстовом файле с именем
servers.txtНапример, ваша задача — найти хосты, у которых порт TCP/25 не отвечает или закрыт в списке серверов:
Get-Content c:\PS\list_servers.txt | where { -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)}| Format-Table -AutoSizeВы можете использовать простой скрипт PowerShell для мониторинга, который проверяет доступность удаленных серверов и отображает всплывающее уведомление, если какой-либо из серверов недоступен.
Например, вы можете проверить доступность базовых служб на всех контроллерах домена во время проверки работоспособности AD (список DC можно получить с помощью командлета Get-ADDomainController). Давайте проверим следующие службы на контроллере домена (аналогичное правило «Домен и доверие» есть в инструменте PortQry):
РПК - 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 Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}Скрипт проверяет указанные TCP-порты на контроллерах домена и, если какой-либо из портов недоступен, выделяет их красным (вы можете запустить этот PowerShell-скрипт как службу Windows).
Простой сканер портов TCP/IP в PowerShell
Вы можете использовать PowerShell для реализации простого IP-сканера, который сканирует удаленные хосты или IP-подсети на наличие открытых/закрытых TCP-портов.
Чтобы просканировать диапазон IP-адресов между 192.168.1.100 и 192.168.1.150 и отобразить компьютеры, у которых открыт порт 3389:
foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}Сканируйте диапазон TCP-портов (от 1 до 1024) на удаленном хосте:
foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}Как составить список открытых портов в Windows с помощью PowerShell
Используйте командлет Get-NetTCPConnection, чтобы получить список портов, открытых на локальном компьютере (это эквивалент PowerShell
NETSTAT). Список всех открытых TCP-портов на компьютере можно просмотреть следующим образом:
Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-TableВы также можете использовать командлет Get-NetTCPConnection для получения списка активных соединений TCP/IP.
Если вы хотите узнать, какая программа (процесс) прослушивает определенный порт на вашем компьютере, используйте следующую команду (где 443 — номер порта, который вы хотите проверить):
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path








