nmap

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Nmap
Nmap-4.53.png
Результаты сканирования NMap
Тип Сканер портов и открытое программное обеспечение
Разработчик Gordon Lyon[d]
Написана на C++, Python, Си, Lua[3] и Java
Операционная система Linux, Microsoft Windows, macOS, FreeBSD, NetBSD, OpenBSD и Solaris
Первый выпуск 1 сентября 1997[1]
Последняя версия
Лицензия GNU GPL 2
Сайт nmap.org
Commons-logo.svg Медиафайлы на Викискладе

nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети (портов и соответствующих им служб). Изначально программа была реализована для систем UNIX, но сейчас доступны версии для множества операционных систем.

Nmap использует множество различных методов сканирования, таких как UDP, TCP (connect), TCP SYN (полуоткрытое), FTP-proxy (прорыв через ftp), Reverse-ident, ICMP (ping), FIN, ACK, Xmas tree, SYN- и NULL-сканирование. Nmap также поддерживает большой набор дополнительных возможностей, а именно: определение операционной системы удалённого хоста с использованием отпечатков стека TCP/IP, «невидимое» сканирование, динамическое вычисление времени задержки и повтор передачи пакетов, параллельное сканирование, определение неактивных хостов методом параллельного ping-опроса, сканирование с использованием ложных хостов, определение наличия пакетных фильтров, прямое (без использования portmapper) RPC-сканирование, сканирование с использованием IP-фрагментации, быстрый поиск уязвимостей SQL Injection[4], а также произвольное указание IP-адресов и номеров портов сканируемых сетей.

В последних версиях добавлена возможность написания произвольных сценариев (скриптов) на языке программирования Lua - Nmap Scripting Engine (NSE).

Существуют графические интерфейсы, упрощающие выполнение задач сканирования:

Использование утилиты[править | править код]

Использование утилиты:

nmap [Тип(ы) Сканирования] [Опции] {цель сканирования}[5]

Сводка опций утилиты[править | править код]

Утилита предлагает различные опции для проведения сканирований[5]:

Определение цели сканирования:[править | править код]

-iL <имя_входного_файла>: Использовать список хостов/сетей из файла

-iR <количество_хостов>: Выбрать произвольные цели

--exclude <хост1[,хост2][,хост3],...>: Исключить хосты/сети

--excludefile <имя_файла>: Исключить список из файла

Обнаружение хостов:[править | править код]

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

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

-PN: Расценивать все хосты как работающие -- пропустить обнаружение хостов

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

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

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

-n/-R: Никогда не производить DNS разрешение/Всегда производить разрешение [по умолчанию: иногда]

--dns-servers <сервер1[,сервер2],...>: Задать собственные DNS сервера

--system-dns: Использовать системный DNS преобразователь

Различные приемы сканирования:[править | править код]

-sS/sT/sA/sW/sM: TCP SYN/с использованием системного вызова Connect()/ACK/Window/Maimon сканирования

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

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

--scanflags <флаги>: Задать собственные TCP флаги

-sI <зомби_хост[:порт]>: «Ленивое» (Idle) сканирование

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

-b <FTP_хост>: FTP bounce сканирование

--traceroute: Отслеживать путь к хосту

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

Определение портов и порядка сканирования:[править | править код]

-p <диапазон_портов>: Сканирование только определенных портов

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

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

--top-ports <количество_портов>: Сканировать <количество_портов> наиболее распространенных портов

--port-ratio <рейтинг>: Сканировать порты с рейтингом большим чем <рейтинг>

Определение служб и их версий:[править | править код]

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

--version-intensity <уровень>: Устанавливать от 0 (легкое) до 9 (пробовать все запросы)

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

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

< blockquote>--version-trace: Выводить подробную информацию о процессе сканирования (для отладки)

Сканирование с использованием скриптов:[править | править код]

-sC: эквивалентно опции --script=default

--script=<Lua скрипты>: <Lua скрипты> это разделенный запятыми список каталогов, файлов скриптов или категорий скриптов

--script-args=<имя1=значение1,[имя2=значение2,...]>: Передача аргументов скриптам

--script-trace: Выводить все полученные и отправленные данные

--script-updatedb: Обновить базу данных скриптов

Определение ОС:[править | править код]

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

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

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

Опции управления временем и производительностью:[править | править код]

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

-T[0-5]: Установить шаблон настроек управления временем (больше — быстрее)

--min-hostgroup/max-hostgroup <кол_хостов>: Установить размер групп для параллельного сканирования

--min-parallelism/max-parallelism <кол_хостов>: Регулирует распараллеливание запросов

--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <время>: Регулирует время ожидания ответа на запрос

--max-retries <количество_попыток>: Задает максимальное количество повторных передач запроса

--host-timeout <время>: Прекращает сканирование медленных целей

--scan-delay/--max-scan-delay <время>: Регулирует задержку между запросами

--min-rate <число>: Посылать запросы с интенсивностью не меньше чем <число> в секунду

--max-rate <число>: Посылать запросы с интенсивностью не больше чем <число> в секунду

Обход межсетевых экранов, систем IDS:[править | править код]

-f; --mtu <значение>: Фрагментировать пакеты (опционально с заданным значениме MTU)

-D <фикт_хост1,фикт_хост2[,ME],...>: Маскировка сканирования с помощью фиктивных хостов

-S <IP_адрес>: Изменить исходный адрес

-e <интерфейс>: Использовать конкретный интерфейс

-g/--source-port <номер_порта>: Использовать заданный номер порта

--data-length <число>: Добавить произвольные данные к посылаемым пакетам

--ip-options <опции>: Посылать пакет с заданным ip опциями

--ttl <значение>: Установить IP поле time-to-live (время жизни)

--spoof-mac <MAC_адрес/префикс/название производителя>: Задать собственный MAC адрес

--badsum: Посылать пакеты с фиктивными TCP/UDP контрольными суммами

Вывод результатов:[править | править код]

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

-oA <базовове_имя_файла>: Использовать сразу три основных формата вывода

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

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

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

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

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

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

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

--resume <имя_файла>: Продолжить прерванное сканирование

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

--webxml: Загружает таблицу стилей с Nmap.Org

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

Прочие опции:[править | править код]

-6: Включить IPv6 сканирование

-A: Активировать функции определения ОС и версии, сканирование с использованием скриптов и трассировку

--datadir <имя_каталога>: Определяет место расположения файлов Nmap

--send-eth/--send-ip: Использовать сырой уровень ethernet/IP

--privileged: Подразумевать, что у пользователя есть все привилегии

--unprivileged: Подразумевать, что у пользователя нет привилегий для использования сырых сокетов

-V: Вывести номер версии

-h: Вывести эту страницу помощи

Определение цели сканирования[править | править код]

В командной строке утилиты "Nmap" все, что не является опцией (или аргументом опции), рассматривается как цель сканирования. В простейшем случае для сканирования используется IP адрес или сетевое имя целевой машины[6].

Сканирование целевой сети[6][править | править код]

Иногда необходимо просканировать целую сеть. Для этого Nmap поддерживает CIDR адресацию. Вы можете добавить /<кол-во бит> к IP адресу или сетевому имени и утилита "Nmap" просканирует каждый IP адрес, для которого первые <кол-во бит> такие же как и у заданного хоста.

Например, 192.168.10.0/24 просканирует 256 хостов между 192.168.10.0 (бинарное: 11000000 10101000 00001010 00000000) и 192.168.10.255 (бинарное: 11000000 10101000 00001010 11111111) включительно. 192.168.10.40/24 сделает абсолютно то же самое.

Зная, что IP адрес scanme.nmap.org 64.13.134.52, при записи типа scanme.nmap.org/16 будет произведено сканирование 65,536 IP адресов между 64.13.0.0 и 64.13.255.255.

Наименьшее допустимое значение /0, при котором будет просканирован весь Интернет.

Наибольшее значение /32, при котором будет просканирован только заданный хост или IP адрес, т.к. все адресные биты заблокированы.

Примеры использования утилиты[править | править код]

Самая простая команда для использования утилиты - запуск сканирования определенного IP адреса:

nmap 127.0.0.1

Следующей командой будут просканированы все TCP порты машины scanme.nmap.org . Опция -v активирует вербальный режим[7]:

nmap -v scanme.nmap.org

Следующей командой будет произведено скрытное SYN сканирование всех 255 машин сети «класса C», в которой расположена машина Scanme. Также будет произведена попытка определения операционной системы на каждом работающем хосте. Из-за SYN сканирования и опции определения ОС данная команда требует привилегий суперпользователя (root)[7]:

nmap -sS -O scanme.nmap.org/24

Следующей командой будет запущен перебор хостов и TCP сканирование первой половины всех (из доступных 255) 8 битных подсетей адресного пространства 198.116 класса B. Также утилита с помощью команды проверяет запущены ли SSH, DNS, POP3 или IMAP с использованием их стандартных портов, а также использует ли какое-нибудь приложение порт 4564. Если какой-нибудь из этих портов открыт, то утилитой будет произведена попытка определения работающего с этим портом приложения[7]:

nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127

Проникновение в культуру[править | править код]

Утилита nmap появляется на экране в фильмах:

См. также[править | править код]

Примечания[править | править код]

  1. http://phrack.org/issues/51/11.html#article
  2. https://nmap.org/changelog.html#7.80 — 2019.
  3. The nmap Open Source Project on Open Hub: Languages Page — 2006.
  4. Николай Дубков. Поиск SQL Injection с помощью Nmap (5 августа 2016).
  5. 1 2 Сводка опций |. nmap.org. Дата обращения 8 февраля 2019.
  6. 1 2 Определение цели сканирования |. nmap.org. Дата обращения 19 февраля 2019.
  7. 1 2 3 Примеры |. nmap.org. Дата обращения 18 февраля 2019.
  8. Movies featuring the Nmap Security Scanner  (англ.)

Ссылки[править | править код]