PortQry - утиліта для перевірки доступності TCP / UDP портів з Windows

Незважаючи на те, що в Windows є безліч інструментів для діагностики проблем в TCP / IP мережах (ping, telnet, pathping і т.д.), не всі вони дозволяють в зручному вигляді перевірити стан або виконати сканування відкритих мережевих портів на віддаленому сервері. утиліта Portqry.exe є зручним інструментом перевірки доступності TCP / UDP портів на віддаленому сервері при діагностиці проблем, пов'язаних з функціонуванням різних сервісів, а також наявністю файерволов і міжмережевих екранів в TCP / IP мережах. Найчастіше утиліта Portqry використовується як більш функціональна заміна telnet, і на відміну від telnet, дозволяє також перевіряти відкриті UDP порти.

зміст:

  • Використовуємо PortQry для сканування відкритих UDP і TCP портів
  • Розширений статус мережевих служб в PortQry
  • Графічний інтерфейс для Portqry

Використовуємо PortQry для сканування відкритих UDP і TCP портів

Перша версія Portqry для Windows Server 2003 некоректно працює з більш новими ОС (Windows Server 2008 і вище), тому в подальшому була випущена друга версія утиліти PortQryV2. Саме цю версію і варто використовувати сьогодні (завантажити утиліту PortQryV2 можна за посиланням).

У Windows 10 ви можете встановити portqry через менеджер пакетів Chokolatey:

choco install portqry

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

cd c: \ tools \ PortQryV2

Щоб перевірити доступність DNS сервера з клієнта, необхідно перевірити чи відкриті на ньому 53 порти TCP і UDP. Формат команди перевірки доступності портів на віддаленому сервері наступний:

PortQry -n server [-p protocol] [-e || -r || -o endpoint (s)]

-n - ім'я або IP адреса сервера, доступ до якого потрібно перевірити
-e -  номер порту для перевірки (від 1 до 65535)
-r - діапазон портів для перевірки (наприклад, 1:80)
-p - за яким протоколом виконується перевірка. Це може бути TCP, UDP або BOTH (за замовчуванням використовується TCP).

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

У нашому прикладі команда буде такою:

PortQry.exe -n 10.1.10.6 -p both -e 53

Утиліта Portqry для кожного зазначеного порту поверне один з трьох статусів доступності:

  • Listening - означає, що вказаний порт доступний (приймає з'єднання), відповідь від нього отримано;
  • Not Listening - на цільовий системі не запущено процес (служба), який би брав підключення на зазначеному порту. Portqry отримала відповідь ICMP «Destination Unreachable - Port Unreachable» при перевірці UDP порту, або TCP пакет з прапором Reset;
  • Filtered - утиліта PortQry не отримувала відповіді від зазначеного порту або відповідь була відфільтрований. Тобто на цільовій системі або не слухається даний порт, або доступ до нього обмежений файерволом або настройками системи. За замовчуванням TCP порти опитуються 3 рази, а UDP - один.

У нашому прикладі, DNS сервер доступний з клієнта і по TCP і по UDP.

TCP port 53 (domain service): LISTENING UDP port 53 (domain service): LISTENING

За допомогою атрибута -o, можна вказати послідовність портів, яких потрібно просканувати:

portqry -n 10.1.10.6 -p tcp -o 21,110,143

Наступна команда виконає сканування діапазону "низьких" TCP портів і поверне список доступних портів, які приймають підключення (утиліта працює в режимі сканера відкритих портів):

portqry -n 10.1.10.6 -r 1: 1024 | find ": LISTENING"

Можна зберегти результати сканування відкритих портів в текстовий файл:

portqry -n 10.1.10.6 -p tcp -r 20: 500 -l logfile.txt

В утиліті portqry є інтерактивний режим:

portqry -i

Тепер в запрошенні PortQry Interactive Mode можете вказати ім'я віддаленого комп'ютера і порт.

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.exe -local

Розширений статус мережевих служб в PortQry

В утиліті PortQry є вбудована підтримка деяких мережевих служб. Це LDAP, Remote Procedure Calls (RPC), поштові протоколи (SMTP, POP3 та IMAP4), SNMP, FTP / TFTP, NetBIOS Name Service, L2TP і інші. Крім перевірки доступності цих стандартних портів цих служб, утиліта виконує специфічні для конкретного протоколу запити для отримання статусу сервісу.

Наприклад, за допомогою наступного запиту ми не тільки перевіримо доступність служби RPC endpoint mapper (TCP / 135), але і отримаємо список імен зареєстрованих в системі кінцевих точок RPC (в тому числі їх ім'я, UUID, адреса до якого вони прив'язані і додаток, з яким вони пов'язані).

portqry -n 10.1.10.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.1.10.6 [49152] UUID: 897e215f-93f3-4376-9c9c- fd2277495c27 Frs2 Service ncacn_ip_tcp: 10.1.10.6 [5722] UUID: 6b5bd21e-528c-422c-af8c-a4079be4fe48 Remote Fw APIs ncacn_ip_tcp: 10.1.10.6 [63006] UUID: 12345678-1234-abcd-ef22-0123456789ab IPSec Policy agent endpoint ncacn_ip_tcp: 10.1.10.6 [63006] UUID: 367abb81-9844-35f1-ad32-91f038001003 ncacn_ip_tcp: 10.1.10.6 [63002] UUID: 50abc2a3-574d-40b3-1d66-ee4fd5fba076 ncacn_ip_tcp: 10.1.10.6 [56020] ... UUID: 3c4428c5-f0ab -448b-bda1-6ce01eb0a6d5 DHCP Client LRPC Endpoint ncacn_ip_tcp: 10.1.10.6 [49153] Total endpoints found: 61 ==== End of RPC Endpoint Mapper query response ==== portqry.exe -n 10.1.10.6 -e 135 - p TCP exits with return code 0x00000000.

Або ви можете перевірити доступність і відповідь від служби SQL Server Browser на сервері Microsoft SQL Server:

PortQry.exe -n msk-sql1 -e тисячі чотиреста тридцять чотири -p UDP

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

Як ви бачите, утиліта portqry показала не тільки доступність UDP порту, але і версію SQL сервера і імена запущених на сервері SQL примірників і їх TCP порти (один інстанси BANKDB живе на порту за замовчуванням tcp 1433, другий MSSQLSERVER використовує фіксований порт з RPC діапазону 53200 ).

Можна опитати SNMP порт на пристрої, вказавши назву community:
portqry -n host2 -cn! secure! -e 161 -p udp

При перевірці 25 порту на SMTP сервері можна отримати банер вітання сервера:

portqry -n domain.mail.ru -p tcp -e 25

Графічний інтерфейс для Portqry

Спочатку утиліта Portqry була виключно консольним інструментом. Для зручності користувачів, які не дружать з командним рядком, Microsoft розробила простий графічний інтерфейс для утиліти portqry - PortQueryUI. Завантажити PortQueryUI можна з сайту завантажень Microsoft http://download.microsoft.com/download/3/f/4/3f4c6a54-65f0-4164-bdec-a3411ba24d3a/PortQryUI.exe

PortQueryUI по суті являє собою графічну надбудову над portqry для формування командного рядка, і повернення результату в графічне вікно.

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

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

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

Можливі коди відповіді в PortQueryUI (виділено на скріншоті):

  • 0 (0x00000000) - означає, що з'єднанні успішно встановлено і порт перебуває за межами покриття
  • 1 (0x00000001) - вказаний порт недоступний або відфільтрований;
  • 2 (0x00000002 - це нормальний код повернення при перевірці UDP підключення, тому що не повертається ACK відповідь.