PortQry — утилита для проверки доступности TCP/UDP портов из Windows
08.07.2020
itpro
Windows 10, Windows Server 2012 R2, Windows Server 2016, Утилиты
Комментариев пока нет
Несмотря на то, что в Windows есть множество инструментов для диагностики проблем в TCP/IP сетях (ping, telnet, pathping и т.д.), не все они позволяют в удобном виде проверить состояние или выполнить сканирование открытых сетевых портов на удаленном сервере. Утилита Portqry.exe является удобным инструментом проверки доступности TCP/UDP портов на удаленном сервере при диагностике проблем, связанных с функционированием различных сервисов, а также наличием файерволов и межсетевых экранов в TCP/IP сетях. Чаще всего утилита Portqry используется как более функциональная замена telnet, и в отличии от telnet, позволяет также проверять открытые UDP порты.
Используем PortQry для сканирования открытых UDP и TCP портов
Первая версия Portqry для Windows Server 2003 некорректно работает с более новыми ОС (Windows Server 2008 и выше), поэтому в дальнейшем была выпущена вторая версия утилиты PortQryV2. Именно эту версию и стоит использовать сегодня(скачать утилиту PortQryV2 можно по ссылке).
choco install portqry
Скачайте и распакуйте архив PortQryV2.exe. Запустите командную строку и перейдите в каталог с утилитой, например:

Чтобы проверить доступность 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).
В нашем примере команда будет такой:
PortQry.exe –n 10.1.10.6 -p both -e 53

Утилита Portqry для каждого указанного порта вернет один из трех статусов доступности:
- Listening – означает, что указанный порт доступен (принимает соединения), ответ от него получен;
- NotListening – на целевой системе не запушен процесс (служба), который бы принимал подключения на указанном порту. Portqry получила ответ ICMP «Destination Unreachable — Port Unreachable» при проверке UDP порта, или TCP пакет с флагом Reset;
- Filtered – утилита PortQry не получала ответа от указанного порта либо ответ был отфильтрован. Т.е. на целевой системе либо не слушается данный порт, либо доступ к нему ограничен файерволом или настройками системы. По умолчанию TCP порты опрашиваются 3 раза, а UDP – один.
В нашем примере, DNS сервер доступен с клиента и по TCP и по UDP.
С помощью атрибута —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 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
В утилите 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
Или вы можете проверить доступность и ответ от службы SQL Server Browser на сервере Microsoft SQL Server:
PortQry.exe -n msk-sql1 -e 1434 -p UDP
Как вы видите, утилита portqry показала не только доступность UDP порта, но и версию SQL сервера и имена запущенных на сервере SQL экземпляров и их TCP порты (один инстанс BANKDB живет на порту по умолчанию tcp 1433, второй MSSQLSERVER использует фиксированный порт из RPC диапазона 53200 — см. статью о настройке портов в SQL Server).

Можно опросить 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 ответ.
Предыдущая статья Следующая статья
Настраиваем NTP, Время, Часовой пояс
Сегодня пришлось повозиться на держателе домена (windows 2003) и корректно настроить ntp. Ниже будет информацию, которая мне помогла.
Процедура по восстановлению работоспособности сервиса w32tm
1. Находим все DC и того, кто из них PDC эмулятор
2. Проверяем доступность сервера времени с PDC эмулятора
portqry –n ntp.mydomain.ua –e 123 –p UDP Querying target system called: ntp.mydomain.ua Attempting to resolve name to IP address… Name resolved to 10.10.72.17
UDP port 123 (ntp service): LISTENING or FILTERED
Должно быть именно так “LISTENING or FILTERED”.
Эта утилита входит в комплект Support Tools для Windows 2003 Server. К сожалению, на Windows 2008 R2 она не работает.
3. В regedit открываем параметры ntp сервера
Там должен быть записан ip адрес или полное имя нашего ntp сервера и запись должна обязательно заканчиваться строкой “,0x1”. Кавычки, понятное дело, нужно убрать. Для уверенности в том, что тут нету ошибки, можно пропинговать указанный ntp-сервер.
4. Там же, следует перейти к параметру Type:
и убедиться, что там прописано NTP, а не NT5DS
5. Теперь следует проверить еще одно значение: AnnounceFlags
тут должна быть 5
6. Перезапускаем сервис времени:
7. Синхронизируемся:
8. На остальных контроллерах домена рекомендуется переустановить службу времени
Команда: «w32tm /unregister && w32tm /register» удаляет службу времени, а затем снова ее устанавливает, причем, что важно, удаляется, а затем создается заново вся ветка параметров в реестре.
9. Рекомендуется перезапустить контроллер домена, являющийся pdc эмулятором, да и все остальные тоже.
10. Если на pdc эмуляторе ошибки все равно наблюдаются, то стоит попробовать изменить формат клиентских запросов
Меняем значение с 0x1 на 0x8
11. Перезапускаем сервис времени
12. Рекомендуется проверить все политики, имеющие отношение к настройкам сервиса времени:
Default Domain Controllers group policy, Default Domain group policy и другие в которых изменены любые значения в разделе
Computer configuration/Administrative Templates /System/Windows Time service/Time Providers
Убедитесь, что все значения там в состоянии “not configured”. При необходимости, играть с параметрами следует позже.
Если что-то меняли в политике, то перезапускаем сервис времени: net stop w32time && net start w32time
13. Если так ничего не помогло, то нужно обнулить параметры сервиса времени и на pdc эмуляторе:
net stop w32time w32tm /unregister w32tm /register
После чего нужно будет настраивать все параметры заново, начиная с п.3.
Если вдруг, на этапе удаления напишет про запрет доступа, то нужно перезагрузиться.
Включение лога сервиса времени
В особо тяжелых случаях может помочь включение лога для сервиса. Для настройки этого используются три параметра в реестре по пути:
Если нижеприведенных ключей там нету, а их нету по умолчанию, то их следует создать
- FileLogSize, Type: DWORD, Data: 10000000 — максимальный размер лог-файла в байтах.
- FileLogName, Type: REG_SZ (String), Data: C:\Test\w32time_log.txt — адрес нахождения лог-файла
- FileLogEntries, Type: REG_SZ (String), Value: 0-116 — уровень детализации лога. Максимальный диапазон: 0-300.
Вместо изменения значений в реестре, можно то же самое сделать из командной строки:
Чтобы выключить логи отладки можно ввести команду:
Если Вы перенесли роль PDC Emulator на другой сервер, необходимо дополнительно выполнить настройку старого сервера командой
и перезапустить службу времени:
Первое решение проблемы «no time data was available»
Еще раз обращу внимание, что проблема была в доменных политиках.
Команда w32tm /resync выдавала ошибку
The computer did not resync because no time data was available.
Решено это было следующим образом:
- Start / Run / dsa.msc / OK.
- Right-click the Domain Controllers container and press Properties.
- Select the Group Policy tab.
- Select the Default Domain Controllers Policy and press Edit. If GPMC is implemented, press Open first.
- Expand Computer Configuration / Administrative Templates / System / Windows Time Service.
- Right-click Global Configuration Settings and press Properties.
- Select Not Configured.
- Press Apply and OK.
- Expand Windows Time Service.
- Double-click Enable Windows NTP Client.
- Select Not Configured.
- Press Apply and OK.
- Double-click Configure Windows NTP Client.
- Select Not Configured.
- Press Apply and OK.
- Double-click Enable Windows NTP Server.
- Select Not Configured.
- Press Apply and OK.
- Exit the Group Policy Editor.
- Close any open policy dialog boxes.
- Open a CMD.EXE window.
- Type gpupdate /force and press Enter.
Второе решение проблемы «no time data was available»
Во второй раз с этой же ошибкой с я столкнулся через пару лет. При попытке получить время от нашего cisco роутера, при помощи команды w32tm /resync, видел ошибку:
Sending resync command to local computer.
The computer did not resync because no time data was available.
Команда синхронизации отправлена на local computer.
Синхронизация не выполнена, поскольку нет доступных данных о времени.
При этом вышеописанные действия уже были совершены.
Служба win32time отсылала «симметрические пакеты»: в снифере wireshark я видел что windows сервер отсылает пакеты «NTP Version 3, symmetric active», но никакого ответа от CISCO не получал.
В логах службы сообщалось «No response from peer», а в логах роутера:
В этой случае мне помогла команда:
и перезапуск службы времени.
После этого в wireshark увидел нормальный обмен пакетами:
- windows сервер посылал пакеты «NTP Version 3, client»
- cisco роутер отвечал пакетами «NTP Version 3, server»
Настраиваем период синхронизации времени
Инструкция работает на компьютерах которые не включены в домен.
Переходим к редактированию реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time \TimeProviders\NtpClient\SpecialPollInterval — ключ в реестре, задает период обновления синхронизации времени в системе в секундах. Вводим в десятичном формате необходимый период.
После этого перезагружаем компьютер или вводим команду w32tm /config /update
Проверить с какой периодичностью происходит синхронизация времени:
- Кликаем по часам в панели задач
- Переходим к «изменение настроек даты и времени», вкладка «Время по Интернету»
- Жмем кнопку «Изменить параметры»
- Убеждаемся что установлена галочка возле «Синхронизировать с сервером времени в Интернете»
- Выбираем нужный сервер, жмем кнопку «Обновить сейчас» и ждем пока не появиться надпись «Время было успешно синхронизировано», если же увидели надпись «Ошибка при выполнении синхронизации» то выбираем другой сервер.
- После успешной синхронизации жмем кнопку «ОК» и на вкладке «Время по Интернету» смотрим когда будет «Следующее выполнение синхронизации»
Указание часового пояса через групповые политики
- Открываем политику для контейнера где находиться компьютер
- Переходим к Конфигурация компьютера — Настройка — Конфигурация Windows — Реестр
- Левый клик по правой белой области в области «Реестр» и выбираем пункт меню «Создать» — «Мастер реестра»
- Выбираем компьютер на котором установлен нужный часовой пояс (у меня это локальный)
- В Браузере реестра переходим к «HKLM \ System \ CurrentControlSet \ Control \ TimeZoneInformation»
- Отмечаем все ключи в этой папке и жмем «готово»
- Все теперь на локальных компьютерах автоматически будет устанавливаться необходимый часовой пояс и после перезагрузки устанавливаться правильной время
Полезные команды связанные со службой времени ntp:
- netdom query fsmo — раскажет кто PDC (главный сервер времени в домене)
- w32tm /monitor
- w32tm /config /manualpeerlist:time.windows.com,0x1 /syncfromflags:manual /reliable:yes /update — команда которая настроит ваш доменный контроллер с ролью «Эмулятора PDC» на синхронизацию с внешним источником
- w32tm /stripchart /computer:time.windows.com /samples:5 /dataonly — 5 сравнений с источником
- net time /querysntp — показывает кто является ntp сервером
- w32tm /query /peers — показывает источник, сколько времени осталось до синхронизации, режим работы, страту, интервал опроса
- w32tm /query /status — отображает индикатор помех, старту, точность, задержку корня, дисперсию, время последней успешной синхронизации, источник и интервал опроса
- net time /setsntp:192.168.1.1 — задает ntp-сервер.
- w32tm /debug /enable /file:C:\Test\w32time_log.txt /size:100000 /entries:0-300 — включаем ведение лога службой времени
- w32tm /debug /disable — отключаем логирование
- w32tm /config /update — применить/обновить конфигурацию.
- w32tm /query /configuration — полный список параметров службы
Помните что после любых изменений в конфигурации ntp-службы нужно ее перезапускать, команда:
Using PortQry to Check TCP/UDP Open Ports (Port Scanner)
Windows has many tools for diagnosing problems in TCP/IP networks ( ping , telnet , pathping , etc.). But not all of them allow you to conveniently check the status or scan opened network ports on a remote server. The Portqry.exe utility is a convenient tool to check the response of TCP/UDP ports on remote hosts to diagnose issues related to the operation of various network services and firewalls in TCP/IP networks. Most often, the Portqry utility is used as a more functional replacement for telnet command, and unlike telnet, it also allows you to check open UDP ports.
Scanning Open UDP/TCP Ports with PortQry
The first version of PortQry for Windows Server 2003 doesn’t work correctly in newer OS versions (Windows Server 2008 and newer), so the second version of the utility, PortQryV2, has been released. It is the version that you should use today (you can download PortQryV2 here).
choco install portqry
Download and extract the PortQryV2.exe archive. Run the command prompt and go to the directory with the utility, for example:

For example, to check the availability of a DNS server from a client, you need to check if 53 TCP and UDP ports are open on it. The syntax of the port check command is as follows:
PortQry -n server [-p protocol] [-e || -r || -o endpoint(s)]
- -n is the name or IP address of the server, which availability you are checking;
- -e is the port number to be checked (from 1 to 65535);
- -r is the range of ports to be checked (for example, 1:80);
- -p is the protocol used for checking. It may be TCP, UDP, or BOTH (TCP is used by default).
In our example, the command looks like this:
PortQry.exe –n 10.0.25.6 -p both -e 53

Portqry will return one of three available port states:
- Listening – means that the port is opened (accepts connections), a response has been received from it;
- NotListening – shows there isn’t any process (service) on the target system that accepts connections on the specified port. The PortQry received an ICMP response “Destination Unreachable – Port Unreachable” when checking the UDP port, or TCP packet with the Reset flag;
- Filtered – means that PortQry hasn’t received any response from the specified port or the response has been filtered. I. e., this port is not listening on the target system, or the access to it is restricted by a firewall or some system settings. By default, TCP ports are polled 3 times, and UDP is one.
In our example, the DNS server is available from the client both over TCP and UDP ports.
Using -o attribute, you can specify the sequence of ports to check their availability:
portqry -n 10.0.25.6 -p tcp -o 21,110,143
The next command scans the ranges of the well-known TCP/IP port numbers and returns the list of ports that accept the connections (works as TCP Port Scanner):
portqry -n 10.0.25.6 -r 1:1024 | find «: LISTENING»
You can save the open ports scan result to a text file:
portqry -n 10.0.25.6 -p tcp -r 20:500 -l scan_port_log.txt
The portqry utility has an interactive mode:
Now, at the PortQry Interactive Mode prompt, you can specify the name of the remote computer and port number:
node srv-lic
set port=80
To check the port on the specified server, press q and Enter.

Using the -wport and -wpid arguments, you can monitor the status of the specified port (wport), or all ports associated with the specified process (wpid) on the local host.
For example, the following command will monitor the response of the specified local port within 10 minutes (for example, RDP port 3389), and if its status changes, it will notify the administrator about this (a detailed log will be available in the LogFile.txt). To stop port monitoring, press Ctrl-C:
portqry -wport 3389 -wt 600 –l LogFile.txt -y -v
You can get information about opened ports and active TCP/UDP connections on the local computer:
Advanced Network Services Open Ports Status in PortQry
PortQry has built-in support for some network services. These are LDAP, Remote Procedure Calls (RPC), e-mail protocols SMTP/POP3/IMAP4, SNMP, FTP/ TFTP, NetBIOS Name Service, L2TP, etc. In addition to checking port availability, the tool performs protocol-specific requests to obtain the status of services.
For example, using the following command you can check the availability of the RPC endpoint mapper service (TCP/135) and get the list of names of RPC endpoints registered on the computer (including their names, UUID, the address they are bounded to, and the application they are related to).
portqry -n 10.0.25.6 -p tcp -e 135
Or you can check the availability and response from the SQL Server Browser service running on the Microsoft SQL Server:
PortQry.exe -n rome-sql01 -e 1434 -p UDP
As you can see, the PortQry tool showed not only the availability of the 1434/UDP port but also the version of the SQL server and the names of the instances running on the SQL server and their TCP ports. The first DBINVENT instance listens on the default port TCP/1433, and the second MSSQLSERVER uses a fixed TCP/53200 port from the RPC range.

You can poll the SNMP port on the device by specifying the community name:
portqry -n rome-sql1 -cn !snmp_trap! -e 161 -p udp
When checking port TCP/25 on an SMTP server, you can get the service SMTP banner:
portqry -n mx.woshub.com -p tcp -e 25
PortQuery GUI Version
Originally, the PortQry was exclusively a console (CLI) tool. To make it more convenient for the users who don’t like to use the command prompt, Microsoft has developed a simple graphic interface for portqry – PortQueryUI. You can download PortQueryUI from the official Microsoft download website: PortQueryUI.
Actually, PortQueryUI is a graphic add-on for portqry to generate a command and return the result in the graphic window.
In addition, the PortQueryUI contains several predefined set of queries to check the availability of the popular Microsoft services:
- Domain and trusts (checking ADDS services on an Active Directory domain controller)
- Exchange Server
- SQL Server
- Networking
- IP Sec
- Web Server
- Net Meeting
I think PortQueryUI doesn’t need any special comments. It should be clear if you look at the screenshot below. Enter the DNS name or IP address of the remote server, select one of the predefined services (Query predefined service), or specify the port numbers for manual port check (Manually input query ports) and click the Query button.
Listening or filtered что значит
I did PortQuery to other DCs and the result was the below.
UDP port 53 (domain service): LISTENING or FILTERED
Sending DNS query to UDP port 53.
DNS query timed out
portqry.exe -n IPaddress -e 53 -p UDP exits with return code 0x00000002.
This result mean the UDP53 port is open ?
Answers
UDP packets are smaller in size. UDP packets can not be greater then 512 bytes. So any application needs data to be transferred greater than 512 bytes require TCP in place. For example, DNS uses both TCP and UDP for valid reasons described below. Note that UDP messages are not larger than 512 Bytes and are truncated when greater than this size. DNS uses TCP for Zone transfer and UDP for name queries either regular (primary) or reverse. UDP can be used to exchange small information whereas TCP must be used to exchange information larger than 512 bytes. If a client doesn’t get response from DNS it must re-transmit the data using TCP after 3-5 seconds of interval.
The answer to your question is, DNS will uses TCP and UDP. But it depends on what type of operation the DNS is doing. Then the system will decide to use which protocol.
Just like above paragraph from MS link, that if an application needs to transfer data greater than 512 bytes then TCP is required.
Text from above paragraph: DNS uses TCP for Zone transfer and UDP for name queries