# A Complete Guide to Nmap

Эта статья написана, чтобы стать максимально подробным гайдом по nmap.

> *Что это такое? Как им пользоваться? Оптимизация процесса сканирования. Примеры обычного и продвинутого сканирования nmap. Советы по его использования при разных обстоятельствах.*

**Nmap - это очень популярный сканер сети** с открытым исходным кодом, который может использоваться как в Windows, так и в Linux. Программа Nmap или Network Mapper была разработана Гордоном Луоном и на данный момент используется специалистами по безопасности и системными администраторами по всему миру.

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

![](https://telegra.ph/file/894a6cce364079500d593.png align="left")

## **А как мы используем nmap обычно?**

`nmap 192.168.1.1` \- Сканирование только 1 IP

`nmap 192.168.1.1 192.168.2.1` - Сканирование несколько IP

`nmap 192.168.1.1-254` \- Сканирование список IP адресов

`nmap` [`scanme.nmap.org`](http://scanme.nmap.org) \- Сканирование домена

`nmap 192.168.1.0/24` - Сканирование с указанием [CIDR](https://wiki.dieg.info/cidr)

**А что здесь не так спросите вы? Всё не так!** NMAP имеет поистине огромные возможности в расширении своего функционала в зависимости от того, чего вы хотите добиться.

## **Необходимые базовые флаги для сканирования**

`-iL` &lt;list.txt&gt;: Сканирования список целей(IP, домены)

`--exclude` &lt;IP/s&gt;: Исключить указанный цели из сканирования

`--excludefile` &lt;файл&gt;**:** Исключить указанный цели из списка для сканирования

<aside><strong>Дальше мы пройдёмся по отдельным аспектам сканирования и какие флаги/аргументы нужно применять.</strong></aside>

![](https://telegra.ph/file/62c08cd65ad18be5fb6a1.png align="left")

Техники сканирования:

`-sS/-sT/-sA/-sW/-sM`: сканирование с использованием системного вызова TCP

SYN/Connect()/ACK/Window/Maimon

`-sU`: UDP сканирование

`-sN/-sF/-sX`: TCP Null, FIN и Xmas сканирование

`--scanflags` &lt;флаги&gt;: Указать собственные TCP флаги

`-sI`: &lt;зомби\_хост\[:порт\]&gt;: "Ленивое" (Idle) сканирование

`-sO`: Сканирование IP протокола

`--traceroute`: Трассировка пути к хосту

`--reason`: Выводить причину, почему Nmap установил порт в определенном состоянии

## **Обнаружение хостов**

`-sL`: Сканирование с целью составления списка - просто составить список целей для сканирования

`-sP`: Пинг сканирование - просто определить, работает ли хост

`-Pn`: Пропустить ping хостов. nmap будет считать, что все хосты UP

`-PS/-PA/-PU` \[список\_портов\]: TCP SYN/ACK или UDP пингование заданных хостов

`-PE/-PP/-PM`: Пингование с использованием ICMP-эхо запросов, запросов временной метки и сетевой маски

`-PO` \[список\_протоколов\]: Пингование с использованием IP протокола

`-PR`: ARP сканирование сети

`-n`: Никогда не делать DNS resolution

`--dns-servers` &lt;сервер1\[,сервер2\],...&gt;: Задать собственные DNS сервера для разрешения доменных имён

## **Определение портов и порядка сканирования**

`-p-` : Сканирование всех портов (1-65535)

`-p` &lt;диапазон\_портов&gt;: Сканирование только определенных портов

> Пример: -p22; -p1-65535; -pU:53,111,T:21-25,80,8080 (U - UDP, T - TCP);
> 
> \-p http, https

`-F`: Быстрое сканирование - Сканирование ограниченного количества портов (100 портов)

`-r`: Сканировать порты последовательно - не использовать случайный порядок портов

`--top-ports` &lt;количество\_портов&gt;: Сканировать &lt;количество\_портов&gt; наиболее распространенных портов

> Пример: --top-ports 1000 ; --top-ports 5000

![](https://telegra.ph/file/418e84ea9ff1108e07c33.png align="left")

## **Определение служб и их версий**

`-sV`: Исследовать открытые порты для определения информации о службе/версии

`-sV --version-intensity` &lt;уровень&gt;: Устанавливать от 0 (легкое) до 9 (пробовать все запросы)

`-sV --version-light`: Ограничиться наиболее легкими запросами (интенсивность 2)

`-sV --version-all`: Использовать каждый единичный запрос (интенсивность 9)

![](https://telegra.ph/file/83c4344a44f2921db492e.png align="left")

## **Определение OS**

`-O`: Активировать функцию определения ОС

`-O --osscan-limit`: Использовать функцию определения ОС только для "перспективных" хостов

`-O --osscan-guess`: Угадать результаты определения ОС

`-O –max-os-tries`: Сколько раз nmap будет пытаться определить OS Пример:

> \-O –max-os-tries 1

`-A`: Включает обнаружение ОС, определение версии, сканирование при помощи скриптов и traceroute.

![](https://telegra.ph/file/5cb4ccf6c893076d41ef1.png align="left")

## **Управление временем и производительностью**

Опции, принимающие аргумент &lt;время&gt;, задаются в миллисекундах, пока вы не добавите 's' (секунды), 'm' (минуты), или 'h' (часы) к значению.

`-T0`: Параноик (0) Уклонение от системы обнаружения вторжений

`-T1`: Незаметный (1) обход системы обнаружения вторжений

`-T2`: Вежливый (2) замедляет сканирование, чтобы использовать меньшую пропускную способность и меньше ресурсов целевой машины

`-T3`: Нормальный (3) - скорость по умолчанию

`-T4`: Агрессивный (4) скорость сканирования; предполагает, что вы находитесь в достаточно быстрой и надежной сети

`-T5`: Безумный (5) ускоряет сканирование; предполагает, что вы находитесь в чрезвычайно быстрой сети

`--min-rate` &lt;число&gt;: Посылать запросы с интенсивностью не меньше чем &lt;число&gt; в секунду

`--max-rate` &lt;число&gt;: Посылать запросы с интенсивностью не больше чем &lt;число&gt; в секунду

`--scan-delay/--max-scan-delay` &lt;время&gt;: Регулирует задержку между запросами

`--host-timeout` &lt;время&gt;: Прекращает сканирование целей, которые не отвечают какое-то время

`--max-retries` &lt;количество\_попыток&gt;: Задает максимальное количество количество попыток на запрос

`--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout` &lt;время&gt;: Регулирует время ожидания ответа на запрос

`--min-parallelism/max-parallelism` &lt;количество\_запросов&gt;: Регулирует распараллеливание запросов

`--min-hostgroup/max-hostgroup` &lt;кол\_хостов&gt;: Установить размер групп для параллельного сканирования

![](https://telegra.ph/file/233f8c146d582da338726.png align="left")

## **Обход Firewall/IDS**

`-f`: Отправка маленьких IP пакетов(включая ping-сканирование), что может помочь обойти фильтрацию пакетов

`--mtu` &lt;значение&gt;: Фрагментировать пакеты с указаннием конкретного значения фрагментации

`-D` &lt;фикт\_хост1,фикт\_хост2\[,ME\],...&gt;: Маскировка сканирования с помощью фиктивных хостов

`-S` &lt;IP\_адрес&gt;: Изменить исходный IP адрес -e &lt;интерфейс&gt;: Использовать конкретный сетевой интерфейс

`-g/--source-port` &lt;номер\_порта&gt;: Изменить исходный номер порта

`--data-length` &lt;число&gt;: Добавить произвольные данные к посылаемым пакетам. Число это количество байт

`--ip-options` &lt;опции&gt;: Посылать пакет с заданным ip опциями

`--ttl` &lt;значение&gt;: Установить TTL запроса (time-to-live (время жизни пакета))

`--spoof-mac` &lt;MAC\_адрес/префикс/название производителя&gt;: Задать собственный MAC адрес

`--badsum`: Посылать пакеты с фиктивными TCP/UDP контрольными суммами –proxies: Передача соединений через HTTP/SOCKS4 прокси Пример команды для

### Пример обхода Firewall/IDS

> nmap -f -T0 -n -Pn –data-length 200 -D 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.23 192.168.1.1

## **Вывод результатов**

`-oN/-oX/-oS/-oG` &lt;файл&gt;: Выводить результаты нормальном виде, XML, s|&lt;rIpt kIddi3 и Grepable формата вывода, соответственно, в заданный файл

`-oA` &lt;базовове\_имя\_файла&gt;: Использовать сразу три основных формата вывода

`-v`: Увеличить уровень вербальности (задать дважды или более для увеличения эффекта)

`-d`\[уровень\]: Увеличить или установить уровень отладки (до 9)

`--open`: Показывать только открытые (или возможно открытые) порты

`--packet-trace`: Отслеживание принятых и переданных пакетов

`--iflist`: Вывести список интерфейсов и роутеров (для отладки)

`--log-errors`: Записывать ошибки/предупреждения в выходной файл нормального режима

`--append-output`: Добавлять выходные данные в конец, а не перезаписывать выходные файлы

`--resume` &lt;имя\_файла&gt;: Продолжить прерванное сканирование

`--stylesheet` &lt;путь/URL&gt;: Устанавливает XSL таблицу стилей для преобразования XML вывода в HTML

`--webxml`: Загружает таблицу стилей с [Nmap.Org](http://Nmap.Org)

`--no-stylesheet`: Убрать объявление XSL таблицы стилей из XML

`--reason`: Вывести причину, по которой порт находится в определенном состоянии, вывод такой же, как и -vv

### **NSE скрипты**

`-sC / --script default`: запускает стандартные скрипты –script: можно указать какой конкретно скрипт/ы использовать

> Пример: nmap 192.168.1.1 –script=http,banner; nmap 192.168.1.1 –script=http\*

`--script-args`: NSE скрипты с аргументами

> Пример: nmap –script snmp-sysdescr –script-args snmpcommunity=admin 192.168.1.1

![](https://telegra.ph/file/9ddcca7c930073c7d8efb.png align="left")

### **Теперь перейдем к разным полезным командами**

#### **Примеры nmap команд для вывод/обработки результатов**

`nmap -p80,443,8080,8443,8081 -sV -oG – –open 192.168.1.1/24 | grep open` : Сканирование на наличие веб-серверов и grep на каких IP-адресах запущены веб-серверы

`nmap -iR 10 -n -oX out.xml | grep "Nmap" | cut -d " " -f5 > live-hosts.txt`: Генерация списка IP живых хостов

`nmap -iR 10 -n -oX out2.xml | grep "Nmap" | cut -d " " -f5 >> live-hosts.txt`: Добавление IP в список живых хостов

`ndiff scanl.xml scan2.xml`: сравнение результатов двух сканирований с помощью ndiff

`xsltproc nmap.xml -o nmap.html`: конвертация xml в html

![](https://telegra.ph/file/3cbd2cbc4894bdbbf3be6.png align="left")

#### **Примеры nmap команд для сканирования**

`nmap 192.168.1.1-1/24 -PR -sn -vv` : ARP сканирование локальной сети

`nmap -sV --top-ports 5000 -T1 –reason -oG nmap.scan -f -n -Pn –data-length 200 -A --mtu 30 --badsum` : Скрытное сканирование топ 5000 популярных портов, без ping и резолва DNS; добавление рандомых 200 байт; определение OS; указание причины, почему nmap считает, что порт в том или ином состоянии; фрагментация пакетов; отправка пакетов с фиктивными TCP/UDP контрольными суммами

`nmap -sV --version-all -p- -T5 –reason -oA nmap.scan -Pn –min-rate 3000 –host-timeout 2m –max-retries 3 --script vulners --min-parallelism 10` : Данный режим сканирования больше подходит для лаб, тестовых заданий, CTF и в случаях если не применяются никакие средства защиты от сетевого сканирования. Данный скан будет максимально агрессивным и быстрым; агрессивное распознование сервисов; без ping; nmap будет считать, что хост/ы жив/ы; минимальная скорость сканирования: 3000; сканирование OS и скрипты по умолчанию; если хост не отвечает 2 минуты, то он пропускается; максимум 3 попытки для сканирования; запуститься скрипт vulners - скрипт ищет уязвимости по найденным сервисам.  

## Дополнительный материал

Отличная подробка репозиторием с различными NSE скриптами под разным цели, системы, CVE и т.д.

[https://github.com/emadshanab/Nmap-NSE-scripts-collection](https://github.com/emadshanab/Nmap-NSE-scripts-collection)
