В процессе разворачивания и эксплуатации информационных систем часто требуется проверка доступности порта того или иного ресурса. Это может быть сервер приложений 1С, к которому не удается подключиться пользователю. Или же это внешний веб-ресурс, к которому происходит обращение. Или что-то еще.
Для проверки доступности самого сервера обычно используется команда ping. Но, в силу того, что данная утилита работает с ICMP-пакетами, для конкретного порта проверить доступ таким образом невозможно. Кроме того, на ресурсе в целях безопасности может быть заблокирован ответ на ICMP-пакеты, соответственно, результат доступности нельзя считать однозначным, если ресурс "не пингуется".
Как проверить доступен ли порт?
Традиционный способ.
Первое, что приходит на ум — использовать "старый добрый" 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)
Заключение
Заметка не предполагает исчерпывающего списка и анализа всех возможных способов. Приведены три варианта, которые можно было бы охарактеризовать как "традиционный", "портабельный" и "встроенный". Каждый из них имеет свою область применения, в зависимости от системы, на которой необходимо выполнить проверку.
Полагаю, опытные администраторы смогут добавить еще несколько способов. Каким способом пользуетесь Вы и почему?
Спасибо за psping и powershell tnc!
https://www.microsoft.com/en-US/download/details.aspx?id=24009 . Легко скачивается. Не требует установки. Командная строка или графический интерфейс. Можно тестировать набор портов.
Сам чаще всего пользуюсь PortQryUI —
(1) Александр, спасибо и Вам!
Протестировал, дейтвительно удобная штука. Возможность тестирования по списку или диапазону портов — просто клад!
не благодарите…
(3) Сергей, я прямо ждал, что nmap будет упомянут.
Насколько я понимаю, ему требуется инсталляция. По крайней мере в Windows. Или есть портабельный?
(4) предположу, что если его статически слинковать, то он вполне себе портабельный будет — он же опенсорсный и Вы можете творить с ним что угодно…
(4) Не nmap конечноhttps://portscaner.ru/tools-open-local-ports но программы использующие порты покажет и портабельна!
tcping
Аналог стандартного ping-а, но для tcp.
Показать
1) очень полезно написано 🙂
«в ответ «кракозябру» — значит доступ есть»
крякозябру я видел раньше, но не думал что это «доказательство»
2) а как можно свой компьютер проверить ?
(без постороннего компьютера)
на наличие открытых портов 1540-15хх
ато отладка в 1С не работала без портов,
чтоб сисадминам в морду тыкнуть 🙂
(8)
Свой компьютер проверяется точно так же, как и любой другой. Только вместо имени удаленного компьютера подставляете «localhost» или имя, которое Вам отобразит команда hostname.
Например:
psping localhost:1540
или
powershell tnc mycompname -p 1540
Вопрос только в том, что такая проверка даст. Она ведь осуществляется «изнутри». Поэтому внешние ограничения (на уровне сетевой инфраструктуры) на неё не влияют.
При этом, нужно учитывать, что на проверяемом порту что-то должно работать, чтобы был положительный ответ.
Т.е. если установлен сервер 1С предприятия, но служба не запущена, то результат проверки будет такой же как и при недоступном порту.
Это относится ко всем проверкам, а не только локального компьютера.
Обычно таким образом проверяется не доступность, а именно работоспособность какой-то службы, например веб-сервера.