# NMAP

Open source приложение для сканирования сети.

**Общие флаги**

<table border="1" id="bkmrk-nmap--e-eth2-scanme." style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 30.0292%;"></col><col style="width: 69.9708%;"></col></colgroup><tbody><tr><td>nmap -e eth2 scanme.nmap.org</td><td>Конкретный интерфейс</td></tr><tr><td>nmap -A &lt;target&gt;</td><td>Агрессивный режим (объединение режимов определения версии ОС, версий сервисов, скрипт сканирования, трассировки)</td></tr><tr><td>-n</td><td>отключить обратное разрешение IP в DNS</td></tr><tr><td>--data-length &lt;length&gt;</td><td>Добавка случайных байтов информации к каждому пакету</td></tr><tr><td>nmap -iL targets.txt</td><td>Запуск с источниками из файла.

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

192.168.1.20-30

192.168.\*

192.168.0/24

scanme.nmap.org/24

комментарии

```
cat targets.txt 
   # FTP servers 
   192.168.10.3
```

</td></tr><tr><td>nmap 192.168.1.1-255 --exclude 192.168.1.1</td><td>Исключение из диапазона</td></tr><tr><td>nmap --exclude-file dontscan.txt 192.168.1.1/24</td><td>Исключение адресов из файла</td></tr><tr><td>--randomize-hosts</td><td>перемешивание последовательности узлов</td></tr><tr><td>nmap -iR 100</td><td>100 случайных адресов

-iR 0 это все адреса.

</td></tr><tr><td>http-max-cache-size=0</td><td>Отключение кэша (по умолчанию включен)

</td></tr><tr><td>-sL</td><td>имя сетевого узла

</td></tr></tbody></table>

**Таймауты**

<table border="1" id="bkmrk---max-rtt-timeout-%D0%9C%D0%B0" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 30.0292%;"></col><col style="width: 69.9708%;"></col></colgroup><tbody><tr><td>--max-rtt-timeout</td><td>Максимальное время ожидания ответа. По умолчанию несколько секунд.

```
sudo nmap -sU --max-rtt-timeout 100ms host.ru
```

</td></tr><tr><td> --host-timeout</td><td> Ограничение времени сканирования всего хоста. ```
sudo nmap -sU --host-timeout 5m host.ru
```

</td></tr><tr><td> --max-retries</td><td> Максимальное количество повторных попыток. ```
sudo nmap -sU --max-rtt-timeout 100ms --max-retries 0 host.ru
```

</td></tr><tr><td>-T4</td><td>Время задержки (ожидания) между запросами, 0 - очень много, 3 - по умолчанию, 5 - очень быстро</td></tr></tbody></table>

**Поиск хостов**

NMAP использует несколько техник пинга с использованием разных протоколов.

-PS/PA/PU/PY \[portlist\]: TCP SYN/ACK, UDP or SCTP discovery to given ports  
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes  
-PO \[protocol list\]: IP protocol ping

Номера протоколов поверх IP

<table border="1" id="bkmrk-1%C2%A0%C2%A0-icmp-2-igmp-4-ip" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>1 </td><td>ICMP</td></tr><tr><td>2</td><td>IGMP</td></tr><tr><td>4</td><td>IP-in-IP</td></tr><tr><td>6</td><td>TCP</td></tr><tr><td>17</td><td>UDP</td></tr><tr><td>132</td><td>SCTP</td></tr></tbody></table>

Для остальных протоколов только будут установлены IP заголовки.

Все техники по умолчанию отправляют пустые запросы.

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5--sn-%3Ct" style="border-collapse: collapse; width: 100%; height: 1510.8px;"><colgroup><col style="width: 29.4644%;"></col><col style="width: 70.6548%;"></col></colgroup><thead><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">Ключ</td><td class="align-center" style="height: 29.7969px;">Описание</td></tr></thead><tbody><tr style="height: 525.359px;"><td style="height: 525.359px;">-sn &lt;target&gt;</td><td style="height: 525.359px;">Ping-сканирование сети.

```bash
nmap -sn 192.168.1.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-08 09:02 +08
Nmap scan report for 192.168.1.1
Host is up (0.00044s latency).
MAC Address: 00:18:E7:F3:65:EE (Cameo Communications)
```

Отправляются разные пакеты в зависимости от привилегий пользователя.

С опцией traceroute должен показывать дополнительные маршруты, но это не то же самое что traceroute. У меня до всех тестовых адресов получился один шаг

```bash
nmap -sn --traceroute microsoft.com                                                                                    
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-08 11:03 +08
Nmap scan report for microsoft.com (13.107.246.77)
Host is up (0.00055s latency).
Other addresses for microsoft.com (not scanned): 
2603:1020:201:10::10f 2603:1010:3:3::5b 
2603:1030:b:3::152 2603:1030:20e:3::23c 2603:1030:c02:8::14

TRACEROUTE (using port 80/tcp)
HOP RTT     ADDRESS
1   0.53 ms 13.107.246.77

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

</td></tr><tr style="height: 220.156px;"><td style="height: 220.156px;">nmap -sn -PS &lt;target&gt;</td><td style="height: 220.156px;">TCP SYN сканирование. ```
nmap -sn -PS 192.1.1/24
```

SYN пакет на 80 порт, если порт закрыт - приходит RST, если открыт - SYN/ACK. Потом отправляем RST пакет.

Фаер может блокировать RST для закрытых сервисов, поэтому можно донастроить скан

```
nmap -sn -PS80,100-1000 <target>
```

Но SYN пакеты могут блокироваться, поэтому следующий способ

</td></tr><tr style="height: 133.375px;"><td style="height: 133.375px;">nmap -sn -PA &lt;target&gt;</td><td style="height: 133.375px;">TCP ACK сканирование.

Пустой TCP-пакет с флагом ACK, на порт 80 (по умолчанию).  
Если хост отключен, он не должен отвечать на этот запрос. Иначе RST и будет считаться подключенным к сети.

```
nmap -sn -PA22,1000-65535 <target>
```

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PU &lt;target&gt;</td><td style="height: 29.7969px;">UDP сканирование. Порт 40125. Аналогично настройка портов</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"> nmap -sn -PE &lt;target&gt;</td><td style="height: 29.7969px;">Стандартное Echo сканирование.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PP &lt;target&gt;</td><td style="height: 29.7969px;">Echo timestamp сканирование.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PM &lt;target&gt;</td><td style="height: 29.7969px;">Echo reply сканирование.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PY &lt;target&gt;</td><td style="height: 29.7969px;">SCTP INIT сканирование. Аналогичная настройка портов.</td></tr><tr style="height: 116.578px;"><td style="height: 116.578px;">nmap -sn -PO &lt;target&gt;</td><td style="height: 116.578px;">IP сканирование.

```
nmap -sn -PO1,2,17 scanme.nmap.org
```

Здесь 1, 2, 17 - номера протоколов

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">nmap -sn -PO --data-length 100 scanme.nmap.org</td><td style="height: 46.5938px;">\--data-length 100 генерация случайных данных

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PR &lt;target&gt;</td><td style="height: 29.7969px;">ARP ping

</td></tr><tr style="height: 80.1875px;"><td style="height: 80.1875px;">nmap -sn -PR --spoof-mac &lt;mac address&gt; &lt;target&gt;</td><td style="height: 80.1875px;">Подмена MAC-адреса может позволить нам подделать источник наших подключений и может быть полезна для обхода систем идентификации. MAC-адрес можно подделать  
во время проверки ARP-связи. Используйте --spoof-mac для установки нового MAC-адреса:

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-sn --script dns-brute bobrobotirk.ru</td><td style="height: 29.7969px;">Брутфорс по доменным именам</td></tr><tr><td>-sW</td><td>Похож на ACK, определяет статус порта анализируя поле TCP Window в RST ответе. Открытые больше 0, закрытые - 0.</td></tr><tr><td>-sI</td><td>Сканирование от лица другого узла. Старые системы увеличивают IP-ID на 1 с каждым новым исходящим пакетом. Это ключевая уязвимость.

<div>Хост должен мало использоваться и иметь предсказуемый IP-ID.</div><div>Процесс сканирования одного порта:</div>- Запрос "зомби" (например, SYN-пакет), сохраняется IP-ID ответа (например X)
- Отправка пакета от имени "зомби" на целевой порт сканируемой машины. Если порт открыт, цель ответит "зомби" пакетом SYN/ACK. Если порт закрыт, цель ответит "зомби" пакетом RST.
- Повторный запрос "зомби" и анализ нового значения IP-ID. X+1 означает, что "зомби" не отправил ни одного своего пакета. Следовательно, порт на цели фильтруется (брандмауэр молча отбросил пакет). X+2 означает, что "зомби" получил от цели ответный пакет и ответил на него своим RST. Вывод: порт на цели открыт или закрыт.

<div>Чтобы отличить открытый порт от закрытого, сканер анализирует, на какой именно пакет отреагировал "зомби".</div><div>  
</div><div>Причины использования: анонимность и обход правил фильтрации (если "зомби" доверенный) </div>```
sudo nmap -sI zombie.example.com target.example.com
```

<div>**Поиск зомби:**</div><div>Скрипт ipidseq. </div>```
sudo nmap -sS -p 80 --script ipidseq <target>
```

<div>По умолчанию 6 пакетов. Параметр --script-args ipidseq.probes=10 улучшает качество проверки.</div><div>Результат:</div><div>- Incremental! Подходит. IP-ID увеличивается на постоянную величину.
- All zeros или Constant Не подходит. В поле IP-ID всегда ноль/константа. В некоторых старых системах или специфичном сетевом оборудовании.
- Random Не подходит.
- Broken incremental! Увеличивается на непостоянную величину (например, +1, +2, +1, +3). Не подходит./подождать, может успокоится.

</div><div>Проверил роутеры DIR-650 и ASUS RT-N18U. На первом Incremental, на втором - All zeros. Пакеты, идущие сквозь, не влияют. При сканировании на целевом хосте в качестве порта источника видится http или https порт зомби.</div></td></tr><tr style="height: 150.172px;"><td style="height: 150.172px;">-sn --script broadcast-ping 192.168.0.1/24</td><td style="height: 150.172px;">Броадкастовый пинг. Отправляется броадкастовый запрос и ждем результат.

broadcast-ping.num\_probes=5 количество пингов

```
nmap --script broadcast-ping --script-args broadcast-ping.num_probes=5
```

broadcast-ping.timeout=10000 таймаут

broadcast-ping.interface=wlan3 интерфейс

\--script-args=newtargets позволяет просканировать хосты, от которых получен ответ

\--script-args max-newtargets=3 ограничивает кол-во сканируемых хостов

</td></tr><tr><td>nmap --script broadcast</td><td>Запускает все скрипты категории broadcast

</td></tr></tbody></table>

Можно комбинировать технологии

```
nmap -sn --send-ip -PS21,22,23,25,80,445,443,3389,8080 -PA80,443,8080 -PO1,2,4,6 -PU631,16
```

**Эффективность технологий сканирования** ([оригинал](https://www.bamsoftware.com/wiki/Nmap/EffectivenessOfPingProbes))

Интересная статья. Проба эффективности различных комбинаций технологий на основании 1000 случайных сетей. Был сформирован список и приведены результаты различных технологий и комбинаций с процентом результативности. 100% результат - найденные любой технологией хосты. А затем - поиск комбинации технологий с наибольшим процентом попадания и времени на каждую вариацию.

Вывод, который я для себя сделал на основе данных:

- Стартовый поиск адресов и портов важная процедура. Однако только один из компонентов.
- Психология и поставленные задачи критичны. Направленные и ненаправленные взломы происходят по разным алгоритмам.
- Ненаправленные взломы были, есть и будут. Оно дает шум в логах, за которым может прятаться направленный хакер.
- Время жизни важно. Сервис "на месяц" отличается от "на год".
- Одна технология дает в лучшем случае 50-60% результат. Однако непопулярные технологии могут показать защищенные от явного сканирования хосты, хотя не справиться с простыми. Поэтому либо тьма времени + высокая вероятность обнаружения, либо результат в 70-80 процентов.
- Эти данные масштабного сканирования. Эффективность от затраченного времени растет нелинейно. В районе 90% каждый дополнительный процент стоит дней.
- В случае направленного теста каждый фактор, предоставляющий дополнительную информацию (например ОС, возможные сервисы, ожидаемая степень защиты) увеличивает шансы и скорость. Возможно, нужен некий справочник/сервис, агрегирующий данные по удачным вариантам в зависимости от дополнительных условий.
- Нестандартные порты рулят, но их нужно правильно прятать. Это ограничивает ненаправленных хакеров.
- Логирование + проактивная защита как минимум поможет увидеть попытки. Однако необходим баланс между стоимостью защиты (фильтрации) и ценностью информации
- Тупое сканирование будет незаметно только в системах с отсутствием защиты.
- Данные 2009 года, сейчас рулят облака и ситуация думаю слегка поменялась.
- Возможно общедоступные сервисы стоит выносить в отдельный пул

**Открытые порты**

Без параметров, только адрес. По умолчанию сканирует 1024 первых порта. Статусы портов:

<table border="1" id="bkmrk-open-%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B5%D0%BD" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 13.9425%;"></col><col style="width: 86.0575%;"></col></colgroup><tbody><tr><td>Open</td><td>Сервис доступен</td></tr><tr><td>Closed</td><td>Запросы были получены, но был сделан вывод, что на этом порту не запущена служба.</td></tr><tr><td>Filtered</td><td>Не было признаков того, что запросы были получены, и состояние не удалось установить. Это также указывает на то, что запросы отбрасываются в результате какой-либо фильтрации.</td></tr><tr><td>Unfiltered</td><td>Запросы были получены, но состояние не удалось установить. Это состояние возможно только при ACK сканировании.</td></tr><tr><td>Open/Filtered</td><td>Запросы отфильтрованы или порт открыт, но не удалось установить состояние.</td></tr><tr><td>Close/Filtered</td><td>Запросы отфильтрованы или порт закрыт, и не удалось установить состояние.</td></tr></tbody></table>

Последовательность задач при сканировании портов:

- Преобразование DNS имени в IP. Можно указать альтернативный dns сервер. ```
    nmap --dns-servers 8.8.8.8,8.8.4.4 scanme.nmap.org
    ```
- Проверка, поднят ли хост. Чтобы пропустить: ```
    nmap -Pn scanme.nmap.org
    ```
- Обратное преобразование IP в DNS. Чтобы пропустить: ```
    nmap -n scanme.nmap.org
    ```
- Затем SYN (привилегированный пользователь) или TCP connect (обычный пользователь) сканирование. SYN быстрее. Однако есть еще способы сканирования портов.

Диапазоны портов:

<table border="1" id="bkmrk-nmap--p80%2C443-localh" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 31.1073%;"></col><col style="width: 68.8927%;"></col></colgroup><tbody><tr><td>--top-ports N</td><td>Заданное количество портов по рейтингу популярности.</td></tr><tr><td>nmap -p80,443 localhost</td><td>Явный список портов</td></tr><tr><td>nmap -p1-100 localhost</td><td>Диапазон</td></tr><tr><td>nmap -p- localhost</td><td>Все порты</td></tr><tr><td>nmap -pT:25,U:53 &lt;target&gt;</td><td>Порты с протоколом</td></tr><tr><td>nmap -p smtp &lt;target&gt;</td><td>По имени сервиса</td></tr><tr><td>nmap -p smtp\* &lt;target&gt;</td><td>По шаблону имени сервиса</td></tr><tr><td>nmap -p\[1-65535\] &lt;target&gt;</td><td>Только порты, указанные в nmap в виде сервиса</td></tr></tbody></table>

**Определение типа сервиса и версии**

За счет базы данных "отпечатков" сервисов и ОС. Отправляются пробники, определенные в nmap-service-probes, в список предполагаемых открытых портов. Пробники выбираются в зависимости от того, насколько вероятно, что они могут быть  
использованы для идентификации службы.

<table border="1" id="bkmrk-nmap--sv-%3Ctarget%3E-%D0%92%D0%B5" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.512%;"></col><col style="width: 66.6072%;"></col></colgroup><tbody><tr><td>nmap -sV &lt;target&gt;</td><td>Версии сервисов</td></tr><tr><td>nmap -sV --version-intensity 9 &lt;target&gt;</td><td>Уровень интенсивности поиска, 0-9</td></tr><tr><td>nmap -O &lt;target&gt;</td><td>Версия ОС. В привилегированном режиме.</td></tr><tr><td>nmap -O --osscan-guess &lt;target&gt;</td><td>Попытка угадать ОС</td></tr><tr><td>nmap -O --osscan-limit &lt;target&gt;</td><td>Вывод информации об ОС только а случае абсолютной уверенности</td></tr><tr><td>nmap -O -v 192.168.0.1</td><td>Расширенная информация об ОС</td></tr></tbody></table>

"Отпечатки" могут настраиваться для улучшения производительности.

 **Дополнительные утилиты**

**nping** модификация ping пакетов. Мощный инструмент для тестирования фаерволов.

<table border="1" id="bkmrk---icmp-%D1%82%D0%B8%D0%BF-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0--c" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 40.0301%;"></col><col style="width: 59.9699%;"></col></colgroup><tbody><tr><td>--icmp</td><td>тип пакета</td></tr><tr><td>-c 1</td><td>количество пакетов</td></tr><tr><td>--icmp-type 0 --icmp-code 0</td><td>тип и код пакета</td></tr><tr><td>--source-ip 192.168.0.5 --dest-ip 192.168.0.10</td><td>источник и приемник</td></tr><tr><td>--icmp-id 520</td><td>идентификатор</td></tr><tr><td>--icmp-seq 0</td><td>номер пакета</td></tr><tr><td>--data-string 'ping'</td><td>данные внутри</td></tr></tbody></table>

**Zenmap** графическая утилита, удобно хранить настройки параметров nmap

**ncat** Выполнение внешних команд различными способами после успешного установления соединения. Одним из способов является использование Lua-скриптов, которые действуют как программы и позволяют пользователям выполнять любые задачи.

```
ncat --lua-exec <path to Lua script> --listen 80
```

\--sh-exec выполняет консольные команды

**Ncrack** взлом простых паролей

&lt;\[service-name\]&gt;://&lt;target&gt;:&lt;\[port-number\]&gt;

ncrack ssh://&lt;target&gt;:&lt;port&gt;

<table border="1" id="bkmrk--u-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B-%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD%D0%BE%D0%B2--p-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 40.862%;"></col><col style="width: 59.138%;"></col></colgroup><tbody><tr><td>-U</td><td>файлы логинов</td></tr><tr><td>-P</td><td>файлы паролей</td></tr><tr><td>ncrack --save cracking-session &lt;\[service-name\]&gt;://&lt;target&gt;:&lt;\[port-number\]&gt;</td><td>сохранить незавершенный процесс</td></tr><tr><td>ncrack --resume cracking-session &lt;\[service-name\]&gt;://&lt;target&gt;:&lt;\[port-number\]&gt;</td><td>продолжить</td></tr></tbody></table>

**Rainmap Lite** запуск сканирования из браузера