Загрузка не удалась. Возможно, проблемы с правами доступа?

Это старая версия документа!


FIXME

NMap

Описание Nmap

Nmap («Network Mapper») — это утилита с открытым исходным кодом для исследования сети и проверки безопасности. Многие системные администраторы и администраторы сетей также находят её полезной для таких задач как инвентаризация сети, управления расписанием служб обновлений и мониторинга аптайма хостов или служб. Nmap использует сырые IP пакеты новаторским способом, чтобы определить, какие хосты доступны в сети, какие службы (имя и версия приложений) эти хосты предлагают, какие операционные системы (и версии ОС) там запущены, какие типы фильтров пакетов/файерволов используются и дюжины других характеристик. Она была создана для быстрого сканирования больших сетей, но работает и прекрасно работает в отношении единичных хостов. Nmap запускается на всех популярных операционных системах, а официальные исполнимые пакеты доступны для Linux, Windows и Mac OS X.

В дополнении к классической версии Nmap командной строки, набор Nmap включает:

  • Просмотр результатов (Zenmap)
  • Гибкий инструмент передачи, перенаправления и отладки данных (Ncat)
  • Утилиту для сравнения результатов сканирования (Ndiff)
  • Инструмент генерации пакетов и анализа ответов (Nping).

Nmap является:

  • Гибкой: Поддерживает дюжины продвинутых техник для составления карты сети, заполненной IP фильтрами, файерволами, роутерами и другими преградами. Сюда относятся множество механизмов сканирования портов (как TCP, так и UDP), определение ОС, определение версий, пинг зачисток и другое.

  • Мощной: Nmap использовалась для сканирования громадных сетей, буквально сотни тысяч машин.

  • Портативной: Поддерживаются большинство операционных систем, включая Linux, Microsoft Windows, FreeBSD, OpenBSD, Solaris, IRIX, Mac OS X, HP-UX, NetBSD, Sun OS, Amiga и другие.

  • Простой: При том, что Nmap предлагает богатый набор продвинутых функций для уверенных пользователей, вы можете начать с простых вещей вроде «nmap -v -A целевой хост». Чтобы полностью удовлетворить вашим потребностям, доступны как традиционная версия командной строки, так и графическая версия (GUI). Для тех, кто не хочет компилировать Nmap из исходников, доступны исполнимые файлы.

  • Бесплатной: Главные цели проекта Nmap — это помочь сделать Интернет чуть более безопасным и предоставить администраторам/аудиторам/хакерам продвинутый инструмент для исследования их сетей. Nmap доступна для свободной загрузки и также поставляется с полным исходным кодом, который вы можете изменить и распространять его на основе лицензии.

  • Хорошо документированной: Значительные усилия были вложены для создания полных и актуальных страниц мануалов, белые бумаги, уроки и даже целую книгу!

  • Поддерживаемой: Хотя Nmap поставляется без гарантий, он хорошо поддерживается динамичным сообществом разработчиков и пользователей.

  • Признанной: Nmap выиграла ряд призов, включая «Information Security Product of the Year» от Linux Journal, Info World and Codetalker Digest. Она была отмечена в сотнях журнальных статей, нескольких фильмах, множестве книг и одной серии комиксов.

  • Популярной: Тысячи людей загружают Nmap каждый день и она включена во множество операционных систем (Redhat Linux, Debian Linux, Gentoo, FreeBSD, OpenBSD и т.д.). Она в десятке (из 30,000) программ в репозитории Freshmeat.Net. Это важно, поскольку это придаёт Nmap динамичную разработку и сообщество поддержки пользователей.


Справка по Nmap

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

nmap [Тип(ы) сканирования] [Опции] {заданные_цели}

ОПРЕДЕЛЕНИЕ ЦЕЛИ СКАНИРОВАНИЯ:

Может работать с именами хостов, IP адресами, сетями и т.д.

Например:

scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254

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

-iR <количество хостов>: Выбор случайных целей

—exclude <host1[,host2][,host3],…>: Исключить хосты/сети

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

ОБНАРУЖЕНИЕ ХОСТОВ:

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

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

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

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

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

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

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

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

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

—traceroute: Провести трассировку (проследить путь) до каждого хоста

РАЗЛИЧНЫЕ ПРИЕМЫ СКАНИРОВАНИЯ:

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

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

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

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

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

-sY/sZ: SCTP INIT/COOKIE-ECHO сканирование

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

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

ОПРЕДЕЛЕНИЕ ПОРТОВ И ПОРЯДКА СКАНИРОВАНИЯ:

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

Пример: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9

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

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

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

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

ОПРЕДЕЛЕНИЕ СЛУЖБ И ИХ ВЕРСИЙ:

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

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

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

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

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

Например:

# nmap -sV example.com example2.com

СКАНИРОВАНИЕ С ИПОЛЬЗОВАНИЕМ СКРИПТОВ:

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

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

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

—script-args-file=filename: Передача NSE скриптам аргументов в файле

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

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

—script-help=<Lua скрипты>: Показ помощи о скриптах. <Lua скрипты>разделённый запятой список скриптов или список категорий скриптов.

ОПРЕДЕЛЕНИЕ ОС:

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

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

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

Например:

# nmap -O example.com example2.com

ОПЦИИ УПРАВЛЕНИЯ ВРЕМЕНЕМ И ПРОИЗВОДИТЕЛЬНОСТЬЮ:

Опции, принимающие аргумент <время>, задаются в миллисекундах, пока вы не добавите '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 <номер_порта>: Использовать заданный номер порта

—proxies <url1,[url2],…>: Ретранслировать соединения через прокси HTTP/SOCKS4

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

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

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

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

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

ВЫВОД РЕЗУЛЬТАТОВ:

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

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

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

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

—reason: Показать причину нахождения порта в определённом состоянии

—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: Вывести эту страницу помощи

ИНТЕРАКТИВНЫЕ КОМАНДЫ:

Справка: Не будет работать с “sudo nmap”, поэтому используйте “sudo –i”

Во время работы вы можете делать запросы в nmap следующими ключами:

? Показать эту информацию

v/V увеличить/уменьшить вербальность

d/D увеличить/уменьшить отладку

p/P включить/отключить трассировку пакетов

и другие ключи, которые будут напечатаны в статусе

ПРИМЕРЫ:

nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80

Руководство по Nmap

Определение цели сканирования

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

Иногда необходимо просканировать целую сеть. Для этого 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 адрес, т.к. все адресные биты заблокированы.

CIDR нотация коротка, однако не всегда достаточно гибка. Например, вы хотите просканировать 192.168.0.0/16, но пропустить все IP-ки оканчивающиеся на .0 или .255, т.к. обычно это широковещательные адреса. Nmap может осуществить такое сканирование путем задания диапазонов в октетах. Вместо определния обычного IP адреса, вы можете определить для каждого октета либо разделенный запятыми список чисел, либо диапазон. Например, 192.168.0-255.1-254 пропустит все адреса в диапазоне оканчивающиеся на .0 и .255. Диапазоны не обязательно задавать только в последних октетах: при записи 0-255.0-255.13.37 будет произведено сканирование всех адресов в Интернете оканчивающихся на 13.37. Такой тип сканирования может быть полезен для обозрения просторов Интернета и различных исследований.

IPv6 адреса могут быть определны только в форме, полностью соответствующей правильной форме записи IPv6 адресов или с CIDR для подсетей. Использование диапазонов в октетах ещё не поддерживается для IPv6.

IPv6 адреса не глобальной видимости, должны иметь суффикс зоны ID. На системах Unix это знак процента, за которым идёт имя интерфейса; полный адрес может быть fe80::a8bb:ccff:fedd:eeff%eth0. На Windows используйте номер индекса интерфейса вместо имени интерфейса: fe80::a8bb:ccff:fedd:eeff%1. Вы можете увидеть индекс списка интерфейсов запуском команды:

netsh.exe interface ipv6 show interface


Цели сканирования обычно задаются в командной строке, и существуют различные опции контроля выбора целей:

  • -iL имя_файла (Ввод из списка)

Считывает цели из имя_файла. Хотя передача большого списка хостов для сканирования является обычным явлением, это не удобно. Например, ваш DHCP сервер передают вам список из 10,000 используемых им на данный момент адресов, и вы хотите его просканировать. Или, возможно, вы хотите просканировать все IP адреса, кроме переданных им, чтобы выявить несанкционированное использование статических IP адресов. Просто сгенерируйте список хостов для сканирования и передайте имя файла в Nmap как аргумент для -iL опции. Записи в файле могут находиться в любой приемлимой для Nmap форме (IP адреса, сетевые имена, CIDR, IPv6, или диапазоны в октетах). Каждая запись должна быть отделена пробелом или несколькими, символами табуляции или символами перехода на новую строку. Вы можете передать в качестве аргумента дефис(-) как имя файла, если хотите, чтобы Nmap считывала список хостов из стандартного ввода, а не из файла.

Ввод может содержать комментарии, которые начинаются с # и продолжаются до конца строки.

  • -iR кол-во хостов (Выбирает произвольные цели)

Для сканирования в пределах всего Интернета или каких-либо исследований, вам, возможно, понадобится выбрать цели произвольно. Аргумент кол-во хостов определяет сколько необходимо сгенерировать IP адресов. Неподходящие IP адреса, такие как частные, широковещательные или нелокализованные диапазоны адресов автоматически пропускаются. Аргумент 0 может быть передан для бесконечного сканирования. Имейте в виду, что некоторым системным администраторам может не понравиться неразрешенное сканирование их сетей и они могут пожаловаться. Используйте эту опцию на свой страх и риск!
Если в дождливый денек вам будет скучно, попробуйте команду:

nmap -Pn -sS -p 80 -iR 0 --open

для сканирования произвольных веб-серверов.

  • –exclude хост1[,хост2[,…]] (Исключить хосты/сети)

Определяет разделенный запятыми список целей, которые необходимо исключить из сканирования, даже если они являются частью заданного вами диапазона сканирования. Передаваемый список использует стандартный синтаксис Nmap, поэтому может содержать сетевые имена, CIDR адресацию, диапазоны в октетах и т.д. Эта опция может быть полезна, если сеть, которую вы хотите просканировать, содержит сервера или системы, негативно реагирующие на сканирование портов, или подсети, администрируемые другими людьми.

  • –excludefile имя_файла (Исключить список из файла)

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


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

Одна из первейших задач при исследовании любой сети это сократить (иногда довольно большой) набор IP диапазонов до списка активных или интересных хостов. Сканирование каждого порта каждого IP адреса медленно и необязательно. Конечно же то, что делает хост интересным для исследования во многом определяется целями сканирования. Сетевые администраторы возможно будут заинтересованы только в хостах, на которых запущена определенная служба, в то время как тем, кого интересует безопасность, будут интересны все устройства с IP адресами. Задачи администраторов по обнаружению работающих хостов в сети могут быть удовлетворены обычным ICMP пингом, людям же, которые тестируют способность сети противостоять атакам из вне, необходимо использовать разнообразные наборы запросов с целью обхода брандмауэра.

Поскольку задачи требующие обнаружения хостов столь различны, Nmap предоставляет большое разнообразие опций для различных методов. Задачу обнаружения хостов иногда называют пинг сканированием (ping scan), однако она намного превосходит использование обычных ICMP запросов ассоциирующихся с вездесущими ping утилитами. Пользователи могут полностью пропустить шаг пинг сканирования с помощью опции сканирования с целью составления списка (-sL) или просто отключив его (-Pn), или сканировать сеть с помощью произвольных комбинаций мультипортовых TCP SYN/ACK, UDP, SCTP INIT и ICMP запросов. Целью всех этих запросов является получение ответов, указывающих, что IP адрес в настоящее время активен (используется хостом или сетевым устройством). В большинстве сетей лишь небольшой процент IP адресов активен в любой момент времени. Это особенно характерно для адресных пространств вида 10.0.0.0/8. Такие сети имеют 16 млн. IP адресов, но я видел, как они используются компаниями, в которых не более тысячи машин. Функция обнаружения хостов может найти эти машины в этом необъятном море IP адресов.

Если никакие параметры обнаружения хостов не даны, Nmap посылает эхо запрос ICMP, пакет TCP SYN на порт 443, пакет TCP ACK на порт 80 и ICMP запрос метки времени. (Для IPv6 ICMP запрос метки времени пропускается, поскольку это не часть ICMPv6.) Это поведение по умолчанию эквивалентно опциям -PE -PS443 -PA80 -PP. За исключением ARP (для IPv4) и Neighbor Discovery (обнаружение соседей) (для IPv6) сканирований, которые используются для любых целей в локальной ethernet сети. Для непривилегированных пользователей оболочки Unix, дефолтными зондами являются пакет SYN на порт 80 и 443 с использованием системного вызова connect. Это обнаружение хостов часто бывает достаточным при сканировании локальных сетей, для аудита безопасности рекомендуется более сложный набор.

Опции -P* (определяющие тип пинг сканирования) могут комбинироваться. Вы можете увеличить шансы обхода строго брандмауэра посылая множество запросов различных типов, используя различные TCP порты/флаги и ICMP коды. Также имейте в виду, что даже если вы определите различные -P* опции, по умолчанию применительно к целям локальной сети будет производиться и ARP сканирование (-PR), поскольку почти всегда она оказывается более быстрой и более эффективной.

По умолчанию после обнаружения хостов Nmap начинает сканирование портов каждой активной машины. Так будет, даже если вы укажите на использование нестандартных методов обнаружения хостов, например, с использованием UDP запросов (-PU). Прочтите об опции -sn, чтобы узнать, как выполнить только обнаружение хостов, или используйте опцию -Pn, чтобы пропустить обнаружение хостов и осуществить сканирование портов всех целевых машин. С помощью следующих опций можно настраивать функцию обнаружения хостов:

  • -sL (Сканирование с целью составления списка)

Это тип сканирования является «упрощенной» версией функции обнаружения хостов, при помощи которого просто будет создан список хостов заданной сети без посылки каких-либо пакетов целевым машинам. По умолчанию Nmap все же будет осуществлять обратное разрешение DNS с целью узнавания имен хостов. Часто бывает удивительно, как много полезной информации могут содержать обычные имена хостов. Например, fw.chi это имя брандмауэра одной Чикагской компании. В конце Nmap также сообщает общее количество IP адресов. Этот тип сканирования также является хорошим способом проверить, что вы действительно знаете IP адреса необходимых вам целей. Если имена хостов содержат неизвестные вам доменные имена, то стоит провести дальнейшее исследование, чтобы избежать сканирования сети не той компании, которая вам нужна.

Т.к. целью является просто составление списка целевых хостов, то опции с большим уровнем функциональности, такие как сканирование портов, определение ОС или пинг сканирование не могут сочетаться с рассматриваемой опцией. Если вы хотите отключить пинг сканирование, но хотите использовать опции с таким высоким уровнем функциональности, то почитайте об опции -Pn (пропустить пинг).

  • -sn (Без сканирования портов)

Эта опция говорит Nmap не выполнять сканирование портов после обнаружения хоста, а только напечатать доступные хосты, которые ответили на запросы обнаружения хостов. Это хорошо известно как «пинг сканирование», но вы также можете запросить построение маршрута (traceroute) и натравить на цель NSE скрипт. Это позволяет провести лёгкую разведку целевой сети без привлечения слишком большого внимания. Знание как много хостов работают более ценно для атакующих, чем список поставляемый сканированием по построению списка каждого отдельного IP и имени хоста.

Часто системные администраторы находят эту опцию полезной. Она с лёгкостью может использоваться для подсчёта доступных машин в сети или контроля доступности сервера. Это часто называется ping sweep и более надёжно, чем широковещательный адрес, поскольку многие хосты на отвечают на широковещательные запросы.

По умолчанию обнаружение хостов, проводимое с -sn, состоит из эхо запроса ICMP, TCP SYN на порт 443, TCP ACK на порт 80 и запрос временной метки ICMP. При выполнении от непривилегированного пользователя, отправляются только SYN пакеты (используя вызов connect) на порт 80 и 443 цели. Когда привилегированный пользователь пробует сканировать цели в локальной ethernet сети, используются ARP запросы, если не указана опция –send-ip. Опция -sn может быть объединена с любым типом обнаруживающих зондов (-P* опции, за исключением -Pn) для большей гибкости. Если используются какие-либо из этих типов зондирования и опций номеров портов, зонды по умолчанию переписываются. Когда имеется строгий файервол между хостом источником с запущенным Nmap и целевой сетью, рекомендуется использование продвинутых техник. Иначе хосты могут быть пропущены, когда файервол отбрасывает зондирующие запросы или их ответы. В предыдущих релизах Nmap, -sn была известна как -sP.

  • -Pn (Не использовать пинг сканирование)

Указывает Nmap полностью пропустить этап обнаружения хостов. Обычно, Nmap использует этот этап для обнаружения активных машин, к которым можно применить более углубленное сканирование. По умолчанию Nmap производит углубленное сканирование, такое как сканирование портов, определение версии или определение ОС только обнаруженных работающих хостов. После отключения этапа обнаружения хостов опцией -Pn, Nmap будет производить сканирование каждого заданого целевого IP адреса. Так что, если для сканирования будет определена сеть с адресным пространством класса B (/16), то будет произведено сканирование всех 65,536 IP адресов. Т.к. этап обнаружения хостов и составления списка целей сканирования пропущен, то Nmap будет исполнять запрошенные функции, как если бы каждый IP адрес был активен. Для пропуска пинг сканирования и сканирования портов, при этом позволяя запуск NSE, используйте две опции вместе -Pn -sn.

Для машин локальной сети будет произведено ARP сканирование (пока не зададите –disable-arp-ping или –send-ip), т.к. Nmap необходимы MAC адреса для дальнейшего сканирования целевых хостов. Раньше эта опция задавалась флагом -P0 (используется нуль) и -PN, но была переименована, чтобы избежать путаницы с пингованием с использованием IP протокола PO (используется буква O).

  • -PS список_портов (TCP SYN пингование)

Эта опция посылает пустой TCP пакет с установленным SYN флагом. Порт по умолчанию - 80 (можно задать во время компилирования изменяя DEFAULT_TCP_PROBE_PORT_SPEC в nmap.h). Альтернативные порты задаются в качестве параметров. Синтаксис такой же как и для опции -p за исключением того, что спецификаторы типа T: недопустимы.
Примеры:

-PS22

и

-PS22-25,80,113,1050,35000

Имейте в виду, что между списком портов и -PS не должно быть пробела. Если заданы несколько запросов, то они будут посланы параллельно.

Установленные флаг SYN указывает удаленной системе, что вы пытаетесь установить соединение. Если порт назначения закрыт, то в ответ посылается RST (сброс) пакет. Если порт открыт, то удаленная система предпримет второй шаг в 3-х этапной последовательности установки TCP соединения путем ответа SYN/ACK TCP пакетом. Система, на которой работает Nmap, сбрасывает почти установленное соединение отвечая RST пакетом вместо ACK, что привело бы к установке полного соединения. RST пакет посылается ядром системы, на которой работает Nmap, в ответ на непредвиденный SYN/ACK пакет, а не самой Nmap.

Nmap не важно открыт порт или закрыт. Ответы пакетами RST или SYN/ACK описанными выше, указывают Nmap на то, что хост доступен и может отвечать на запросы.

На Unix машинах, обычно только пользователь с правами root способны отправлять и получать сырые TCP пакеты. Для непривилегированного пользователя автоматически применяется обходной путь, при котором для каждого целевого порта инициируется системный вызов connect. Поэтому при попытке установить соединение на целевой хост посылается SYN пакет. Если на вызов connect приходит быстрый ответ или отказ типа ECONNREFUSED, значит TCP стек получил SYN/ACK или RST пакет, и хост помечается как доступный. Если соединение не устанавливается по причине истечения времени (timeout), то хост помечается как не работающий.

  • -PA список_портов (TCP ACK пингование)

Этот тип пингования очень похож на описанный выше SYN пингование. Разница состоит в том, что вместо установки SYN флага устанавливается TCP ACK флаг. Такой ACK пакет имеет цель - распознавание данных во время установленного TCP соединения, но такого соединения не существует, поэтому удаленные хосты всегда будут отвечать на такой запрос RST пакетом, тем самым выдавая свое существование.

Опция -PA использует тот же порт по умолчанию, что и SYN запросы (80), и так же может принимать в качестве параметра список портов в том же формате. Если эту опцию пытается использовать непривилегированный пользователь или задана цель в формате IPv6, то используется механизм с использованием вызова connect описанный выше. Этот механизм несовершенен, т.к. при использовании вызова connect вместо ACK пакета посылается SYN.

Причина, по которой Nmap предоставляет оба типа пингования (SYN и ACK), состоит в повышении шансов обхода брандмауэров. Многие администраторы конфигурируют роутеры или другие простые брандмауэры на блокировку входящих SYN пакетов за исключением тех, что предназначены для публичных служб, таких как веб-сайт или почтовый сервер. Тем самым предотвращаются все остальные соединения, и в то же время пользователи могут беспрепятственно выходить в Интернет. Такой подход не требует много ресурсов от брандмауэров/роутеров и широко поддерживается различными аппаратными и программными фильтрами. Файерволы под Linux Netfilter/iptables для реализации такого подхода имеет опцию –syn. Когда брандмауэр использует такие правила, то запросы с установленным флагом SYN (-PS), посланные на закрытые порты, с большой вероятностью будут заблокированы. В таких случаях более выгодно использовать запросы с флагом ACK, т.к. они не попадают под эти правила.

  • -PU список_портов (UDP пингование)

Еще одной функцией используемой для обнаружения хостов является UDP пингование, которая посылает UDP пакет на данные порты. Для большинства портов пакеты будут пустыми, хотя некоторые используют специфичные для протокола запросы, которые с большей вероятностью вызовут ответ. База данных запросов описана в https://nmap.org/book/nmap-payloads.html и в опциях –data, –data-string и –data-length.

Список портов задается в том же формате, что и для описанных выше опций -PS и -PA. Если порты не заданы, то по умолчанию используется 40125. Порт по умолчанию может быть задан во время компиляции путем изменения DEFAULT_UDP_PROBE_PORT_SPEC в nmap.h. По умолчанию выбран не распростаненный порт, т.к. отправка запросов на открытые порты нежелательна для этого типа сканирования. При пинге закрытого порта на целевой машине целью запроса UDP является получение в ответ ICMP пакета с ошибкой «порт недоступен». Это Nmap указывает на то, что машина работает и доступна. Другие типы ICMP ошибок, такие как хост/сеть недоступна или превышение TTL указывают на то, что машина выключена или недоступна. Отсутствие ответа интерпретируется этим же путем. Если такой запрос посылается на открытый порт, то большинство служб просто игнорируют пустой пакет и не посылают никакого ответа. Поэтому портом по умолчанию является 40125, т.к. он вряд ли будет использоваться какой-либо службой. Лишь некоторые службы, такие как Character Generator (chargen) protocol, ответят на пустой UDP пакет, и это также укажет Nmap на то, что машина доступна.

Основным преимуществом такого типа сканирования является то, что он позволяет обходить брандмауэры, фильтрующие только TCP запросы. Например, однажды у меня был беспроводной широкополосный роутер Linksys BEFW11S4. Внутренний интерфейс этого устройства фильтровал по умолчанию все TCP порты, в то время как в ответ на UDP запросы посылалось сообщение об ошибке «порт недоступен», что выдавало устройство.

  • -PY список_портов (SCTP INIT пингование)

Эта опция отсылает SCTP пакеты содержащие минимальный кусок INIT. Портом назначения по умолчанию является 80 (можно настроить во время компиляции изменив DEFAULT_SCTP_PROBE_PORT_SPEC в nmap.h). Альтернативные порты можно передать в качестве параметров. Синтаксис такой же как и для -p за исключением того, что тип портов, заданные как S, не разрешены.
Примеры:

-PY22

и

-PY22,80,179,5060

. Помните, что может не быть пробела между -PY и списком портов. Если задано несколько зондов, то они будут отправлены параллельно.

Кусок INIT предлагает удалённой системе установить с вами свзяь. Обычно порт назначения оказывается закрытым и обратно будет выслан кусок ABORT. Если случится так, что порт открыт, то цель предпримет второй шаг из четырёхстороннего рукопожатия SCTP, который будет заключаться ответом курском INIT-ACK. Если машина, на которой работает Nmap, имеет функциональный стэк SCTP, то он отвечает куском ABORT, а не отправкой куска COOKIE-ECHO, который был бы следующим шагом в четырёхстороннем рукопожатии. Пакет ABORT отправляется не программой Nmap, а машиной, на которой работает Nmap в ответ на неожиданный INIT-ACK.

Nmap не интересует, открыт порт или закрыт. Что ответ ABORT, что INIT-ACK говорят Nmap, что хосты доступны и отвечают.

На Unix только привилегированный пользователь root, обычно, способен отправлять и получать SCTP пакеты. В настоящее время использование SCTP INIT пингования не доступно для непривилегированных пользователей.

  • -PE; -PP; -PM (Типы пинг пакетов ICMP)

В дополнении к нестандратным методам обнаружения хостов с помощью TCP, UDP и SCTP запросов, Nmap может посылать стандартные пакеты, используемые программой ping. Nmap посылает ICMP пакет типа 8 (эхо запрос) на целевой IP адрес, ожидая в ответ от доступного хоста пакет типа 0 (эхо ответ). К сожалению для сетевых исследователей, многие хосты и брандмауэры теперь блокируют такие пакеты вместо того, чтобы ответить на них, как это требуется в RFC 1122 (ссылка). По этой причине сканеры использующе только ICMP запросы редко бывают полезны при сканировании неизвестных целей в Интернете. Но они могут быть полезны системным администраторам, занимающимся мониторингом внутренней сети. Используйте опцию -PE, чтобы использовать такой тип сканирования.

Но Nmap использует не только стандратный эхо запрос. В стандартах ICMP (RFC 792 и RFC 950)(ссылка) также определены запросы временной метки, информационные запросы и запросы адресной маски с кодами 13, 15 и 17 соответственно. Хотя они служат для того, чтобы узнать какую-либо информацию, такую как адресную маску или текущее время, они могут быть легко применены для обнаружения целей. Система, которая отвечает на них, работает и доступна. В настоящее время Nmap не использует информационные запросы, т.к. они не получили широкого распространения. Стандарт RFC 1122(ссылка) наставивает на том, что “хост НЕ ДОЛЖЕН посылать такие сообщения”. Запросы временной метки или адресной маски могут быть посланы путем задания опций -PP и -PM соответственно. Ответ на запрос временной метки (ICMP код 14) или на запрос адресной маски (код 18) указывают на то, что хост доступен. Эти запросы могут быть полезны, когда администраторы блокируют пакеты эхо запросов, но забывают о том, что другие типы ICMP запросов могут быть использованы в тех же целях.

  • -PO список_протоколов (пингование с использованием IP протокола)

Одной из опций для обнаружения хостов является пингование с использованием IP протокола, которая посылает IP пакеты с номером протокола, указанным в заголовке пакета. Список протоколов задается в том же формате, что и список портов в описанных выше опциях обнаружения хостов с помощью протоколов TCP, UDP и SCTP. Если не указан ни один протокол, то по умолчанию будут использованы IP пакеты ICMP (протокол 1), IGMP (протокол 2) и IP-in-IP (протокол 4). Протоколы по умолчанию могут быть заданы во время компиляции путем изменения DEFAULT_PROTO_PROBE_PORT_SPEC в nmap.h. Имейте в виду, что для ICMP, IGMP, TCP (протокол 6), UDP (протокол 17) и SCTP (протокол 132) пакеты посылаются с «правильными» заголовками протокола, в то время как для остальных протоколов пакеты посылаются без дополнительной информации после IP заголовка (пока не задана опция –data, –data-string или –data-length).

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

  • -PR (ARP пингование)

Одной из наиболее популярных сфер применения Nmap является сканирование локальных сетей (LAN). В большинстве локальных сетей, особенно тех, которые используют диапазоны частных адресов определенные в RFC 1918(ссылка), большое количество IP адресов не используется долгое время. Когда Nmap пытается послать сырой IP пакет, такой как ICMP эхо запрос, операционная система должна определить MAC-адрес (ARP) соответствующий целевому IP, чтобы правильно адресовать пакет. Это часто бывает медленно и проблематично, т.к. операционные системы не были созданы с учетом того, что им придется посылать миллионы ARP запросов недоступным хостам в короткий промежуток времени.

ARP сканирование позволяет Nmap вместо ARP запросов использовать свои собственные оптимизированные алгоритмы. И если Nmap получает ответ, то ей даже нет необходимости беспокоиться о других типах обнаружения хостов, основанных на IP пакетах. Это делает ARP сканирование более быстрым и надежным, чем основанное на IP сканировании. Поэтому оно применяется по умолчанию для сканирования локальных сетей. Даже если указаны другие типы сканирования (как -PE или -PS), Nmap все равно использует ARP сканирование для машин локальной сети. Если вы не хотите использовать такой тип сканирования, то задайте опцию –disable-arp-ping.

Для IPv6 (опция -6), -PR использует ICMPv6 Neighbor Discovery (обнаружение соседей) вместо ARP. Neighbor Discovery, как определено в RFC 4861(ссылка), можно рассматривать как IPv6 эквивалент ARP.

  • –disable-arp-ping (Без пинга ARP или ND)

Обычно Nmap выполняет обнаружение ARP или IPv6 Neighbor Discovery (ND) подключённых локально ethernet хостов, даже если используются другие опции обнаружения, такие как -Pn или -PE. Для отключения этого неявного поведения используйте опцию –disable-arp-ping. Поведение по умолчанию обычно быстрее, но эта опция полезна в сетях, использующих прокси ARP, в которых роутер предположительно отвечает на все ARP запросы, создавая видимость, что любая цель доступна в соответствии с ARP сканированием.

  • –traceroute (Отслеживать путь к хосту)

Отслеживание осуществляется после сканирования, используя результаты этого сканирования для определения порта и протокола, с помощью которых можно будет достичь цели. Процедура работает со всеми типами сканирования, кроме сканирования с использованием системного вызова connect (-sT) и «ленивого» (idle) сканирования (-sI). Все отслеживания используют динамическую модель таймингов Nmap и осуществляются параллельно.

Процедура отслеживания маршрута работает путем посылки пакетов с низким TTL (time-to-live - временем-жизни) в попытке получить в ответ ICMP сообщение Time Exceeded (Превышение Времени Жизни) от промежуточных узлов между сканером и целевым хостом. Стандартные реализации процедуры отслеживания маршрута начинают с TTL равным 1, а затем увеличивают его до тех пор, пока не будет достигнут целевой хост. В реализации же этой процедуры в Nmap сначала устанавливается высокий TTL, а затем TTL уменьшается, пока не станет равным 0. Это позволяет Nmap использовать «умные» алгоритмы кэширования с целью увеличения скорости отслеживания маршрута. В среднем Nmap посылает 5-10 пакетов на хост, в зависимости от условий в сети. В случае сканирования единственной подсети (напр. 192.168.0.0/24), возможно будет необходимо послать только один пакет на каждый хост.

  • -n (Без преобразования DNS)

Указывает Nmap никогда не производить обратное разрешение DNS имен каждого обнаруженного активного IP адереса. Преобразование DNS может быть медленным даже со встроенным в Nmap параллельным преобразователем IP адресов, поэтому данная опция может сократить время сканирования.

  • -R (Производить разрешение DNS имен для всех целей)

Указывает Nmap всегда производить обратное разрешение DNS имен для каждого целевого IP адреса. Обычно DNS преобразование применяется только к доступным хостам.

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

По умолчанию Nmap преобразует IP адреса путем посылки запросов непосредственно серверам имен, указанным в вашей системе, и последующим анализом ответов. Многие запросы (часто десятки) исполняются параллельно для увеличения производительности. Задайте эту опцию, чтобы использовать ваш системный преобразователь IP адресов (один IP адрес за один системный вызов getnameinfo). Это медленно и редко бывает полезно, до тех пор, пока вы не найдете ошибку в параллельном преобразователе Nmap (если найдете, известите нас, пожалуйста). Системный преобразователь всегда используется для сканирования с использованием протокола IPv6.

  • –dns-servers server1[,server2[,…]] (Сервера для обратного разрешения DNS)

По умолчанию Nmap определяет DNS сервера (для разрашения rDNS) из вашего resolv.conf файла (Unix) или из реестра (Win32). Вы можете использовать эту опцию для задания альтернативных серверов. Эта опция игнорируется, если вы используете –system-dns или сканирование по протоколу IPv6. Использование нескольких DNS серверов часто увеличивает скорость сканирования, особенно если вы выбираете официальные сервера для IP пространства вашей цели. Эта опция также может увеличить незаметность, т.к. ваши запросы могут быть перенаправлены любым рекурсивным DNS сервером в Интернете.

Эта опция также бывает полезна при сканировании частных сетей. Иногда лишь некоторые сервера имен предоставляют правильную rDNS информацию, и вы можете даже не знать, где они. Вы можете просканировать сеть на наличие открытого порта 53 (возможно с помощью фукнкции определения версии), затем попробовать составить список (-sL) указывая по очереди все сервера имен в опции –dns-servers до тех пор, пока не найдете тот, который работает.


Основы сканирования портов

Хотя Nmap постоянно наращивала функциональность, изначально утилита разрабатывалась как эффективный сканер портов, и она по-прежнему сохраняет свои основные функции. Простой командой nmap может произвести сканирование 1000 TCP портов на целевой машине. В то время как многие сканеры портов традиционно разделяют все порты на закрытые и открытые, Nmap имеет более подробную шкалу деления. Она подразделяет порты на шесть состояний: открыт, закрыт, фильтруется, не фильтурется, открыт|фильтруется или закрыт|фильтруется.

Эти состояния не являются характеристиками самих портов, а лишь описывают так, как Nmap видит их.
Например, сканирование из той же сети, что и цель, может показать, что порт 135/tcp открыт, в то время как сканирование из Интернета в то же время и с теми же опциями может показать, что порт фильтруется.


Шесть состояний портов распознаваемых Nmap


Основные приемы сканирования портов


Определение ОС


Различные опции


Примеры запуска Nmap


Ссылки