Всем привет.
Каждому сетевому администратору периодически приходится проверять доступность службы на удаленном сервере. Это выполняется путем проверки ответа от удаленного порта. Традиционно такую проверку быстрее всего выполнить с помощью команды telnet. Например, для проверки доступности SMTP службы (по умолчанию ожидается ответ от 25-го порта) на почтовом сервере достаточно выполнить команду telnet mailserver 25.
Но начиная с Windows 7 клиент telnet выделен в отдельный компонент, который нужно устанавливать отдельно. В сети масса инкструкций на эту тему, но я право не понимаю зачем им следовать если можно просто подкинуть telnet.exe в папку Windows и пользоваться.
Еще один бесплатный способ проверки удаленного порта - это использование утилиты portqry.exe от Microsoft. Хотя сама Microsoft ее особо не рекламирует.
Простой пример проверки:
portqry -n mailserver -e 25
или
portqry -n 10.0.0.1 -e 25 -p TCP -i
Эта утилита имеет вариант с интерфейсом Port Query UI tool (portqueryui.exe). This is a tool to query open ports on remote or local machine. Рortqueryui.exe только надстройка, она использует для своей работы ту же portquery.exe.
И конечно наша любимая PowerShell тоже умеет делать это. Посмотрим, как выполнить аналогичное действие в PowerShell. Тут все просто.
Для начала вспомним что есть такой командлет как Test-Connection, который используется для отправки пакетов эхо-запроса ICMP (ping) одному или нескольким удаленным хостам.
Это простой и быстрый способ проверки, достпен ли хост. Для пинга одного компьютера, вы просто можете набрать:
Test-Connection -ComputerName localhost
Командлет Test-Connection по умолчанию отправляет 4 эхо-запроса. Вы можете изменить это значение на 1, указав параметр Count:
Test-Connection -ComputerName localhost -Count 1
Попытка пропинговать отсутствующий компьютер приведет к ошибке:
Test-Connection -ComputerName MyPC -Count 1
Test-Connection : Testing connection to computer ‘MyPC’ failed: No such host is known
Если вы не хотите, чтобы сообщение об ошибке отображалось, вы можете установить параметр ErrorAction в значение SilentlyContinue (или использовать структуру Try/Catch для обработки ошибок):
Test-Connection -ComputerName MyPC -Count 1 -ErrorAction SilentlyContinue
Один автор умной книги по PowerShell утверждал что Test-Connection отработает даже по тем хостам у которых ответ по Ping-у запрещен. Я не проверял.
Иначе, стоп, но нам же нужно проверить 25й ТСР-порт.
Есть в PowerShell готовый командлет и для этого: Test-NetConnection который появился в PowerShell 4.0 (Windows 2012 R2, Windows 8.1 и выше). Входит он в модуль NetTCPIP.
Проверим, открыт ли порт TCP 25 на почтовом сервере с помощью Test-NetConnection:
Test-NetConnection -ComputerName mailserver -Port 25
Ответ может быть таким
ComputerName : mailserver
RemoteAddress : 10.168.1.7
RemotePort : 25
InterfaceAlias : CORPS
SourceAddress : 10.168.1.45
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : True
RemoteAddress : 10.168.1.7
RemotePort : 25
InterfaceAlias : CORPS
SourceAddress : 10.168.1.45
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : True
Т.е. Test-NetConnection одновременно проверяет доступность хоста и по Ping.
Если нужна только информация по доступности порта, в более лаконичном виде проверка может быть выполнена так:
TNC mailserver -Port 25 -InformationLevel Quiet
При доступности порта ответом будет True.
TNC mailserver -Port 25 -InformationLevel Quiet
При доступности порта ответом будет True.
С помощью командлета Test-NetConnection можно проверить только TCP соединение, для проверки доступности UDP порта он не применим.
Мы можем проверить порты SMB, HTTP, RDP и PING c ключом -CommonTCPPort:
Test-NetConnection CorpWebServer -CommonTCPPort HTTP
Ответ может быть таким
ComputerName : CorpWebServer
RemoteAddress : 10.168.1.10
RemotePort : 80
InterfaceAlias : CORPS
SourceAddress : 10.168.1.45
PingSucceeded : False
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : True
RemoteAddress : 10.168.1.10
RemotePort : 80
InterfaceAlias : CORPS
SourceAddress : 10.168.1.45
PingSucceeded : False
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : True
По умолчанию командлета Test-NetConnection в Windows 7 нет. Ранее я писал что можно поднять версию PowerShell для Windows 7 до 4.0. Однако даже в этом случае командлет Test-NetConnection у нас не появится. Так как модуль NetTCPIP надо импортировать дополнительно.
Например с ПК где установленa Windows 8.1:
$rsession = New-PSSession -ComputerName MyPCWin81
Import-Module NetTCPIP -PSSession $rsession
Import-Module NetTCPIP -PSSession $rsession
Или вот как пишут здесь. Хотя есть сомнения, так как версия PowerShell 5.0 в Windows 7 не поддерживается. Надо бы проверить.
Успехов.
No comments:
Post a Comment
А что вы думаете по этому поводу?