Инструменты пользователя

Инструменты сайта


nmap

FIXME

NMap

Последняя версия: 7.10 (17 марта 2016)

Описание 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 открыт, в то время как сканирование из Интернета в то же время и с теми же опциями может показать, что порт фильтруется.


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

  • Открыт: Приложение принимает запросы на TCP соединение, UDP пакеты или SCTP ассоциации на этот порт. Обнаружение этого состояния обычно является основной целью сканирования. Люди разбирающиеся в безопасности знают, что каждый открытый порт это прямой путь к осуществлению атаки. Атакующие хотят использовать открытые порты, а администраторы пытаются закрыть их или защитить с помощью брадмауэров так, чтобы не мешать работе обычных пользователей. Открытые порты также интересны с точки зрения сканирования, не связанного с безопасностью, т.к. они позволяют определить службы доступные в сети.
  • Закрыт: Закрытый порт доступен (он принимает и отвечает на запросы Nmap), но не используется каким-либо приложением. Они могут быть полезны для установления, что по заданному IP адресу есть работающий хост (определение хостов, ping сканирование), или для определения ОС. Т.к. эти порты достижимы, может быть полезным произвести сканирование позже, т.к. некоторые из них могут открыться. Администраторы могут заблокировать такие порты с помощью брандмауэров. Тогда их состояние будет определено как фильтруется, что обсуждается далее.
  • Фильтруется: Nmap не может определить, открыт ли порт, т.к. фильтрация пакетов не позволяет достичь запросам Nmap этого порта. Фильтрация может осуществляться выделенным брадмауэром, правилами роутера или брандмауэром на целевой машине. Эти порты бесполезны для атакующих, т.к. предоставляют очень мало информации. Иногда они отвечают ICMP сообщениями об ошибке, такими как тип 3 код 13 (destination unreachable: communication administratively prohibited (цель назначения недоступна: связь запрещена администратором)), но чаще встречаются фильтры, которые отбрасывают запросы без предоставления какой-либо информации. Это заставляет Nmap совершить еще несколько запросов, чтобы убедиться, что запрос был отброшен фильтром, а не затором в сети. Это очень сильно замедляет сканирование.
  • Не фильтруется: Это состояние означает, что порт доступен, но Nmap не может определить открыт он или закрыт. Только ACK сканирование, используемое для определения правил брандмауэра, может охарактеризовать порт этим состоянием. Сканирование не фильтруемых портов другими способами, такими как Window сканирование, SYN сканирование или FIN сканирование может помочь определить, является ли порт открытым.
  • Открыт|фильтруется: Nmap характеризует порт таким состоянием, когда не может определить открыт порт или фильтруется. Это состояние возникает при таких типах сканирования, при которых открытые порты не отвечают. Отсутствие ответа также может означать, что пакетный фильтр не пропустил запрос или ответ не был получен. Поэтому Nmap не может определить наверняка открыт порт или фильтруется. При сканировании UDP, по IP протоколу, FIN, NULL, а также Xmas порт может быть охарактеризован таким состоянием.
  • Закрыт|фильтруется: Это состояние используется, когда Nmap не может определить закрыт порт или фильтруется. Используется только при сканировании IP ID idle типа.

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

В этом разделе описываются около дюжины способов сканирования портов поддерживаемых Nmap. В любой момент времени вы можете использовать только один метод; исключение составляет UDP сканирование (-sU) и один из типов сканирования SCTP (-sY, -sZ), которые могут быть скомбинированы с любым типом TCP сканирования. В качестве памятки имейте ввиду, что различные опции сканирования портов задаются в форме -sC, где C это символ из названия какого-либо типа сканирования, обычно первый. Единственное исключение это FTP bounce сканирование (-b). По умолчанию Nmap осуществляет SYN сканирование; этот тип сканирования заменяет сканирование с использованием соединения для пользователей не имеющих достаточных привилегий для отправки сырых пакетов (требует root доступа в Unix). Среди описанных ниже типов сканирования, непривилегированные пользователи могут осуществлять только сканирование с использованием соединения и FTP bounce сканирование.

  • -sS (TCP SYN сканирование)

SYN это используемый по умолчанию и наиболее популярный тип сканирования. На то есть несколько причин. Он может быть быстро запущен, он способен сканировать тысячи портов в секунду при быстром соединении, его работе не препятствуют ограничивающие бранмауэры. Этот тип сканирования относительно незаметен, т.к. при таком сканировании TCP соединение никогда не устанавливается до конца. Он работает с любым TCP стеком, не завися от каки-либо особенностей специфичной платформы, как это происходит при сканированиях типа FIN/NULL/Xmas, Maimon и idle сканировании. Он также предоставляет ясную и достоверную дифференциацию между состояниями открыт, закрыт и фильтруется.

Эту технику часто называют сканированием с использованием полуотрытых соединений, т.к. вы не открываете полного TCP соединения. Вы посылаете SYN пакет, как если бы вы хотели установить реальное соединение и ждете. Ответы SYN/ACK указывают на то, что порт прослушивается (открыт), а RST (сброс) на то, что не прослушивается. Если после нескольких запросов не приходит никакого ответа, то порт помечается как фильтруемый. Порт также помечается как фильтруемый, если в ответ приходит ICMP сообщение об ошибке недостижимости (тип 3, код 1,2, 3, 9, 10 или 13). Порт также расценивается как открытый, если в ответе получен SYN пакет (без флага ACK). Это возможно благодаря крайне редкой функции TCP известной как одновременно открытые или подключение раздельного рукопожатия (смотрите https://nmap.org/misc/split-handshake.pdf).

  • -sT (TCP сканирование с использованием системного вызова connect)

Это используемый по умолчанию тип TCP сканирования, когда недоступно SYN сканирование. Это происходит в случае, когда у пользователя нет привилегий для использования сырых пакетов. Вместо того, чтобы использовать сырые пакеты, как это происходит при большинстве других типов сканирования, Nmap «просит» операционную систему установить соединение с целевой машиной по указанному порту путем системного вызова connect. Это такой же высокоуровневый системный вызов, используемый браузерами, P2P клиентами и другими приложениями для установки соединения. Этот вызов является частью программируемого интерфейса, известного как Berkeley Sockets API. Вместо того, чтобы считывать ответы в форме сырых пакетов, Nmap использует этот API для получения информации о статусе каждой попытки соединения.

При доступности SYN сканирования, оно, безусловно, будет являться лучшим выбором. У Nmap имеется меньше возможностей контролирования высокоуровнего вызова connect по сравнению с сырыми пакетами, что делает его менее эффективным. Системный вызов завершает соединения по открытым портам, вместо того, чтобы использовать полуоткрытые соединения, как в случае с SYN сканированием. Таким образом на получение той же самой информации потребуется больше времени и пакетов, да к тому же целевые машины скорее всего запишут это соединение в свои логи. То же самое сделает и порядочная IDS, хотя большинство машин не имеют такой системы защиты. Многие службы на вашей Unix системе будут добавлять запись в системный лог (syslog), а также сообщение об ошибке, когда Nmap будет устанавливать и закрывать соединение без отправления данных. Некоторые службы даже аварийно завершают свою работу, когда это происходит, хотя это не является обычной ситуацией. Администратор, который увидит в логах группу записей о попытке установки соединения от одной и той же системы, должен знать, что его машина подверглась такому типу сканирования.

  • -sU (Различные типы UDP сканирования)

В то время как большинство сервисов Интернета используют TCP протокол, UDP службы также широко распространены. Тремя наиболее популярными являются DNS, SNMP и DHCP (используют порты 53, 161/162 и 67/68). Т.к. UDP сканирование в общем случае медленнее и сложнее TCP, то многие специалисты по безопасности игнорируют эти порты. Это является ошибкой, т.к. существуют UDP службы, которые используются атакующими. К счастью, Nmap позволяет инвентаризировать UDP порты.

UDP сканирование запускается опцией -sU. Оно может быть скомбинировано с каким-либо типом TCP сканирования, например SYN сканирование (-sS), чтобы использовать оба протокола за один проход.

UDP сканирование работает путем посылки пустого (без данных) UDP заголовка на каждый целевой порт. На такие самые популярные порты как 53 и 161 отправляется специфичная полезная нагрузка для увеличения вероятности ответа, но для большинства портов пакеты пусты, если не указаны опции --data, --data-string или --data-length. Если в ответ приходит ICMP ошибка о недостижимости порта (тип 3, код 3), значит порт закрыт. Другие ICMP ошибки недостижимости (тип 3, коды 0, 1, 2, 9, 10 или 13) указывают на то, что порт фильтруется. Иногда, служба будет отвечать UDP пакетом, указывая на то, что порт открыт. Если после нескольких попыток не было получено никакого ответа, то порт классифицируется как открыт|фильтруется. Это означает, что порт может быть открыт, или, возможно, пакетный фильтр блокирует его. Функция определения версии (-sV) может быть полезна для дифференциации действительно открытых портов и фильтруемых.

Большой проблемой при UDP сканировании является его медленная скорость работы. Открытые и фильтруемые порты редко посылают какие-либо ответы, заставляя Nmap отправлять повторные запросы, на случай если пакеты были утеряны. Закрытые порты часто оказываются еще большей проблемой. Обычно они в ответ возвращают ICMP ошибку о недостижимости порта. Но в отличии от RST пакетов отсылаемых закрытыми TCP портами в ответ на SYN или сканирование с установкой соединения, многие хосты ограничивают лимит ICMP сообщений о недостижимости порта по умолчанию. Linux и Solaris особенно строги в этом плане. Например, ядро Linux 2.4.20 огранивает количество таких сообщений до одного в секунду (в net/ipv4/icmp.c).

Nmap обнаруживает такого рода ограничения и соответственно сокращает количество запросов, чтобы не забивать сеть бесполезными пакетами, которые все равно будут отброшены целевой машиной. К сожалению, при ограничении в стиле Linux (один пакет в секунду) сканирование 65,536 портов займет более 18 часов. К способам увеличения скорости UDP сканирования относятся: параллельное сканирование нескольких хостов, сканирование в первую очередь только наиболее популярных портов, сканирование из-за брандмауэра и использование --host-timeout для пропуска медленных хостов.

  • -sY (сканирование SCTP INIT)

SCTP - это сравнительно новая альтернатива протоколам TCP и UDP, комбинируя большинство черт TCP и UDP, а также добавляя новые функции такие как множественная адресация и многопоточная передача, она в основном используется для служб связанных с SS7/SIGTRAN, но имеет потенциал быть также использованной и для других приложений. Сканирование SCTP INIT - это эквивалент SCTP сканирования TCP SYN. Оно может быть быстро выполнено сканируя тысячи портов в секунду на быстрых сетях не заторможенных ограничительными файерволами. Как SYN сканирование, сканирование INIT сравнительно ненавязчиво и незаметно, поскольку оно никогда не завершает SCTP ассоциации. Оно также позволяет чистое, надёжное различие между открытым, закрытым и фильтруемым состоянием.

  • -sN; -sF; -sX (TCP NULL, FIN и Xmas сканирования)

Эти три типа сканирования используют (другие типы сканирования доступны с использованием опции --scanflags описанной в другой секции) незаметную лазейку в TCP RFC, чтобы разделять порты на открытые и закрытые. На странице 65 RFC 793 говорится, что “если порт назначения ЗАКРЫТ …. входящий сегмент не содержащий RST повлечет за собой отправку RST в ответ.” На следующей странице, где обсуждается отправка пакетов без установленных битов SYN, RST или ACK, утверждается что: “вы вряд ли с этим столкнетесь, но если столкнетесь, то сбросьте сегменты и вернитесь к исходному состоянию.”

Когда сканируется система отвечающая требованиям RFC, любой пакет, не содержащий установленного бита SYN, RST или ACK, повлечет за собой отправку RST в ответ в случае, если порт закрыт, или не повлечет никакого ответа, если порт открыт. Т.к. ни один из этих битов не установлен, то любая комбинация трех оставшихся (FIN, PSH и URG) будет являться правильной.

Nmap использует это в трех типах сканирования:

Null сканирование (-sN) Не устанавливаются никакие биты (Флагов в TCP заголовоке 0)

FIN сканирование (-sF) Устанавливается только TCP FIN бит.

Xmas сканирование (-sX) Устанавливаются FIN, PSH и URG флаги, разукрашивающие пакет как новогоднюю ёлку.

Эти три типа сканирования работают по одной схеме, различия только в TCP флагах установленных в пакетах запросов. Если в ответ приходит RST пакет, то порт считается закрытым, отсутствие ответа означает, что порт открыт|фильтруется. Порт помечается как фильтруется, если в ответ приходит ICMP ошибка о недостижимости (тип 3, код 0, 1, 2, 3, 9, 10 или 13).

Ключевым преимуществом этих типов сканирования является их способность незаметно обойти некоторые не учитывающие состояние (non-stateful) брандмауэры и роутеры с функцией пакетной фильтрации. Еще одним преимуществом является то, что они даже чуть более незаметны, чем SYN сканирование. Все же не надо на это полагаться - большинство современных IDS могут быть сконфигурированы на их обнаружение. Большим недостатком является то, что не все системы следуют RFC 793 дословно. Некоторые системы посылают RST ответы на запросы не зависимо от того, открыт порт или закрыт. Это приводит к тому, что все порты помечаются как закрытые. Основными системами ведущими себя подобным образом являются Microsoft Windows, многие устройства Cisco, BSDI и IBM OS/400. Хотя такое сканирование применимо к большинству систем, основанных на Unix. Еще одним недостатком этих видов сканирования является их неспособность разделять порты на открытые и фильтруемые, т.к. порт помечается как открыт|фильтруется.

  • -sA (TCP ACK сканирование)

Этот тип сканирования сильно отличается от всех других тем, что он не способен определить открытый порт (или даже открытый|фильтруемый). Он используются для выявления правил брандмауэров, определения учитывает ли он состояние или нет, а также для определения фильтруемых ими портов.

Пакет запроса при таком типе сканирования содержит установленным только ACK флаг (если не используется --scanflags). При сканировании нефильтруемых систем, открытые и закрытые порты оба будут возвращать в ответ RST пакет. Nmap помечает их как не фильтруемые, имея ввиду, что они достижимы для ACK пакетов, но неизвестно открыты они или закрыты. Порты, которые не отвечают или посылают в ответ ICMP сообщение об ошибке (тип 3, код 0, 1, 2, 3, 9, 10 или 13), помечаются как фильтруемые.

  • -sO (Сканирование IP протокола)

Сканирование такого типа позволяет определить, какие IP протоколы (TCP, ICMP, IGMP и т.д.) поддерживаются целевыми машинами. Технически такое сканирование не является разновидностью сканирования портов, т.к. при нем циклически перебираются номера IP протоколов вместо номеров TCP или UDP портов. Хотя здесь все же используется опция -p для выбора номеров протоколов для сканирования, результаты выдаются в формате таблицы портов, и даже используется тот же механизм сканирования, что и при различных вариантах сканирования портов. Поэтому он достаточно близок к сканированию портов и описывается здесь.

Помимо полезности непосредственно в своей сфере применения, этот тип сканирования также демонстрирует всю мощь открытого программного обеспечения (open-source software). Хотя основная идея довольна проста, я никогда не думал включить такую функцию в Nmap, и не получал запросов на это. Затем, летом 2000-го, Джерард Риджер (Gerhard Rieger) развил эту идею, написал превосходный патч воплощающий ее и отослал его на nmap-hackers рассылку. Я включил этот патч в Nmap и на следующий день выпустил новую версию. Лишь единицы коммерческого программного обеспечения могут похвастаться пользователями, достаточно полными энтузиазма для разработки и предоставления своих улучшений!

Способ работы этого типа сканирования очень похож на реализованный в UDP сканировании. Вместо того, чтобы изменять в UDP пакете поле, содержащее номер порта, отсылаются заголовки IP пакета, и изменяется 8 битное поле IP протокола. Заголовки обычно пустые, не содержащие никаких данных и даже правильного заголовка для требуемого протокола. Исключениями явлются TCP, UDP, ICMP, SCTP и IGMP. Включение правильного заголовка для этих протоколов необходимо, т.к. в противном случае некоторые системы не будут их отсылать, да и у Nmap есть все необходимые функции для их создания. Вместо того, чтобы ожидать в ответ ICMP сообщение о недостижимости порта, этот тип сканирования ожидает ICMP сообщение о недостижимости протокола. Если Nmap получает любой ответ по любому протоколу, то протокол помечается как открытый. ICMP ошибка о неостижимости протокола (тип 3, код 2) помечает протокол как закрытый. Другие ICMP ошибки недостижимости (тип 3, код 0, 1, 9, 10 или 13) помечают протокол как фильтруемый (в то же время они показывают, что протокол ICMP открыт). Если не приходит никакого ответа после нескольких запросов, то протокол помечается как открыт|фильтруется.

  • -b передаточный FTP хост (FTP bounce сканирование)

Интересной возможностью FTP протокола (RFC 959) является поддержка так называемых прокси FTP соединений. Это позволяет пользователю подключиться к одному FTP серверу, а затем попросить его передать файлы другому. Это является грубым нарушением, поэтому многие сервера прекратили поддерживать эту функцию. Используя эту функцию, можно осуществить с помощью данного FTP сервера сканирование портов других хостов. Просто попросите FTP сервер переслать файл на каждый интересующий вас порт целевой машины по очереди. Сообщение об ошибке укажет: открыт порт или нет. Это хороший способ обхода брандмауэров, т.к. организационные FTP сервера обычно имеют больше доступа к другим внутренним хостам, чем какие-либо другие машины. В Nmap такой тип сканирования задается опцией -b. В качестве аргумента ей передается имя_пользователя:пароль@сервер:порт. Сервер - это сетевое имя или IP адрес уязвимого FTP сервера. Как и в случае в обычными URL, вы можете опустить имя_пользователя:пароль, тогда будут использованы анонимные данные (пользователь: anonymous пароль:-wwwuser@). Номер порта (и предшествующее ему двоеточие) также можно не указывать; тогда на сервере будет использован FTP порт по умолчанию (21) для подключения к серверу.

Эта уязвимость была широко распространена в 1997, когда была выпущена Nmap, но теперь почти везде исправлена. Уязвимые сервера по-прежнему есть, так что, если ничего другое не помогает, то стоит попробовать. Если вашей целью является обход бранмауэра, то просканируйте целевую сеть на наличие открытого порта 21 (или даже на наличие любых FTP служб, если вы используете определение версии), а затем используйте NSE скрипт ftp-bounce. Nmap скажет вам, уязвим хост или нет. Если вы просто пытаетесь замести следы, то вам нет необходимости (и, фактически, не следует) ограничивать себя только хостами целевой сети. Перед тем как вы начнете сканировать произвольные Интернет адреса на наличие уязвимого FTP сервера, имейте ввиду, что многим системным администраторам это не понравится.


3) Определение портов и порядка сканирования

В дополнении ко всем методам сканирования описанными ранее, Nmap предлагает опции для определения портов для сканирования, а также порядка сканирования: произвольного или последовательного. По умолчанию, Nmap сканирует 1000 самых распространённых портов для каждого протокола.

-p диапазон портов (Сканирование только определенных портов)

С помощью этой опции вы можете определить, какие порты вы хотите просканировать и переопределить установки по умолчанию. Указание отдельных номеров портов допустимо, как и задание диапазонов портов разделенных дефисом (напр. 1-1023). Начальные и/или кончные значения диапазонов могут быть опущены, что заставит Nmap использовать 1 и 65535 соответственно. Поэтому вы можете задать опцию -p чтобы просканировать все порты от 1 до 65535. Сканирование нулевого порта допустимо, если вы укажене его явно. Для сканирования IP протоколов (-sO), эта опция указывает номер протокола, на который вы хотите просканировать (0–255).

Когда сканируете комбинацию протоколов (например TCP и UDP), вы можете задать определенный протокол указав перед номерами портов T для TCP, U для UDP, S для SCTP или P для IP протоколов. Определитель будет действовать до того момента, пока вы не зададите другой. Например, при задании аргумента -p U53,111,137,T21-25,80,139,8080 будут просканированы UDP порты 53,111, и 137, а также все перечисленные TCP порты. Имейте в виду, что для сканирования обоих и UDP и TCP портов, вы должны указать опцию -sU и, по крайне мере, один из типов сканирования TCP (таких как -sS, -sF или -sT). Если определитель прокотола не указан, то перечисленные порты будут добавлены ко всем протоколам. Порты также могут быть заданы именами, которые указаны в nmap-services. Вы даже можете использовать символы ? и * с именами. Например, чтобы просканировать FTP и все порты, чьи имена начинаются с “http”, используйте -p ftp,http*. Будьте осторожны при вводе этой команды и лучше заключите аргумент -p в кавычки.

Диапазоны портов могут быть заключены в квадратные скобки, чтобы определить порты внутри этого диапазона, которые упомянуты в nmap-services. Например, с помощью следующей команды будут просканированы все порты из nmap-services равные или меньшие 1024: -p [-1024]. Будьте осторожны при вводе этой команды и лучше заключите аргумент -p в кавычки.

-F (Быстрое (ограниченные порты) сканирование)

Указывает, что вы хотите произвести сканирование только нескольких портов, а не набор по умолчанию. Обычно Nmap сканирует 1000 популярных портов для каждого сканируемого протокола. С опцией -F это число уменьшается до 100.

Для Nmap нужен файл nmap-services с информацией о частоте, чтобы узнать, какие порты самые распространённые. Если информация о частоте недоступна, возможно из-за использования пользовательского файла nmap-services, Nmap в этом случае сканирует все названные порты плюс 1-1024. -F означает сканировать только порты, которые названы в файле служб.

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

По умолчанию, Nmap использует произвольный порядок сканирования портов (исключение составляют лишь наиболее часто употребляемые порты, которые расположены в начале списка сканирования по причинам эффективности). Обычно эта случайность нужна, но вы можете задать опцию -r, чтобы использовать прямой порядок сканирования (сортировка от самого низкого к самому высокому).


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

Одна из наиболее известных функциональных возможностей Nmap это удаленное определение ОС на основе анализа работы стека TCP/IP. Nmap посылает серию TCP и UDP пакетов на удаленный хост и изучает практически каждый бит в ответах. После проведения дюжины тестов таких как TCP ISN выборки, поддержки опций TCP, IP ID выборки, и анализа продолжительности процедуры инициализации, Nmap сравнивает результаты со своей nmap-os-db базой данных, состоящей из более чем 2600 известных наборов типичных результатов для различных ОС и, при нахождении соответствий, выводит информацию об ОС. Каждый набор содержит свободное текстовое описание ОС и классификацию, в которой указаны название производителя (напр. Sun), название ОС (напр. Solaris), поколение ОС (напр. 10), и тип устройства (общего назначения, роутер, свич, игровая консоль и т.д.). Большинство отпечатков также имеют представление Common Platform Enumeration (CPE), вроде cpe:/o:linux:linux_kernel:2.6.
Если Nmap не может определить ОС, но для этого есть хорошие предпосылки (например, по крайней мере, найдены один открытый и один закрытый порты), то Nmap предоставит URL, по которому, если вы точно знаете, какая ОС используется, вы сможете предоставить набор ее характеристик. Тем самым вы внесете свой вклад в дополнение базы данных известных ОС Nmap, и она будет более полезна для всех остальных.

Опция определения ОС также активирует проведение некоторых других тестов, которые позволяют воспользоваться собираемой в процессе работы информацией. Один из них Классификация Предсказуемости Последовательности TCP (TCP Sequence Predictability Classification). Это позволяет приблизительно определить, насколько сложно установить ложное TCP соединение с удаленным хостом. Это может быть полезно для взлома и эксплуатации программ, базирующихся на доверительных отношениях (rlogin, фильтры брандмауэров и т.д.) или для сокрытия источника атаки. Этот тип спуфинга (spoofing) теперь редко используется, но многие машины все еще уязвимы к такого рода атакам. Число, характеризующее сложность, базируется на статистической выборке и может колебаться. Обычно лучше использовать классификацию с использованием английских фраз типа “worthy challenge (достойное испытание)” или “trivial joke (шуточное дело)”. Эта информация будет выведена только при включенном вербальном режиме (-v). Когда вербальный режим активирован вместе с опцией -O, то выводится также информация о генерации IP ID последовательности. Большинство машин находятся в классе “incremental(возрастающий)”, что означает, что они увеличивают поле ID в IP заголовке для каждого посланного пакета. Это делает их уязвимыми к спуфинг (spoofing) атакам и атакам с целью сбора расширенной информации.

Также во время определения ОС делается попытка узнать время работы целевой машины. С помощью временных меток (timestamp) TCP (RFC 1323) Nmap пробует угадать, когда машина была перезагружена в последний раз. Информация может быть не точна, т.к. счетчик временной метки не был обнулен или был переполнен, или каким-то образом скрыт. Информация выводится только в вербальном режиме. Бумажная документация по работе, использованию и настройки опции определения ОС находится на https://nmap.org/book/osdetect.html.

Функция определения ОС включается и управляется с помощью следующих опций:

  • -O (Включить определение ОС)

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

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

Функция определения ОС намного более эффективна, если обнаружены, по крайней мере, один открытый и один закрытый TCP порты. Задайте эту опцию, и Nmap не будет даже пытаться определить ОС хостов, не удовлетворяющих этому критерию. Это поможет сэкономить массу времени, особенно при -Pn сканирование многих хостов. Эта опция будет действовать только при включении функции ОС путем задания опций -O или -A.

  • --osscan-guess; --fuzzy (Угадать результаты определения ОС)

Когда Nmap не в состоянии определеить точное совпадение, она иногда предоставляет наиболее близкие к результатам сканирования совпадения. Чтобы Nmap сделала это по умолчанию, совпадения должны быть очень близки. Любая их этих (равных) опций побуждает Nmap к более агрессивному анализу результатов. Nmap по-прежнему будет сообщать, когда будет найдено не идеальное совпадение, а также отображать стпень соответствия (в процентах) для каждого набора характеристик.

  • --max-os-tries (Устанавливает максимальное количество попыток определения ОС)

Когда Nmap пытается определить ОС на целевом хосте и не может найти идеального соответствия результатов, то она обычно повторяет попытку. По умолчанию, Nmap совершает пять попыток при условии, что существуют благоприятные условия для определения ОС, и дважды - в противном случае. Задание более низкого значения --max-os-tries (напр. 1) увеличивает скорость работы Nmap, однако вы пропускаете некоторые записи, с помощью которых, возможно, можно было бы определить ОС. Большое значение может быть задано для разрешения большего количества попыток при благоприятных условиях. Это делается редко, за исключением тех случаев, когда необходимо сгенерировать более детальный набор характеристик ОС для занесения в базу данных Nmap.


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

В этой секции описываются некоторые важные (и не очень важные) опции, которые не подходят к другим категориям.

  • -6 (Включает IPv6 сканирование)

Nmap имеет поддержку протокола IPv6 для своих наиболее используемых функций. В частности, пинг сканирование, сканирование портов, определение версий и скриптовый движок Nmap - всё они имеют поддержку протокола IPv6. Синтаксис команд такой же как и обычный за исключением того, что вы добавляете опцию -6. Конечно же, вы должны использовать синтаксис IPv6, если вы указываете адрес, а не имя хоста. Адрес может выглядеть как 3ffe:7501:4819:2000:210:f3ff:fe03:14d0, поэтому лучше использовать имена хостов. Вывод выглядит так же как и обычный, только на линии “интересных портов” будет IPv6 адрес.
Хотя протокол IPv6 еще не завоевал весь мир, в некоторых (обычно Азиатских) странах он используется интенсивно, и большинство современных операционных систем поддерживают его. Чтобы использовать Nmap с протоколом IPv6, и источник и цель сканирования должны быть настроены на работу с ним. Если ваш ISP (как большинство из них) не предоставляет вам IPv6 адрес, вы можете использовать широко распространенный и работающий с Nmap сервис Tunnel Brokers. Я использую бесплатный сервис на http://www.tunnelbroker.net. Другие подобные сервисы перечислены на Wikipedia. Другим популярным бесплатным методом являются туннели 6to4.

  • -A (Опции агрессивного сканирования)

Этой опцией активируется набор агрессивных опций сканирования. Сейчас этот набор включает определение ОС (-O), сканирование с целью определения версии (-sV), сканирование с использованием скриптов (-sC) и трассировку (--traceroute). Возможно в будущем будут добавлены другие функции. Целью является создание всестороннего набора опций сканирования, чтобы людям не надо было запоминать большое количество флагов. Тем не менее, т.к. сканирование с использованием скриптов с настройками по умолчанию расценивается как «назойливое», вам не следует использовать опцию -A для сканирования целевых сетей без разрешения. Эта опция активирует только возможности, но не устанавливает опции времени (timing) (такие как -T4) или опции вербального вывода (-v), которые вы, возможно, хотели бы использовать.

  • -V; --version (Вывести номер версии)

Выводит номер версии Nmap и завершает работу.

  • -h; --help (Вывести страницу помощи)

Выводит небольшую страницу помощи с наиболее часто используемыми командами и опциями. Запуск Nmap без аргументов приводит к такому же результату.


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

Здесь приведены несколько примеров использования Nmap, от самых простых до более изощренных. Некоторые реально существующие IP адреса и доменные имена использованны для того, чтобы сделать примеры более конкретными. На их место вы должны подставить адреса/имена из вашей собственной сети.. В то время как сканирование портов некоторой сети не является незаконным, некоторым администраторам сетей может не понравиться своевольное сканирование их сетей и они могут пожаловаться. Для начала постарайтесь получить разрешение.
В целях тестирования у вас есть разрешение сканировать scanme.nmap.org. Вы можете использовать сканирование с помощью Nmap, но не тестировать эксплоиты или производить атаки отказа в обслуживании. Для того чтобы не перегружать канал, пожалуйста, не производите более дюжины сканирований этого хоста в день. В случае злоупотребления этим свободным для сканирования хостом, он будет отключен и Nmap выдаст Failed to resolve given hostname/IP: scanme.nmap.org (не могу разрешить данное имя/IP: scanme.nmap.org). Все выше сказанное также относится и к хостам scanme2.nmap.org, scanme3.nmap.org, и так далее, несмотря на то, что эти хосты еще не существуют.

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

nmap -v scanme.nmap.org

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

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

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

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

Указывает Nmap выбрать случайным образом 100,000 хостов и просканировать их на наличие запущенных на них веб-серверов (порт 80). Перебор хостов отключен опцией -Pn, т.к. посылка пары предварительных запросов с целью определения доступности хоста является нцелесообразной, когда вас интересует всего один порт на каждом хосте:

nmap -v -iR 100000 -Pn -p 80

Этой командой будут просканированы 4096 IP адресов (без предварительного пингования), а выходные данные будут сохранены в фоматах grepable и XML:

nmap -Pn -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20

Пример 1

Типичное сканирование с использованием Nmap показано в данном примере. Единственные аргументы, использованные в этом примере это -A, для определения версии ОС, сканирования с использованием скриптов и трассировки; -T4 для более быстрого выполнения; затем целевой хост.

Типичный пример сканирования с помощью Nmap:

sudo nmap -A -T4 scanme.nmap.org
 
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.029s latency).
rDNS record for 74.207.244.221: li86-221.members.linode.com
Not shown: 995 closed ports
PORT     STATE    SERVICE     VERSION
22/tcp   open     ssh         OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
| ssh-hostkey: 1024 8d:60:f1:7c:ca:b7:3d:0a:d6:67:54:9d:69:d9:b9:dd (DSA)
|_2048 79:f8:09:ac:d4:e2:32:42:10:49:d3:bd:20:82:85:ec (RSA)
80/tcp   open     http        Apache httpd 2.2.14 ((Ubuntu))
|_http-title: Go ahead and ScanMe!
646/tcp  filtered ldp
1720/tcp filtered H.323/Q.931
9929/tcp open     nping-echo  Nping echo
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.39
OS details: Linux 2.6.39
Network Distance: 11 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:kernel
 
TRACEROUTE (using port 53/tcp)
HOP RTT      ADDRESS
[Cut first 10 hops for brevity]
11  17.65 ms li86-221.members.linode.com (74.207.244.221)
 
Nmap done: 1 IP address (1 host up) scanned in 14.40 seconds 

Пример 2

Кто в моей сети?

В локальных сетях или просто имея на руках диапазон ip адресов, удобно проверить их на занятость с помощью ключей -sP:

# nmap -sP 192.168.1.0/24

Сканирование проходит довольно быстро, так как по сути это обычный ping-тест, отвечает ли хост на ping. Следует учесть, что хост может не отвечать на ping из-за настроек фаерволла. Если нужный участок сети нельзя ограничить маской, можно указать диапазон адресов, с какого и по какой надо провести сканирование. Например, есть диапазон адресов с 192.168.1.2 до 192.168.1.5. Тогда выполним:

# nmap -sP 192.168.1.2-5

Ответ будет выглядеть так:

>Host 192.168.1.2 is up (0.0023s latency)
Host 192.168.1.3 is up (0.0015s latency)
Host 192.168.1.4 is up (0.0018s latency)
Host 192.168.1.5 is up (0.0026s latency)

Пример 3

Сканирование нескольких узлов

Вы можете сканировать больше чем один узел за раз, используя nmap. Если вы производите сканирование по IP-адресу вы можете определить диапазон 10.0.0.1-6 или 10.0.0.0/24.Используя диапазон 10.0.0.1-6 будут сканироваться узлы от 10.0.0.1 до 10.0.0.6. Используя определение /24 будет сканироваться весь диапазон узлов от 10.0.0.0 до 10.0.0.255. Для примера, если нужно просканировать узлы от 10.0.0.1 до 10.0.0.42 и узнать какая ОС вероятно запущена используйте:

nmap –O 10.0.0.1-42

Если у вас есть некоторый список доменных имен вместо IP адресов, вы можете разделить их в командной строке, вот так:

nmap -O host1.target.com host2.target.com

Пример 4

Проверка открытых портов

Если вы запустите nmap вообще без опций и укажите какой то узел, то он будет сканировать порты и покажет все найденные открытые порты и сервисы запущенные на них. Например запустите:

nmap target.hostname.com

после чего он должен выдать что то похожее на это:

Interesting ports on target.hostname.com (10.0.0.88):
Not shown: 1711 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql

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

Nmap выдаст больше информации если использовать опцию -v (verbose).

Пример 5

Просканировать в вербальном режиме (-v), включить определение ОС, определение версий, сканирование скриптами и traceroute (-A), используя шаблон настроек управления временем «агрессивный» (-T4) в отношении хоста (suip.biz):

sudo nmap -v -A -T4 suip.biz
 
Starting Nmap 7.12 ( https://nmap.org ) at 2016-05-21 15:22 MSK
NSE: Loaded 138 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 15:22
Completed NSE at 15:22, 0.00s elapsed
Initiating NSE at 15:22
Completed NSE at 15:22, 0.00s elapsed
Initiating Parallel DNS resolution of 1 host. at 15:22
Completed Parallel DNS resolution of 1 host. at 15:22, 0.02s elapsed
Initiating SYN Stealth Scan at 15:22
Scanning suip.biz (185.117.153.79) [1000 ports]
Discovered open port 993/tcp on 185.117.153.79
Discovered open port 3306/tcp on 185.117.153.79
Discovered open port 143/tcp on 185.117.153.79
Discovered open port 25/tcp on 185.117.153.79
Discovered open port 443/tcp on 185.117.153.79
Discovered open port 80/tcp on 185.117.153.79
Discovered open port 995/tcp on 185.117.153.79
Discovered open port 110/tcp on 185.117.153.79
Discovered open port 465/tcp on 185.117.153.79
Completed SYN Stealth Scan at 15:22, 0.04s elapsed (1000 total ports)
Initiating Service scan at 15:22
Scanning 9 services on suip.biz (185.117.153.79)
Completed Service scan at 15:22, 12.05s elapsed (9 services on 1 host)
Initiating OS detection (try #1) against suip.biz (185.117.153.79)
NSE: Script scanning 185.117.153.79.
Initiating NSE at 15:22
Completed NSE at 15:23, 43.55s elapsed
Initiating NSE at 15:23
Completed NSE at 15:23, 0.01s elapsed
Nmap scan report for suip.biz (185.117.153.79)
Host is up (0.000038s latency).
Not shown: 991 closed ports
PORT     STATE SERVICE  VERSION
25/tcp   open  smtp     Postfix smtpd
|_smtp-commands: suip.biz, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8,
| ssl-cert: Subject: commonName=suip.biz
| Issuer: commonName=Let's Encrypt Authority X3/organizationName=Let's Encrypt/countryName=US
| Public Key type: rsa
| Public Key bits: 4096
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2016-05-17T12:14:00
| Not valid after:  2016-08-15T12:14:00
| MD5:   c5ea 594b d185 e811 6381 c82f 352d 9489
|_SHA-1: 5ead 1a9c 0858 23a2 59bb 98b4 70c3 c8dc a72d 9b92
|_ssl-date: TLS randomness does not represent time
80/tcp   open  http     Apache httpd 2.4.20 ((Unix) PHP/7.0.6 OpenSSL/1.0.2h)
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.20 (Unix) PHP/7.0.6 OpenSSL/1.0.2h
|_http-title: Did not follow redirect to https://suip.biz/
110/tcp  open  pop3     Dovecot pop3d
|_pop3-capabilities: RESP-CODES USER STLS TOP UIDL PIPELINING AUTH-RESP-CODE SASL(PLAIN CRAM-MD5) CAPA
| ssl-cert: Subject: commonName=suip.biz
| Issuer: commonName=Let's Encrypt Authority X3/organizationName=Let's Encrypt/countryName=US
| Public Key type: rsa
| Public Key bits: 4096
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2016-05-17T12:14:00
| Not valid after:  2016-08-15T12:14:00
| MD5:   c5ea 594b d185 e811 6381 c82f 352d 9489
|_SHA-1: 5ead 1a9c 0858 23a2 59bb 98b4 70c3 c8dc a72d 9b92
|_ssl-date: TLS randomness does not represent time
143/tcp  open  imap     Dovecot imapd
|_imap-capabilities: ID listed STARTTLS LITERAL+ AUTH=CRAM-MD5A0001 SASL-IR LOGIN-REFERRALS IDLE Pre-login post-login have more capabilities ENABLE IMAP4rev1 OK AUTH=PLAIN
| ssl-cert: Subject: commonName=suip.biz
| Issuer: commonName=Let's Encrypt Authority X3/organizationName=Let's Encrypt/countryName=US
| Public Key type: rsa
| Public Key bits: 4096
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2016-05-17T12:14:00
| Not valid after:  2016-08-15T12:14:00
| MD5:   c5ea 594b d185 e811 6381 c82f 352d 9489
|_SHA-1: 5ead 1a9c 0858 23a2 59bb 98b4 70c3 c8dc a72d 9b92
|_ssl-date: TLS randomness does not represent time
443/tcp  open  ssl/http Apache httpd 2.4.20 ((Unix) PHP/7.0.6 OpenSSL/1.0.2h)
|_http-favicon: Unknown favicon MD5: 913CC96448A5F71C239098652CB10104
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.20 (Unix) PHP/7.0.6 OpenSSL/1.0.2h
|_http-title: 400 Bad Request
| ssl-cert: Subject: commonName=suip.biz
| Issuer: commonName=Let's Encrypt Authority X3/organizationName=Let's Encrypt/countryName=US
| Public Key type: rsa
| Public Key bits: 4096
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2016-05-17T12:14:00
| Not valid after:  2016-08-15T12:14:00
| MD5:   c5ea 594b d185 e811 6381 c82f 352d 9489
|_SHA-1: 5ead 1a9c 0858 23a2 59bb 98b4 70c3 c8dc a72d 9b92
|_ssl-date: TLS randomness does not represent time
465/tcp  open  ssl/smtp Postfix smtpd
|_smtp-commands: suip.biz, PIPELINING, SIZE 10240000, VRFY, ETRN, AUTH PLAIN CRAM-MD5, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8,
|_ssl-date: TLS randomness does not represent time
993/tcp  open  ssl/imap Dovecot imapd 2.0.11
|_imap-capabilities: ID more listed ENABLE OK LITERAL+ AUTH=CRAM-MD5A0001 IMAP4rev1 post-login have Pre-login capabilities AUTH=PLAIN SASL-IR LOGIN-REFERRALS IDLE
|_ssl-date: TLS randomness does not represent time
995/tcp  open  ssl/pop3 Dovecot pop3d
|_pop3-capabilities: SASL(PLAIN CRAM-MD5) RESP-CODES UIDL PIPELINING AUTH-RESP-CODE USER TOP CAPA
|_ssl-date: TLS randomness does not represent time
3306/tcp open  mysql    MariaDB (unauthorized)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.8 - 4.4
Uptime guess: 4.002 days (since Tue May 17 15:21:07 2016)
Network Distance: 0 hops
TCP Sequence Prediction: Difficulty=252 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: Host:  suip.biz
 
NSE: Script Post-scanning.
Initiating NSE at 15:23
Completed NSE at 15:23, 0.00s elapsed
Initiating NSE at 15:23
Completed NSE at 15:23, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 58.73 seconds
           Raw packets sent: 1022 (45.778KB) | Rcvd: 2051 (87.376KB) 

Книги

Ссылки

nmap.txt · Последние изменения: 2017/01/17 17:04 — Павел Кульков