Использование PortQry для проверки открытых портов TCP/UDP (сканер портов)

В Windows есть множество инструментов для диагностики проблем в сетях TCP/IP (ping, telnet, pathping и т. д.). Но не все из них позволяют удобно проверять состояние или сканировать открытые сетевые порты на удалённом сервере. Утилита Portqry — удобный инструмент для проверки ответа портов TCP/UDP на удалённых узлах для диагностики проблем, связанных с работой различных сетевых служб и межсетевых экранов в сетях TCP/IP. Чаще всего утилита Portqry используется как более функциональная замена команде telnet и, в отличие от telnet, также позволяет проверять открытые порты UDP.

Сканирование открытых портов UDP/TCP с помощью PortQry

Первая версия PortQry для Windows Server 2003 некорректно работает в более новых версиях ОС (Windows Server 2008 и новее), поэтому была выпущена вторая версия утилиты, PortQryV2. Это та версия, которую вы должны использовать сегодня (вы можете скачать PortQryV2 с сайта Microsoft).

В Windows 10 вы можете установить PortQry с помощью менеджера пакетов Chokolatey с командой:

choco install portqry

Скачайте и распакуйте архив PortQryV2.exe. Запустите командную строку и перейдите в каталог с утилитой, например:

cd c:\tools\PortQryV2

Если вы установили PortQry с помощью choco, то папка с исполнимым файлом PortQry уже добавлена в PATH, поэтому для запуска программы достаточно в командной строке указать её имя:

PortQry

Например, чтобы проверить доступность DNS-сервера у клиента, нужно проверить, открыты ли на нем 53 порты TCP и UDP. Синтаксис команды проверки порта следующий:

PortQry -n server [-p протокол] [-e || -r || -o конечная точка(и)]

В этой команде:

  • -n — имя или IP-адрес сервера, доступность которого вы проверяете;
  • -e — номер порта, который нужно проверить (от 1 до 65535);
  • -r — диапазон проверяемых портов (например, 1:80);
  • -p — это протокол, используемый для проверки. Это может быть TCP, UDP или ОБА (по умолчанию используется TCP).

Примечание. В отличие от командлета PowerShell Test-NetConnection, который можно использовать для проверки доступности только портов TCP, утилита PortQry поддерживает протоколы TCP и UDP.

Связанная статья: Test-NetConnection: проверка открытых/закрытых портов из PowerShell

Для лучших результатов рекомендуется запускать PortQry с правами локального администратора.

Связанная статья: Как запустить PowerShell с правами администратора

В нашем примере команда выглядит так:

PortQry -n 8.8.8.8 -p both -e 53

Portqry вернёт одно из трёх доступных состояний порта:

  • Listening (прослушивание) — означает, что порт открыт (принимает соединения), от него получен ответ;
  • Not Listening (нет прослушивания) — показывает, что в целевой системе нет процесса (службы), который принимает соединения на указанном порту. Такое состояние показывается в случае если PortQry получил ответ ICMP «Назначение недоступно — Порт недоступен» при проверке порта UDP или пакет TCP с флагом Reset (сброс соединения);
  • Filtered (фильтруется) — означает, что PortQry не получил ответа от указанного порта или ответ был отфильтрован. Т.е. на целевой системе этот порт не прослушивается или доступ к нему ограничен брандмауэром или некоторыми настройками системы. По умолчанию порты TCP опрашиваются 3 раза, а UDP — один.

В нашем примере DNS-сервер доступен от клиента как через TCP, так и через UDP-порты.

TCP port 53 (domain service): LISTENING

UDP port 53 (domain service): LISTENING or FILTERED

Sending DNS query to UDP port 53...

UDP port 53 is LISTENING

Используя атрибут -o, вы можете указать последовательность портов для проверки их доступности:

portqry -n HackWare-Arch -p tcp -o 21,80,110,143

Следующая команда сканирует диапазоны хорошо известных номеров портов TCP/IP и возвращает список портов, которые принимают соединения (работает как сканер портов TCP):

portqry -n ya.ru -r 1:1024 | find " LISTENING"

Вы можете сохранить результат сканирования открытых портов в текстовый файл:

portqry -n 10.0.25.6 -p tcp -r 20:500 -l scan_port_log.txt

Утилита portqry имеет интерактивный режим:

portqry -i

Теперь в приглашении интерактивного режима PortQry вы можете указать имя удалённого компьютера и номер порта:

node srv-lic
set port=80

Чтобы проверить порт на указанном сервере, нажмите q и Enter.

Используя аргументы -wport и -wpid, вы можете отслеживать состояние указанного порта (wport) или всех портов, связанных с указанным процессом (wpid) на локальном хосте.

Например, следующая команда будет отслеживать ответ указанного локального порта в течение 10 минут (например, порт RDP 3389), и если его статус изменится, она уведомит об этом администратора (подробный журнал будет доступен в файле LogFile.txt). Чтобы остановить мониторинг порта, нажмите Ctrl-C:

portqry -wport 3389 -wt 600 -l LogFile.txt -y -v

Вы можете получить информацию об открытых портах и активных TCP/UDP-соединениях на локальном компьютере:

portqry -local

Состояние открытых портов расширенных сетевых служб в PortQry

PortQry имеет встроенную поддержку некоторых сетевых сервисов. Это LDAP, удалённые вызовы процедур (RPC), протоколы электронной почты SMTP/POP3/IMAP4, SNMP, FTP/TFTP, NetBIOS Name Service, L2TP и т. д. В дополнение к проверке доступности порта инструмент выполняет специфичные для протокола запросы для получения статус услуги.

Например, с помощью следующей команды вы можете проверить доступность службы сопоставления конечных точек RPC (TCP/135) и получить список имён конечных точек RPC, зарегистрированных на компьютере (включая их имена, UUID, адрес, к которому они привязаны, и приложение, к которому они относятся).

portqry -n 10.0.25.6 -p tcp -e 135

Пример вывода:

TCP port 135 (epmap service): LISTENING
Using ephemeral source port
Querying Endpoint Mapper Database…
Server’s response:
UUID: d95afe72-a6d5-4259-822e-2c84da1ddb0d
ncacn_ip_tcp:10.0.25.6 [49152]
UUID: 8975497f-93f3-4376-9c9c-fd2277495c27 Frs2 Service
ncacn_ip_tcp:10.0.25.6 [5722]
UUID: 6b5bd21e-528c-422c-af8c-a4079be4a448 Remote Fw APIs
ncacn_ip_tcp:10.0.25.6 [63006]
UUID: 12345678-1234-abcd-ef22-0123456789ab IPSec Policy agent endpoint
ncacn_ip_tcp:10.0.25.6 [63006]
UUID: 367abb81-9844-35f1-ad32-912345001003
ncacn_ip_tcp:10.0.25.6 [63002]
UUID: 50cda2a3-574d-40b3-1d66-ee4aaa33a076
ncacn_ip_tcp:10.0.25.6 [56020]
……..
UUID: 3c4428c5-f0ab-448b-bda1-6ce01eb0a6d5 DHCP Client LRPC Endpoint
ncacn_ip_tcp:10.0.25.6 [49153]
Total endpoints found: 61
==== End of RPC Endpoint Mapper query response ====
portqry.exe -n 10.0.25.6 -e 135 -p TCP exits with return code 0x00000000.

Или вы можете проверить доступность и ответ службы браузера SQL Server, работающей на Microsoft SQL Server:

PortQry.exe -n rome-sql01 -e 1434 -p UDP

Пример вывода:

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName ROME-SQL01
InstanceName MSSQLSERVER
IsClustered No
Version 15.0.2000.5
tcp 53200

ServerName ROME-SQL01
InstanceName DBINVENT
IsClustered No
Version 15.0.2000.5
tcp 1433
==== End of SQL Server query response ====
UDP port 1434 is LISTENING

Как видите, инструмент PortQry показал не только доступность порта 1434/UDP, но также версию SQL-сервера и имена экземпляров, запущенных на SQL-сервере, и их TCP-порты. Первый экземпляр DBINVENT прослушивает порт по умолчанию TCP/1433, а второй MSSQLSERVER использует фиксированный порт TCP/53200 из диапазона RPC.

Вы можете опросить порт SNMP на устройстве, указав имя сообщества:

portqry -n rome-sql1 -cn !snmp_trap! -e 161 -p udp

При проверке порта TCP/25 на SMTP-сервере вы можете получить баннер службы SMTP:

portqry -n mx.server.com -p tcp -e 25

Версия PortQuery с графическим интерфейсом

Первоначально PortQry был исключительно консольным (CLI) инструментом. Чтобы сделать его более удобным для пользователей, которым не нравится использовать командную строку, Microsoft разработала простой графический интерфейс для portqry — PortQueryUI. Вы можете загрузить PortQueryUI с официального сайта загрузки Microsoft: PortQueryUI.

Фактически, PortQueryUI — это графическая надстройка для portqry, которая генерирует команду и возвращает результат в графическом окне.

Кроме того, PortQueryUI содержит несколько предопределённых наборов запросов для проверки доступности популярных сервисов Microsoft:

  • Domain and trusts (проверка служб ADDS на контроллере домена Active Directory)
  • Exchange Server
  • SQL Server
  • Networking
  • IP Sec
  • Веб сервер
  • Net Meeting

Думаю, PortQueryUI в особых комментариях не нуждается. Всё должно быть понятно, если вы посмотрите на скриншот ниже. Введите имя удалённого хоста или IP-адрес удалённого сервера, выберите одну из предопределённых служб (Query predefined service) или укажите номера портов для ручной проверки портов (Manually input query ports) и нажмите кнопку «Query».

Возможные коды возврата в PortQueryUI (выделены на скриншоте):

  • 0 (0x00000000) — соединение установлено успешно и порт доступен;
  • 1 (0x00000001) — указанный порт недоступен или отфильтрован;
  • 2 (0x00000002 — нормальный код возврата при проверке доступности UDP-соединения, поскольку ответ ACK не возвращается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *