PowerShell: системное администрирование и программирование
В Windows есть множество инструментов для диагностики проблем в сетях TCP/IP (ping, telnet, pathping и т. д.). Но не все из них позволяют удобно проверять состояние или сканировать открытые сетевые порты на удалённом сервере. Утилита Portqry — удобный инструмент для проверки ответа портов TCP/UDP на удалённых узлах для диагностики проблем, связанных с работой различных сетевых служб и межсетевых экранов в сетях TCP/IP. Чаще всего утилита Portqry используется как более функциональная замена команде telnet и, в отличие от telnet, также позволяет проверять открытые порты UDP.
Первая версия PortQry для Windows Server 2003 некорректно работает в более новых версиях ОС (Windows Server 2008 и новее), поэтому была выпущена вторая версия утилиты, PortQryV2. Это та версия, которую вы должны использовать сегодня (вы можете скачать PortQryV2 с сайта Microsoft).
В Windows 10 вы можете установить PortQry с помощью менеджера пакетов Chokolatey с командой:
Скачайте и распакуйте архив PortQryV2.exe. Запустите командную строку и перейдите в каталог с утилитой, например:
Если вы установили PortQry с помощью choco, то папка с исполнимым файлом PortQry уже добавлена в PATH, поэтому для запуска программы достаточно в командной строке указать её имя:
Например, чтобы проверить доступность DNS-сервера у клиента, нужно проверить, открыты ли на нем 53 порты TCP и UDP. Синтаксис команды проверки порта следующий:
- -n — имя или IP-адрес сервера, доступность которого вы проверяете;
- -e — номер порта, который нужно проверить (от 1 до 65535);
- -r — диапазон проверяемых портов (например, 1:80);
- -p — это протокол, используемый для проверки. Это может быть TCP, UDP или ОБА (по умолчанию используется TCP).
Примечание. В отличие от командлета PowerShell Test-NetConnection, который можно использовать для проверки доступности только портов TCP, утилита PortQry поддерживает протоколы TCP и UDP.
Для лучших результатов рекомендуется запускать PortQry с правами локального администратора.
В нашем примере команда выглядит так:
Portqry вернёт одно из трёх доступных состояний порта:
- Listening (прослушивание) — означает, что порт открыт (принимает соединения), от него получен ответ;
- Not Listening (нет прослушивания) — показывает, что в целевой системе нет процесса (службы), который принимает соединения на указанном порту. Такое состояние показывается в случае если PortQry получил ответ ICMP «Назначение недоступно — Порт недоступен» при проверке порта UDP или пакет TCP с флагом Reset (сброс соединения);
- Filtered (фильтруется) — означает, что PortQry не получил ответа от указанного порта или ответ был отфильтрован. Т.е. на целевой системе этот порт не прослушивается или доступ к нему ограничен брандмауэром или некоторыми настройками системы. По умолчанию порты TCP опрашиваются 3 раза, а UDP — один.
В нашем примере DNS-сервер доступен от клиента как через TCP, так и через UDP-порты.
Используя атрибут -o, вы можете указать последовательность портов для проверки их доступности:
Следующая команда сканирует диапазоны хорошо известных номеров портов TCP/IP и возвращает список портов, которые принимают соединения (работает как сканер портов TCP):
Вы можете сохранить результат сканирования открытых портов в текстовый файл:
Утилита portqry имеет интерактивный режим:
Теперь в приглашении интерактивного режима PortQry вы можете указать имя удалённого компьютера и номер порта:
Чтобы проверить порт на указанном сервере, нажмите q и Enter.
Используя аргументы -wport и -wpid, вы можете отслеживать состояние указанного порта (wport) или всех портов, связанных с указанным процессом (wpid) на локальном хосте.
Например, следующая команда будет отслеживать ответ указанного локального порта в течение 10 минут (например, порт RDP 3389), и если его статус изменится, она уведомит об этом администратора (подробный журнал будет доступен в файле LogFile.txt). Чтобы остановить мониторинг порта, нажмите Ctrl-C:
Вы можете получить информацию об открытых портах и активных TCP/UDP-соединениях на локальном компьютере:
Состояние открытых портов расширенных сетевых служб в PortQry
PortQry имеет встроенную поддержку некоторых сетевых сервисов. Это LDAP, удалённые вызовы процедур (RPC), протоколы электронной почты SMTP/POP3/IMAP4, SNMP, FTP/TFTP, NetBIOS Name Service, L2TP и т. д. В дополнение к проверке доступности порта инструмент выполняет специфичные для протокола запросы для получения статус услуги.
Например, с помощью следующей команды вы можете проверить доступность службы сопоставления конечных точек RPC (TCP/135) и получить список имён конечных точек RPC, зарегистрированных на компьютере (включая их имена, UUID, адрес, к которому они привязаны, и приложение, к которому они относятся).
Или вы можете проверить доступность и ответ службы браузера SQL Server, работающей на Microsoft SQL Server:
Как видите, инструмент PortQry показал не только доступность порта 1434/UDP, но также версию SQL-сервера и имена экземпляров, запущенных на SQL-сервере, и их TCP-порты. Первый экземпляр DBINVENT прослушивает порт по умолчанию TCP/1433, а второй MSSQLSERVER использует фиксированный порт TCP/53200 из диапазона RPC.
Вы можете опросить порт SNMP на устройстве, указав имя сообщества:
При проверке порта TCP/25 на SMTP-сервере вы можете получить баннер службы SMTP:
Онлайн
ИВИТ Сканирование портов
Очень простой русскоязычный онлайн сканер портов, который позволит просканировать доступные из интернета ресурсы. Для этого, достаточно знать адрес хоста, который будет сканироваться, выбрать нужные порты (на выбор доступны варианты из предустановленных популярных портов и указания своих), а так же выбрать протокол TCP или UDP (можно выбрать оба). Результат сканирования будет отображен в виде таблицы.
Hacker Target
Данный ресурс позволяет просканировать доступный в интернете хост на наличие открытых 10 популярных портов. Для работы используется nmap (про который мы еще напишем ниже), вывод результата так же отображается в виде консольного вывода этой программы.
Pentest Tools
Сервис сканирования портов на английском языке, который позволяет провести тестирование на открытые порты TCP, с использованием программы nmap. Процесс сканирования nmap будет отображен в виде обычного консольного вывода данной программы, после чего будет сформирована таблица с результатами.
Что означает результат проверки порта?
Подключиться к этому порту в данный момент невозможно. Вредоносные программы или злоумышленники не могут воспользоваться данным портом для атаки или получения конфиденциальной информации (Вам поможет материал 4 лучших бесплатных антивируса для Windows 10). Если все неизвестные порты имеют статус «закрыт», то это означает хороший уровень защищенности компьютера от сетевых угроз.
Если порт должен быть открытым, то это плохой показатель. Причиной недоступности порта может быть неверная настройка сетевого оборудования или программного обеспечения. Проверьте права доступа программ к сети в файерволе. Удостоверьтесь, что порты проброшены через роутер.
Результат «порт закрыт» также можно получить, если порт открыт, но время отклика вашего компьютера в сети (пинг) завышено. Подключится к порту в таких условиях практически не представляется возможным.
К данному порту можно произвести подключение, он доступен из интернета. Если это то, что требуется — прекрасно.
Если неизвестна причина, по которой порт может быть открытым, то стоит проверить запущенные программы и сервисы. Возможно, некоторые из них вполне легально используют этот порт для работы с сетью. Существует вероятность, что порт открыт в следствии работы несанкционированного/вредоносного программного обеспечения (Вам поможет материал Как включить защиту от потенциально нежелательных программ в Windows Defender). В таком случае рекомендуется проверить компьютер антивирусом.
Что за порты? Для чего они нужны?
Порты, которые проверяет PortScan.ru — это не физические, а логические порты на компьютере или сетевом устройстве.
В случае, если программа или служба планирует работать с сетью, она открывает порт с уникальным номером, через который она может работать с удаленными клиентами/серверами. Фактически, сетевая программа резервирует для себя определенное число, которое позволяет понять, что пришедшие данные предназначаются именно этой программе.
На человеческом языке это звучало бы примерно так: «Я, программа-сервер, открываю порт номер 1234. Если по сетевому кабелю придут данные с номером порта 1234 — это мне. «
Какие номера портов может открывать программа?
Порты идентифицируются номерами от 0 до 65535 включительно. Любой другой порт открыть нельзя, соответственно и проверить тоже. Это ограничения TCP/IP протокола.
Стоит отметить, что клиентская программа всегда должна знать номер порта, к которому ей нужно подключаться на сервере или другом удаленном сетевом устройстве. По этой причине для наиболее популярных протоколов зарезервированы порты в диапазоне от 0 до 1023.
Так, например, осуществляя серфинг в интернете, ваш браузер подключается к 80 порту на удаленном сервере, на котором находится сайт. В ответ браузер получает набор кода и данных, который скачивает и отображает в виде веб-страницы.
Для каких ситуаций возможна проверка открытых портов?
Проверка открытых портов возможна, если вашему компьютеру присвоен внешний IP адрес. Подробнее об этом вы можете узнать у своего интернет-провайдера.
Стоит учесть, что если ваш компьютер подключен к интернету не напрямую, а через роутер (маршрутизатор), то результаты проверки относятся именно к роутеру. Проверить состояние порта для компьютера внутри такой подсети возможно только при наличии проброса портов.
Что такое проброс портов?
Проброс портов (Port Forwarding, иногда Virtual Servers) — специальная настройка на роутере, позволяющая перенаправить внешние запросы (из интернета) на компьютеры локальной сети. По сути это способ указать, на какой локальный компьютер пересылать данные и запросы подключения, пришедшие на определенный порт.
Допустим, у вас дома игровой или веб-сервер, подключенный через роутер к интернету. Все компьютеры, подключенные к этому же роутеру, находятся в одной сети, поэтому смогут подключиться к данному серверу. Однако снаружи, из интернета, подключиться к вашему серверу без проброса портов уже не получится.
Если ваш компьютер подключен к интернету напрямую (без роутера/маршрутизатора), то выполнять проброс портов не требуется. Все ваши открытые порты должны быть доступны из интернета (естественно, при наличии выделенного IP).
Как узнать, какие порты открыты на компьютере?
Для Windows: Пуск → «cmd» → Запустить от имени администратора → netstat -bn
Для Linux: В терминале выполнить команду: «ss -tln»
Как закрыть порт?
Прежде всего надо устранить причину — запущенную программу или службу, которая открыла этот порт; ее надо закрыть/остановить. Если причина открытого порта не ясна — проверьте компьютер антивирусом, удалите лишние правила проброса портов на роутере и установите продвинутый файервол (Firewall).
Как ещё можно проверить, открыт ли порт
Если первый и второй метод по каким-либо причинам не подходит, то можно подойти к проблеме иначе: существует огромное количество различных полезных программ, которые платно или бесплатно предоставят исчерпывающую информацию по имеющимся на компьютере портам. Вместе с тем в интернете можно найти и довольно простые как в плане использования, так и по выдаваемой информации утилиты. Примером таких приложений могут служить Free Port Scanner и CurrPorts — обе они бесплатны.
Риск безопасности из-за открытых портов:
Большинство подозрительного программного обеспечения ведет себя как служба, ожидающая соединения от удаленного злоумышленника, чтобы предоставить ему данные или полномочия над машиной.
Наиболее распространенная практика обеспечения безопасности – закрывать неиспользуемые порты на частных машинах, чтобы заблокировать известный доступ к любой службе, которая может продолжать работать на ПК без информации клиента, независимо от того, была ли неправильно настроена авторизованная служба или из-за подозрительного программного обеспечения.
Удаленный компьютер
Для этой цели используется все та же командная строка. Только теперь необходимо ввести три элемента: «telnet – ІР-адрес – порт». Нажимаем на клавишу ввода. Если не появляется запись Could not open», то это значит, что он открыт. В случаях, когда она выводится, порт закрыт. Если нет времени пробивать все значения, но одновременно необходимо проверить, открыт ли порт, то для этой цели можно использовать утилиты. Кстати, команда telnet позволяет рассматривать и локальный компьютер как удаленный, работая с ним так, сложно он находится на расстоянии. Каков механизм подобной работы? В таком случае запись в командной строке выглядит как «telnet – localhost – порт».
Способ 3: программа Portforward Network Utilities
Данное ПО создано для проведения диагностики и обнаружения закрытых/открытых портов, а также помощи в их открытии.
-
Для начала перейдите на официальный сайт программы в раздел загрузок, откуда можно скачать исполняемый файл установщика.
Проверка открытых портов с помощью NirSoft CurrPorts
Если командная строка кажется вам сложной, более простым вариантом является использование NirSoft CurrPorts. Этот инструмент показывает открытые сейчас порты (TCP или IP, а также UDP). Показывается информация о конкретном процессе, его имя, путь, информация о версии и т. д.
Этот инструмент существует не первый год и есть в Windows 10. Ссылка для скачивания NirSoft Currports на сайте.
Примечание. Убедитесь в скачивании правильной версии. Есть 32-битная и 64-битная версии. Приложение портативное и не требует установки. Разархивируйте папку и запустите исполняемый файл.
После запуска CurrPorts:
1. Будет показан список процессов на ПК. Отсортируйте их по «Локальному порту» для облегчения поиска.
2. Найдите и выберите нужный порт.
3. Можно увидеть подробности о процессах, такие как «Имя процесса», «Идентификатор процесса», «Состояние» и т.д.
Или можно дважды кликнуть на процесс для просмотра сведений о нём в одном окне.
Программа-клиент
Проверка порта на доступность с использованием специальной программы-клиента может быть выполнена только с другого компьютера с отдельным подключением к интернету. Популярным примером такой программы является Telnet. Для Windows версии 7 и выше его следует сначала установить. В меню «Пуск» выбираем Панель управления, затем Программы и компоненты, слева на панели находим «Включение или отключение компонентов Windows». В списке программ находим и ставим галочку напротив строки Клиент Telnet, жмем Ok.
Как проверить, открыт ли порт: открываем Командную строку, вводим telnet, IP-адрес через пробелы и номер интересующего порта, затем enter. В случае успешного соединения экран становится пустым, либо могут появиться символы. При неудаче выводится соответствующее сообщение.