Как проверить доступен ли порт?
Традиционный способ.
Первое, что приходит на ум — использовать «старый добрый» telnet.
Для примера проверять будем доступность менеджера кластера:
C:\>telnet ks-app-02 2141
Получили в ответ «кракозябру» — значит доступ есть
Осталось выйти сначала из кракозябры по ‘CTRL+]’ и затем из самого telnet-а
Microsoft Telnet> q
Загвоздка в том, что в большинстве современных Windows-систем telnet-клиент не установлен по-умолчанию, и требуется доустанавливать этот компонент. Что не всегда возможно, т.к. компьютер может быть и не своим и/или нет соответствующих прав.
Способ без инсталляции программ.
Хотелось бы иметь какой-то инструмент, не требующий установки, портабельный, чтобы можно было его просто скопировать и пользоваться, а при необходимости, легко удалить после использования.
В качестве такого инструмента удобно использовать утилиту psping от Sysinternals.
Эту утилиту можно скачать как отдельно, так и в составе пакета SysinternalsSuite, который содержит множество других необходимых инструментов.
C:\>psping ks-app-02:2141
Еще один портабельный инструмент, позволяющий решить задачу:
tcping (https://elifulkerson.com/projects/tcping.php)
C:\>tcping ks-app-02 2141
Встроенный инструментарий.
Однако есть возможность обойтись и совсем без сторонних утилит. В Windows есть встроенный инструмент, позволяющий выполнить такую проверку.
Это powershell-командлет Test-NetConnection
PS C:\> Test-NetConnection ks-app-02 -Port 2141
В ответе нас интересует последняя строка — TcpTestSucceeded: True. В данном случае — доступ есть.
Также, в ответе может содержаться еще значение PingSucceeded — это «обычный» ping по ICMP.
У командлета есть очень удобный для запоминания и быстрого ввода альяс tnc, а также ключ позволяющий ограничить вывод только результатом.
C:\>tnc ks-app-02 -Port 2141 -InformationLevel Quiet
Разумеется, запускать командлет необходимо в окне PowerShell, а не «командной строки».
Хотя, из командной строки тоже можно, вызвав PowerShell:
C:\>powershell tnc ks-app-02 -port 2141
Следует заметить, что командлет доступен в версиях PowerShell от 4.0 и выше, т.е. начиная с Windows Server 2012 R2 и Windows 8.1
Документация: Test-NetConnection (Microsoft, eng)
Заключение
Заметка не предполагает исчерпывающего списка и анализа всех возможных способов. Приведены три варианта, которые можно было бы охарактеризовать как «традиционный», «портабельный» и «встроенный». Каждый из них имеет свою область применения, в зависимости от системы, на которой необходимо выполнить проверку.
Полагаю, опытные администраторы смогут добавить еще несколько способов. Каким способом пользуетесь Вы и почему?