2018-12-16

PowerShell: Проверка TCP-портов

Как проверить доступность TCP-порта с помощью PowerShell?



Содержание




Проверка TCP-портов


PowerShell позволяет выполнить проверку доступности TCP-портов с помощью встроенного командлета Test-NetConnection. Пример команды:

# Проверка доступности порта TCP 80 для хоста www.bootdev.ru
Test-NetConnection www.bootdev.ru -Port 80


Успешность выполнения команды охарактеризовывает параметр TcpTestSucceeded. Значение True свидетельствует об успешности проверки, False об неудаче. В данном случае, я проверял существующий домен на открытость TCP-порта 80 (HTTP). Попробуем теперь выполнить аналогичную проверку для заведомо несуществующего хоста:

Test-NetConnection no.bootdev.ru -Port 80


Вывод команды изменился. Параметр TcpTestSucceeded отсутствует. Появился новый параметр, PingSucceeded со значением False, при проверке портов, всегда будет равен False.

На самом деле информация о параметре TcpTestSucceeded существует, просто она не попала в вывод. Осуществить вывод всех параметров можно следующей командой:

Test-NetConnection no.bootdev.ru -Port 80 | Format-List *


Вывод стал информативнее. Параметр TcpTestSucceeded снова на месте, но уже со значением равным False. Это значит, что проверяемый TCP-порт закрыт.


Использование в Cкриптах


Командная оболочка PowerShell является объектно ориентированной. То есть, любое возвращаемое значение, от любого командлета, является объектом. Следовательно, поле TcpTestSucceeded можно использовать при написании условий. Пример:

if ((Test-NetConnection www.bootdev.ru -Port 80).TcpTestSucceeded) {echo "Порт открыт :)"} else {echo "Порт закрыт :("}
if ((Test-NetConnection no.bootdev.ru -Port 80).TcpTestSucceeded) {echo "Порт открыт :)"} else {echo "Порт закрыт :("}


Как было сказано ранее, поле TcpTestSucceeded не единственное доступное для использования. Полезным может оказаться и поле PingSucceeded, указывающее на успешность пинга.

Единственное замечание по этим полям. При проверке портов, поле PingSucceeded всегда будет False. При выполнении командлета Test-NetConnection без параметра -Port, поле TcpTestSucceeded также, всегда будет равно False.


Итог


В статье было рассмотрено: Как выполнить проверку TCP-порта в PowerShell?

Комментариев нет :

Отправить комментарий