Использование 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 не возвращается.
Связанные статьи:
- Test-NetConnection: сканирование открытых/закрытых портов из PowerShell (100%)
- Как в PowerShell просмотреть открытые порты. Как узнать, какая программа прослушивает порт (100%)
- Как в PowerShell просмотреть открытые порты UDP (100%)
- Как в PowerShell установить IP, маску сети, шлюз по умолчанию и DNS для сетевого интерфейса (50%)
- Как в PowerShell настроить сетевой интерфейс на использование динамичного IP адреса (DHCP) (50%)