Как просканировать порты в Linux: обзор лучших программ и примеры работы

Как просканировать порты в Linux: обзор лучших программ и примеры работы

Каждый, кто хоть раз настраивал сервер или пытался понять, почему веб-приложение «не видит» базу в соседнем контейнере, сталкивался с магическим словосочетанием «сканирование портов». Казалось бы, что может быть проще — взять и проверить, открыт ли нужный порт. А потом выясняется, что «нужный» порт неожиданно слушает не тот процесс, а пакеты идут окольными путями через iptables, и вот вы уже по колено в tcpdump, хотя хотели всего лишь узнать: «А 5432-то жив?»
Чтобы не приходилось стартовать wireshark раньше времени, держите подробный (и местами ироничный) гид по самым популярным линуксовым сканерам.

Почему вообще нужно сканировать порты

Сканирование – это не только про «хакинг». Чаще всего его используют для:

  • Аудита собственных сетей — вдруг наружу торчит админка Jenkins, о которой забыли?
  • Триажа инцидентов — если сервис недоступен, первым делом проверяют, открыт ли порт или файрволл его тихо глушит.
  • Мониторинга и инвентаризации — видел я корпоративные сети, где список серверов жили в Excel. Сканер значительно бодрит такие инфраструктуры.
  • Пентестов — ну да, тут без порт-сканирования далеко не уехать.

Коротко об анатомии TCP/UDP-порта (чтобы потом не путаться)

Порт — виртуальная «дверь» в процесс, который слушает (listen) входящие соединения. У TCP-двери есть ручка (трёхстадийное рукопожатие), у UDP её нет — заходи, кто хочет, но гарантий доставки ноль. Сканер в самом общем случае:

  1. Создаёт пакет (SYN для TCP, пустышку для UDP).
  2. Шлёт его на нужный IP и порт.
  3. Смотрит, что вернулось: SYN-ACK → порт открыт, RST → закрыт, тишина → фильтруется.

Этого знания достаточно, чтобы понимать логи nmap и не пугаться флага -sS.

nmap: дедушка всех сканеров, который до сих пор бодр

nmap появился в 1997-м, и с тех пор его интерфейс оброс ветвями опций примерно как новогодняя ёлка, если не обрезать её 28 лет подряд. С другой стороны, nmap – это «швейцарский нож», который умеет практически всё.

Установка

# Debian/Ubuntu
 sudo  apt  install nmap
 # RHEL/Fedora
 sudo dnf install nmap
 

Базовые примеры

  • Сканирование 1000 популярных портов на одном хосте: nmap 192.168.1.10
  • Полный диапазон TCP + UDP: nmap -sS -sU -p- 192.168.1.10
  • Скан всей подсети /24: nmap -sn 192.168.1.0/24 (только пинг-скан, быстро выясняет, кто живой)
  • Определение ОС и сервисов: nmap -A 192.168.1.10
  • Многопоточный режим: nmap --min-rate 5000 -p 1-65535 192.168.1.10 – шустро, но может вызвать подозрения у IDS.

Флаг -A добавляет детекцию ОС, попытки входа на сервисы (скрипты NSE) и кучу красивых деталей, но может громко стучать в логи. Поэтому в продакшене сначала «щупаем» — -sS (полуоткрытый SYN-скан), а уже потом -A.

Когда nmap не подходит?

Если нужно просканировать /16 за минуту или вы пытаетесь обойтись без sudo (SYN-скан без raw-сокетов невозможен), тогда в бой выходят «турбоскоростные» инструменты.

masscan: скорость на стероидах

masscan пишет пакеты напрямую в сетевой адаптер, поэтому способен «выливать» миллионы пакетов в секунду. Автор честно предупреждает: «Запускайте с осторожностью, иначе случайно DOS-ните чужую сеть».

Установка

git clone [URL=https://github.com/robertdavidgraham/masscan]https://github.com/robertdavidgraham/masscan[/URL]
 cd masscan
 make && sudo make install
 

Основные шоткаты

  • Молниеносный скан одного порта по /16: sudo masscan 10.0.0.0/16 -p80 --max-rate 100000
  • Все TCP-порты на одном хосте: sudo masscan 192.168.1.10 -p0-65535 --rate 2000
  • Экспорт в nmap-совместимый XML: --output-format xml --output-filename scan.xml

masscan хорош для «широких мазков» — быстро находит живые порты, а потом мы детализируем нmap'ом.

rustscan: дружелюбный мост между masscan и nmap

Если masscan — это бездушный автомат, то rustscan пытается быть «красивой обёрткой с призывом к действию». Он скринит хосты masscan-ом, а потом сам передаёт открытые порты в nmap для фингерпринтинга. Всё это с асинхронными I/O благами Rust.

Пример полной цепочки

rustscan -a 192.168.1.10 --ulimit 5000 -- -A -sC
 

После двоих тире (--) идут чистые опции nmap, а --ulimit — хитрый способ поднять количество одновременных сокетов без танцев с ulimit -n.

netcat (nc): швейцарский нож поглаживает порты

nc обычно знают как «TCP-telnet на стероидах», но ведь он уместен и для сканирования. Правда, без излишеств.

Мини-скан на 10 портов

nc -zv 192.168.1.10 20-30
 # -z — zero I/O (просто «постучаться»)
 # -v — verbose
 

Утилита удобна, когда нужно проверить пару портов из скрипта, а таскать громоздкий nmap нет желания.

ss и lsof: локальный взгляд изнутри

Иногда внешний скан покажет, что порт закрыт, а приложение уверено, что всё ок. Тогда открываем «рентген» на самом сервере:

ss — современный netstat

ss -tulwn
 # t — TCP, u — UDP, l — listening, w — raw, n — не резолвить DNS
 

Удобная фишка — фильтр по порту: ss -ltn sport = :8080

lsof — показывает, КТО держит порт

sudo lsof -i :5432
 

Получаем имя процесса, PID и даже путь к бинарю. Полезно, когда «ещё один Postgres» случайно занял порт продовой базы.

Сканирование UDP: почему всё так больно?

С UDP нехитро: сервис может не ответить вообще, даже если порт открыт (например, syslog ждёт валидный пакет). Поэтому:

  • Запускаем nmap с флагом -sU и терпеливо ждём — скорости там черепашьи, зато статистика достоверна.
  • Если нужно быстрее, используем masscan --udp, но готовимся к большому числу false-negative.
  • Для сервис-ориентированных проверок (DNS, SNMP) лучше сразу слать корректные запросы скриптами или тем же dig.

Как не нарваться на IDS/IPS и чужих админов

Даже безобидный син-скан может выглядеть подозрительно. Простые правила гигиены:

  • Темп. Открываете интернет-подсеть — ставьте --max-rate 1000 или меньше.
  • Whitelist. Заранее согласуйте диапазон IP и время окна с ответственными людьми.
  • Запускайте скан от рута там, где нужно raw-сокеты. Без sudo nmap автоматически падает на connect-скан, а он медленнее и заметнее.
  • Логируйте. Сохраняйте отчёты в XML/grepable — пригодится для ретроспективы.

Автоматизация: cron + сканер = утренняя телеграм-сводка

Скучное, но полезное: еженочно сканируем критическую зону DMZ и пушим diff, если внезапно появился лишний «открытый» порт. Делается скромным bash-скриптом:

#!/usr/bin/env bash
 TODAY=$(date +%F)
 OUTPUT="/var/reports/scan-$TODAY.xml"
 nmap -sS -p 1-1024 -oX "$OUTPUT" 203.0.113.0/28
 # diff с предыдущим днём и отправка через telegram-bot
 

Если нужна красота, взгляните на nmap-vulners — плагин, который сразу тыкает обнаруженные версии в базу CVE.

Завершаем: что выбрать под конкретную задачу?

  • nmap — универсал на все случаи. Неспешный аудит , глубокий анализ, NSE-скрипты.
  • masscan — «радар дальнего действия»: быстро находим живые порты на огромной площади.
  • rustscan — удобный гибрид: скорость masscan + мозги nmap.
  • netcat/nc — карманный тестер: точечно проверяем пару портов.
  • ss/lsof — внутренняя диагностика — смотрим, что творится на самом сервере.

Не забывайте, что сканирование без разрешения — это та ещё юридическая «минное поле». Если на горизонте чужая сеть — доставайте не nmap, а контракт с пермитом на тест.

Полезные ссылки и шпаргалки

Итого

Порт-сканирование — это не про «делать больно соседнему администратору», а про прозрачность собственной инфраструктуры. Знать, какие двери открыты, важно как для безопасности, так и для банальной отладки. Выбирайте инструмент по ситуации, соблюдайте «сетевой этикет» и пусть ваш следующий «nmap -A» покажет только те сервисы, о которых вы и так знали.

Ну а если всё равно «что-то где-то не открывается», помните: у нас всегда есть последний довод — tcpdump -nnvvXSs 0. Но это уже совсем другая история…

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Твой код — безопасный?

Расскажи, что знаешь о DevSecOps.
Пройди опрос и получи свежий отчет State of DevOps Russia 2025.


Николай Нечепуренков

Я – ваш цифровой телохранитель и гид по джунглям интернета. Устал видеть, как хорошие люди попадаются на уловки кибермошенников, поэтому решил действовать. Здесь я делюсь своими секретами безопасности без занудства и сложных терминов. Неважно, считаешь ты себя гуру технологий или только учишься включать компьютер – у меня найдутся советы для каждого. Моя миссия? Сделать цифровой мир безопаснее, а тебя – увереннее в сети.