Проверяем открытые порты в Windows
Доброго времени суток. Сегодня разберем тему открытых портов в Windows.
На своей практике неоднократно приходится сталкиваться с ситуациями, когда необходимо проверить, почему то или иное приложение перестало работать. Не удается подключиться к удаленному хосту по RDP / SSH. Очень часто бывает, когда несколько приложений используют один и тот же порт на одном сервер, и из-за этого возникают проблемы с их работой.
Для начала, небольшой экскурс про то, что такое порты и зачем их открывать.
Сетевой порт — то число, которое записывается в заголовках протоколов транспортного уровня сетевой модели OSI. Оно используется для определения программы или процесса-получателя пакета в пределах одного IP-адреса. Сетевые порты могут дать важнейшую информацию о приложениях, которые обращаются к компьютерам по сети. Зная приложения, которые используют сеть, и соответствующие сетевые порты, можно составить точные правила для брандмауэра, и настроить хост-компьютеры таким образом, чтобы они пропускали только полезный трафик. Построив профиль сети и разместив инструменты для распознавания сетевого трафика, можно более эффективно обнаруживать взломщиков — иногда просто анализируя генерируемый ими сетевой трафик.
Если вы готовите сервер для работы будущего приложения, которое работает по определенному порту, то можно заранее провести проверку, доступен ли будет этот порт.
Нам необходимо с помощью специальной утилиты, эмулировать прослушивание нужного нам порта. Воспользуемся утилитой netcat.
netcat - утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. На Windows платформах, она так же присутствует.
Он стал частью более крупного пакета утилит под названием Nmap, доступного для всех основных операционных систем. Скачать можно по ссылке.
После установки, можно воспользоваться командной строкой, чтобы работать с приложением.
Нас интересуют как минимум ключи -l и -p. Возьмем для примера 80 порт, как будто у нас поднят веб сервер IIS.
ncat -l -p 80
Теперь же переключимся на другой компьютер и с него через команду telnet проверим доступность порта. Установить клиент Telnet можно в оснастке Server Manager (Диспетчер Серверов → роли и компоненты)
Подключимся к нашему серверу командой:
telnet <IP адрес сервера> 80
Если мы получаем на выходе пустой терминал, то соединение произошло
В противном случае мы можем получить вот такую ошибку:
Проверим, что мы подключились верно, для этого в терминале, где запускали ncat введем произвольный текст, а затем переключимся на терминал с Telnet, там должно быть тоже самый текст:
Также можно проверить все открытые порты на локальном сервере через утилиту netstat.
Netstat - Отображение активных подключений TCP, портов, прослушиваемых компьютером, статистики Ethernet, таблицы маршрутизации IP, статистики IPv4 (для протоколов IP, ICMP, TCP и UDP) и IPv6 (для протоколов IPv6, ICMPv6, TCP через IPv6 и UDP через IPv6). Вот здесь можно найти краткий мануал.
Вот пример запуска netstat на сервере, с запущенным ncat:
Как видим, для каждого активного сокета указывается протокол, локальный и внешний адрес, PID процесса, а также состояние протокола. Вот список и значение самых распространенных состояний:
- LISTENING – значит, что порт ожидает входящих соединений
- ESTABLISHED – соединение установлено
- CLOSE_WAIT – ожидание закрытия вследствие отключения удаленной стороны
- TIME_WAIT – порт закрыт, но еще ожидает входящие пакеты для обработки
- SYN_SENT – установка соединения
Возле номера каждого сокета в квадратных скобках указана программа, которая его использует (исполняемое имя файла).
Если по каким-то причинам вам удобно пользоваться не консолью, а GUI, то можете использовать программу TCPView.
TCPView входит в состав пакета утилит Sysinternals Suite. Скачать можно по ссылке.
По каждом процессу можно получить информацию, а также сразу завершить его:
Также есть достаточно много утилит, благодаря которым можно просканировать систему на открытые порты локально \ удаленно. Например, Nmap, которую мы устанавливали в самом начале, чтобы воспользоваться Ncat. В состав пакета входит GUI Zenmap, которым мы и воспользуемся. Вот пример работы программы: