Сканирование TCP и UDP портов

NmapBeginner
Практиковаться сейчас

Введение

Добро пожаловать в лабораторную работу по сканированию TCP и UDP портов. Сканирование портов — это фундаментальный метод, используемый сетевыми администраторами и специалистами по безопасности для обнаружения активных служб в компьютерной сети. Отправляя целевому узлу специфические сетевые пакеты и анализируя ответы, мы можем определить, какие порты открыты, закрыты или отфильтрованы межсетевым экраном.

Открытый порт не обязательно означает «уязвимый», но он означает «доступную границу службы». Именно поэтому сканирование портов является центральным элементом разведки. Оно выявляет «двери», которые система открывает для сети.

В этой лабораторной работе вы изучите низкоуровневые механизмы сканирования портов с помощью Nmap (Network Mapper) — стандартного отраслевого инструмента для сетевого обнаружения. Вы научитесь выполнять три различных типа сканирования: надежное TCP Connect сканирование, скрытное TCP SYN сканирование и сканирование UDP-портов без установления соединения. На практике вы увидите, как различные сетевые протоколы реагируют на сканирующие запросы.

Выполнение TCP Connect сканирования (-sT)

На этом этапе мы начнем с выполнения TCP Connect сканирования. В данный момент вы находитесь в своей рабочей директории по умолчанию: ~/project.

TCP Connect сканирование — это самый простой тип сканирования портов. Оно опирается на встроенные сетевые функции операционной системы для установления полного соединения с целевым портом. Это означает, что выполняется полное «трехстороннее рукопожатие» (three-way handshake) TCP: отправляется пакет SYN, от цели получается пакет SYN-ACK, и, наконец, отправляется пакет ACK для завершения установки соединения.

Поскольку этот метод использует стандартный сетевой стек, он концептуально прост и надежен. Это также хорошее напоминание о том, что сканирование — это, по сути, контролируемое взаимодействие с протоколами в соответствии с их логикой работы.

Из-за завершения процесса установки соединения этот метод очень надежен. Однако он также является очень «шумным». Поскольку соединение устанавливается полностью, журналы приложений целевой системы почти наверняка зафиксируют попытку подключения, что позволяет администраторам легко обнаружить сканирование.

Давайте используем Nmap для выполнения TCP Connect сканирования нашего локального компьютера (localhost) на порту 8080, где в данный момент работает фоновая веб-служба. Флаг -sT указывает Nmap использовать метод TCP Connect, а флаг -p задает номер порта.

Выполните следующую команду в терминале:

nmap -sT -p 8080 localhost

После выполнения команды вы должны увидеть вывод, похожий на этот:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-07 15:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds

Вывод четко показывает, что порт 8080 находится в состоянии open и использует протокол TCP. Служба определена как http-proxy (или аналогично, в зависимости от версии Nmap), что соответствует запущенному в фоне Python HTTP-серверу.

Выполнение скрытного SYN-сканирования (-sS)

На этом этапе мы рассмотрим более продвинутый и часто используемый метод: TCP SYN сканирование, также известное как «полуоткрытое» (Half-Open) сканирование.

В отличие от TCP Connect сканирования, SYN-сканирование не завершает трехстороннее рукопожатие. Оно отправляет пакет SYN (запрос на соединение) и ожидает ответа. Если целевой порт открыт, он отвечает пакетом SYN-ACK. В этот момент, вместо отправки ACK для завершения соединения, Nmap немедленно отправляет пакет RST (Reset), чтобы разорвать соединение до того, как оно будет полностью установлено.

Именно поэтому SYN-сканирование часто называют «полуоткрытым». Оно по-прежнему опирается на поведение TCP целевой системы, но минимизирует объем завершенного соединения.

Этот метод считается «скрытным», поскольку многие приложения регистрируют в журналах только полностью установленные соединения. Разрывая соединение на ранней стадии, SYN-сканирование часто обходит логирование на уровне приложений. Однако, поскольку для этого требуется формирование «сырых» (raw) сетевых пакетов, а не использование стандартных функций ОС, для такого сканирования требуются права суперпользователя (sudo).

Давайте выполним SYN-сканирование того же порта 8080 на нашем локальном компьютере. Мы будем использовать флаг -sS для указания метода SYN-сканирования.

Выполните следующую команду в терминале:

sudo nmap -sS -p 8080 localhost

Вы увидите вывод, похожий на результат предыдущего шага:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-07 15:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000042s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

Обратите внимание, что результат идентичен — порт по-прежнему определяется как open. Разница заключается исключительно в том, как сетевые пакеты обменивались данными «за кулисами». SYN-сканирование является типом сканирования по умолчанию в Nmap при запуске с правами sudo из-за его скорости и скрытности.

Выполнение сканирования UDP-портов (-sU)

На этом заключительном этапе мы переключим внимание с TCP на UDP (User Datagram Protocol).

UDP — это протокол без установления соединения. В отличие от TCP, здесь нет процесса рукопожатия для установления связи перед отправкой данных. Когда вы отправляете UDP-пакет на порт, цель обычно не отправляет подтверждение, если порт открыт. Она отвечает только ошибкой «ICMP Port Unreachable» (порт недоступен), если порт закрыт.

Эта асимметрия делает UDP-сканирование более сложным для интерпретации. Тишина может означать успех, фильтрацию или вообще отсутствие ответа. Поэтому аналитикам нужно читать результаты UDP-сканирования более внимательно, чем результаты TCP.

Это делает сканирование UDP печально известным своей сложностью и медлительностью. Если Nmap отправляет UDP-пакет и не получает ответа, он не может быть полностью уверен, открыт ли порт и молча принимает данные, или же межсетевой экран просто отбросил пакет. Поэтому Nmap часто помечает такие порты как open|filtered.

Давайте выполним UDP-сканирование произвольного порта (например, 5353), который, как мы знаем, в данный момент не обслуживается какой-либо службой на нашем локальном компьютере. Это покажет, как операционная система реагирует, когда порт явно закрыт. Как и в случае с SYN-сканированием, для UDP-сканирования требуются права суперпользователя для формирования «сырых» пакетов.

Выполните следующую команду в терминале:

sudo nmap -sU -p 5353 localhost

Сканирование может занять немного больше времени, чем TCP-сканирование. После завершения вы должны увидеть вывод, похожий на этот:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-07 15:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000038s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE  SERVICE
5353/udp closed zeroconf

Nmap done: 1 IP address (1 host up) scanned in 1.09 seconds

Обратите внимание, что состояние указано как closed. Когда Nmap отправляет UDP-пакет на закрытый порт, операционная система цели обычно отвечает сообщением об ошибке «ICMP Port Unreachable». Поскольку Nmap получил эту явную ошибку, он может с уверенностью пометить порт как closed. Если бы на этом порту работала служба, которая просто не ответила (что часто бывает с UDP-приложениями), Nmap не получил бы эту ICMP-ошибку и, скорее всего, пометил бы состояние порта неоднозначно как open|filtered. Эта зависимость от ICMP-сообщений об ошибках является отличительной чертой сканирования UDP-портов.

Резюме

Поздравляем! Вы успешно завершили лабораторную работу по сканированию TCP и UDP портов.

В этой работе вы узнали, как использовать Nmap для выполнения различных типов сетевого сканирования. Вы начали с надежного, но «шумного» TCP Connect сканирования (-sT), которое завершает полное трехстороннее рукопожатие. Затем вы перешли к скрытному TCP SYN сканированию (-sS), которое определяет открытые порты, оставляя соединения полуоткрытыми, чтобы избежать базового логирования. Наконец, вы изучили сложности сканирования UDP (-sU) без установления соединения и поняли, почему UDP-порты часто отображаются как open|filtered.

Эти фундаментальные методы сканирования являются необходимыми навыками для понимания топологии сети и защиты систем от несанкционированного доступа.