NMAP(1)

НАЗВАНИЕ ПРОГРАММЫ
nmap - the Network Mapper - инструмент для сканирования и исследования безопасности Сети.

ИСПОЛЬЗОВАНИЕ
nmap [тип(ы) сканирования] [опции] <хост или сеть #1 ... [#N]>

ОПИСАНИЕ
Nmap создан для системных администраторов и любопытных индивидуумов для того, что бы сканировать сети с любым количеством объектов для определения доступности хостов и идентификации сервисов, которые они предоставляют.

Nmap поддерживает такие виды сканирования как: UDP, TCP connect(), TCP SYN (полуоткрытое соединение), ftp proxy (bounce attack), ICMP (ping), FIN, ACK, Xmas Tree, SYN, IP Protocol и NULL.

Смотрите секцию Типы Сканирования для более подробной информации.

Nmap также поддерживает ряд расширенных особенностей, - например удалённое определение операционной системы методом снятия отпечатка TCP/IP стека, стелс-сканирование, вычисление динамической задержки и интервала повторной передачи, параллельное сканирование, определение неактивных хостов методом параллельного ping-сканирования, сканирование с использованием ложных хостов, обнаружение систем фильтрации трафика (port filtering detection), прямое (без использования portmapper) RPC-сканирование, IP-фрагментацию при сканировании, а также произвольное указание сканируемых адресов и портов.

Много работы проводилось над адаптацией nmap для пользователей без прав root. К сожалению, много критических ядерных интерфейсов (как, например raw-сокеты) требуют root-привилегий, так что старайтесь запускать nmap именно с этими правами (не setuid root, конечно).

Результатом работы nmap обычно является список отсканированных портов на удаленной машине(ах) с указанием номера и состояния порта, типа используемого протокола, а также названия службы, закрепленной за этим портом. Порт характеризируется возможными состояниями: "открыт"(open), "закрыт"(closed), "фильтруемый"(filtered) и "нефильтруемый"(unfiltered). Состояние порта "open" означает, что на удалённой машине за этим портом закреплён определённый сервис и он может принять соединение на этот порт. Состояние порта "close" означает, что соединения на этот порт невозможны. Состояние порта "filtered" означает, что фаервол, пакетный фильтр или любая другая помеха мешает определить состояние порта. Состояние порта "unfiltered" - означает что порт закрыт и система защиты не мешает это определить. Такое состояние отображается если большинство портов сканируемой машины находится в состоянии filtered. В некоторых случаях nmap не может точно определить разницу между состояниями порта filtered, open или closed. Например, порт который не отвечает на FIN-сканирование может находиться в состоянии как open так и filtered. В подобных случаях nmap отображает такие порты как "open|filtered" или "closed|filtered".

В зависимости от указанных опций, nmap также может определить следующие характеристики сканируемого хоста: тип ОС, метод генерации TCP ISN, имя пользователя (username) владельца процесса, зарезервировавшего сканируемый порт, символьные имена, соответствующие сканируемым IP-адресам и т.п.

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

 Если вы немедленно хотите начать работу с nmap, можете пропустить этот
 раздел и перейти к изучению примеров вызова nmap в конце данного
 руководства. Вы можете также запустить программу nmap с ключом ' -h' для получения краткой справки по всем опциям.

ТИПЫ СКАНИРОВАНИЯ

-sS Сканирование методом SYN. Этот метод называется "полуоткрытое" сканирование, поскольку полное TCP-соединение с портом сканируемой машины не устанавливается. Nmap посылает SYN-пакет, как бы намереваясь открыть настоящее соединение, и ожидает ответ. Флаги SYN|ACK в ответе указывают на то, что порт удаленной машины открыт. Флаг RST указывает на то, что порт удалённой машины закрыт. Если nmap принял пакет SYN|ACK, то в ответ немедленно отправляется (операционной системой) RST-пакет для сброса еще не установленного соединения. Очень немного сайтов способны обнаружить такое сканирование, однако хорошо настроенный фаервол на это способен. Пользователь должен иметь root-привилегии для формирования поддельного SYN-пакета. Этот тип сканирования является применимым по-умолчанию для привилегированных пользователей.

-sT Сканирование методом TCP connect(). Наиболее простой метод сканирования TCP-портов. Системный вызов connect(), присутствующий в любой ОС, позволяет создать соединение с любым портом удаленной машины. Соединение происходит методом стандартного "tcp-рукопожатия", - сканирующая машина отправляет на сканируемую пакет с флагом SYN, если в ответ приходит пакет с флагом RST - то порт закрыт, если SYN|ACK, то сканирующая отправляет ACK и тогда соединение установлено). Если порт открыт и прослушивается сканируемой машиной, то результат выполнения connect() будет успешным (т.е. соединение будет установлено), в противном случае указанный порт является закрытым или доступ к нему блокируется. Единственным преимуществом данного метода является то, что его можно использовать без root-привилегий.

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

-sF -sX -sN
    Сканирование методом stealth-FIN, Xmas Tree или NULL. Эти методы используются в случае, если SYN-сканирование по каким-либо причинам не дало ожидаемого результата. Некоторые фаерволы и пакетные фильтры ожидают SYN-пакеты на защищаемые ими порты, и программы типа Synlogger или Courtney способны отследить SYN-сканирование. Вышеуказанные типы сканирования могут быть не замечены системами защиты.

    FIN-сканировании в качестве запроса используется FIN-пакет. В Xmas Tree используется пакет с набором флагов FIN|URG|PSH, а NULL-сканирование использует пакет без флагов. Согласно RFC 793 стр.64, закрытый порт должен ответить на один из таких посланных нами пакет пакетом с флагом RST. Фильтруемые порты обычно не отвечают на такие пакеты, поэтому nmap обозначает такой порт "open|filered". Если добавить опцию распознавания версии (-sV), nmap попытается определить точно ли такие порты открыты. К несчастью, Microsoft как всегда решила полностью игнорировать все общепринятые стандарты и пойти своим путём. Поэтому любая ОС семейства Windows не посылает в ответ RST-пакет, и данные методы не будут работать с этими ОС. С другой стороны в nmap этот признак является основным для различения операционных систем, если данные типы сканирования нашли открытые порты - скорее всего сканируемая машина работает не под управлением windows. К сожалению, Windows не единственная ОС, обладающая этим недостатком. К таким ОС относятся также Cisco, BSDI, IRIX, HP/UX и MVS. Все эти ОС не отправляют RST-пакеты. Но это не так важно, поскольку nmap может определять операционную систему другими методами автоматически.

-sP Ping-сканирование: Иногда вам необходимо лишь узнать какие хосты активны в сканируемой сети. Nmap может сделать это, послав ICMP-сообщение "эхо запрос" на каждый IP-адрес, который вы укажете. Хост, отправивший ответ на эхо, является активным. Некоторые сайты (например microsoft.com) блокируют пакеты с эхо запросом. Поэтому nmap также посылает TCP АСК-пакет на 80-й порт сканируемого хоста (по умолчанию). Если в ответ мы получили RST-пакет, - хост активен. Третий метод посылает SYN-пакет и ожидает в ответ RST либо SYN|ACK. Для пользователей, не обладающих статусом root, используется метод connect().

    Для привилегированных пользователей nmap по умолчанию использует параллельно оба метода - ICMP и ACK. Вы можете изменить это, используя опцию ' -P

    Обратите внимание, что ping-сканирование по умолчанию выполняется в любом случае и только активные хосты подвергаются сканированию. Используйте эту опцию только в случае, если вы хотите произвести только ping-опрос, не сканируя порты. -sV Включить режим определения версий служб, за которыми закреплены сканируемые порты. После сканирования TCP и/или UDP-портов любым методом, nmap попытается определить привязанный к этим открытым портам протокол службы (ftp, ssh, telnet, http), имя приложения (ISC Bind, Apache httpd, Solaris telnetd), номер версии и дополнительные детали (например, открыт ли Х сервер для подключений или версию протокола SSH). Файл, названный nmap-service-probes используется для определения оптимальтых тестов, с помощью которых можно получить максимально точную информацию в данных условиях. Если nmap скомпилирован с поддержкой OpenSSL, он подключится к SSL-серверу с попыткой определить, какая служба работает за шифрованием. Если обнаружена служба RPC, nmap предпримет атаку на RPC по методу "грубой силы" для определения номера программы RPC и номера версии. Некоторые UDP-порты остаются в состоянии "open|filtered" если UDP-сканирование не сможет точно определить в каком состоянии находится порт. Определитель версии попытается соединиться на такой порт, и если он открыт, то его состояние изменится на open. Опция '-A' также включает этот режим. При использовании опции '--version_trace' nmap будет отображать всю информацию о происходящем процессе определения версии (это некоторая разновидность информации которую можно получить при включении опции '--packet_trace').

-sU UDP-сканирование: этот тип сканирования используется для определения открытых UDP (User Datagram Protocol, RFC 768) портов на сканируемой машине. Nmap посылает 0-байтный UDP-пакет на каждый порт сканируемой машины. Если в ответ получено сообщение ICMP "port unreachable" (ICMP порт недоступен), то сканируемый порт закрыт, если что-то другое - то открыт. Если ответ вообще не приходит, то nmap помечает порт состоянием "open|filtered", и это значит что порт открыт, но фаервол или другой пакетный фильтр блокирует доступ к данному порту. Включение режима определения версий служб (-sV) может помочь точно распознать открытые и фильтруемые порты.

    Некоторые пользователи считают сканирование UDP-портов бесполезным занятием. Мы обычно в этом случае напоминаем об известной дыре в демоне rpcbind ОС Solaris. Rpcbind может быть обнаружен на любом из недокументированных UDP-портов с номером, больше 32770. Если вы обнаружите его, то будет уже не важно, блокируется ли 111-й порт фаерволом или нет. Но как вы можете обнаружить на каком именно из 30,000 портов запущен rpcbind? Конечно же с помощью UDP-сканирования. Также недокументированные (свыше 1024 номера) порты часто используются троянами или DDoS-клиентами. Очень часто такие UDP-сервисы как snmp, tftp, NFS также имеют уязвимости.

    К сожалению, сканирование UDP-портов очень медленный процесс, поскольку практически все ОС следуют рекомендации RFC 1812 (раздел 4.3.2.8) по ограничению скорости генерирования ICMP-сообщений "порт недоступен". Например, ядро Linux (файл - net/ipv4/icmp.h) ограничивает генерирование таких сообщений до 80 за 4 секунды с простоем 0,25 секунды, если это ограничение было превышено. У ОС Solaris еще более жесткое ограничение (2 сообщения в секунду), и поэтому сканирование Solaris проходит еще более медленно. Nmap определяет параметры этого ограничения, и соответственно уменьшает количество генерируемых запросов, предотвращая тем самым затопление сети ненужными пакетами, которые игнорируются сканируемой машиной.

    Как обычно, Microsoft проигнорировала рекомендации RFC, и не использует в своих ОС никаких ограничений. Поэтому nmap может очень быстро просканировать все 65535 UDP-портов хоста, работающего под управлением ОС Windows. :-)

-sO Сканирование протоколов IP. Данный метод используется для определения IP-протоколов, которые поддерживает сканируемый хост. Метод заключается в отправке хосту IP-пакетов без заголовка для каждого сканируемого протокола. Если получено сообщение ICMP "protocol unreachable" (протокол недоступен), то данный протокол хостом не используется. В противном случае nmap предполагает, что протокол хостом поддерживается. Стоит заметить, что некоторые ОС (AIX, HP-UX, Digital UNIX) и фаерволы могут блокировать передачу сообщений "ICMP protocol unreachable". По этой причине все сканируемые протоколы nmap обозначает как "open" (т.е. поддерживаются).

    Поскольку описанная техника схожа со сканированием UDP-портов, то и соответственно есть лимит скорости генерации ICMP-сообщений. Однако поле "тип протокола" IP-заголовка состоит всего лишь из 8 бит, поэтому 256 протоколов будут отсканированы за приемлемое время.

-sI <зомби-хост[:порт]>
    Idle-сканирование - позволяет произвести абсолютно невидимое сканирование портов. Это означает, что никакие пакеты с вашего реального ip-aдреса не отправляются на сканируемую машину. Метод IdleScan использует сторонний канал для сканирования, которое проходит через хост-зомби, и основано на методе предугадывания генерируемого на хосте-зомби значения "IP fragmentation ID". Системы защиты на сканируемом хосте определят источником сканирования хост-зомби, который вы используете.

    Кроме абсолютной невидимости, этот тип сканирования позволяет определить политику доверия между сканируемыми машинами на уровне протокола IP. Листинг результатов сканирования отображает порты открытые для хоста-"зомби". Таким образом, можно просканировать цель с использованием нескольких "зомби", которым цель может "доверять", в обход фаерволов и пакетных фильтров. Такого рода информация может быть самой важной при выборе приоритетных целей для атаки.

    Вы можете указать конкретный порт для проверки изменения IPID на хосте-"зомби". В ином случае nmap будет использовать номер порта по умолчанию для "tcp ping".

    Что бы узнать, можно ли использовать хост в качестве зомби, - нужно запустить nmap c дополнительными опциями "-O -v", и в поле IPID Sequence Generation будет указан тип генерирования. Если "Incremental" - то этот хост можно использовать как зомби.

-sA Сканирование методом ACK. Этот метод обычно используется для определения набора правил фаервола. В частности, он помогает определить защищен ли сканируемый хост фаерволом или просто используется пакетный фильтр, блокирующий входящие SYN-пакеты.

    Этот метод сканирования подразумевает отправку ACK-пакета (со случайными значениями полей acknowledgement number и sequence number) на порт сканируемого хоста. Если в ответ пришел RST-пакет, порт обозначается как "unfiltered" (нефильтруемый). Если ответа не последовало (или пришло ICMP-сообщение "port unreachable"), порт обозначается как "фильтруемый". Заметим, что обычно nmap не отображает нефильтруемые порты в результатах, поэтому если после сканирования методом АСК не обнаружено ни одного открытого порта, то это означает, что все порты являются нефильтруемыми (в ответ пришел RST-пакет). Этот метод никогда не показывает состояние порта "open" в результатах сканирования.

-sW Cканировать методом TCP Window. Этот метод очень похож на ACK-сканирование, за исключением того, что иногда с его помощью можно определить открытые порты точно так же, как и фильтруемые/нефильтруемые, проверяя значение поля window size TCP-пакета, возвращаемого хостом в ответ на посланный ему запрос, поскольку есть некоторые аномалии обработки данного поля у некоторых ОС. Список уязвимых операционных систем включает в себя несколько версий AIX, Amiga, BeOS, BSDI, Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD, OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.X, Ultrix, VAX и VxWorks. Для более подробной информации смотрите архив конференции nmap-hackers.

-sR RPC-сканирование. Метод работает только в комбинации с другими методами сканирования. Все предварительно отсканированные открытые порты затопляются NULL-командами программы SunRPC, для того чтобы определить какие из этих портов являются RPC-портами, и какие за ними закрепленные программы. Таким образом, вы легко получаете информацию, которую могли бы получить с помощью команды 'rpcinfo -p', даже если portmapper сканируемого хоста закрыт фаерволом или TCP-wrapper'ом. Этот тип сканирования включается также при выборе опции '-sV' (режим определения версий служб).

-sL Cоставить список сканирования. Этот метод просто генерирует список IP-адресов или имён хостов без любого их сканирования. Имена хостов определяются по-умолчанию, но это можно отменить опцией -n.

-b <ftp relay host>
    Прорыв через FTP. Интересной "возможностью" протокола FTP (RFC 959) является поддержка proxy ftp-соединений. Другими словами, с доверенного хоста evil.com можно соединиться с ftp-сервером target.com и отправить файл, находящийся на нем, на любой адрес в Интернет! Заметим, что данная возможность известна с 1985 года, когда был написан этот RFC. Nmap использует эту уязвимость для сканирования портов с proxy ftp-сервера. Итак, вы можете подключиться к ftp-серверу за фаерволом и затем просканировать заблокированные порты, например 139-й. Если ftp-сервер позволяет читать и записывать данные в какой-либо каталог (например /incoming), вы также можете отправить любые данные на эти порты. (но nmap за вас это делать не будет).

    Аргумент, указываемый после '-b', это URL сервера ftp, используемого в качестве proxy. Формат URL следующий: имя_пользователя:пароль@сервер:порт. Адрес сервера нужно указать обязательно, остальное - опционально. Нужно заметить, что в данное время этот вид сканирования не эффективен, потому как почти во всех приложениях уязвимость, используемая данным методом, устранена.

НАСТРОЙКА ДОПОЛНИТЕЛЬНЫХ ПАРАМЕТРОВ СКАНИРОВАНИЯ
    Ни одна из нижеуказанных опций не является необходимой, но некоторые могут быть очень полезными.

-P0 Вообще не производить ping-опрос хостов перед их сканированием. Эта опция позволяет просканировать сети, блокирующие обработку ICMP-эха с помощью фаерволов. Примером такой сети является microsoft.com, и вы всегда должны использовать опцию ' -P0 -PS80 этом случае "ping" Обозначает несколько больше, чем традиционный ICMP echo request пакет. Nmap использует разные комбинации TCP, UDP и ICMP пакетов для того, что бы определить активен ли хост. По-умолчанию nmap посылает ICMP echo request и TCP ACK пакет на порт 80.

-PA [порт(ы)]
    Использовать TCP ACK ping для определения присутствия хоста в сети. Вместо того, что бы отправлять ICMP echo request пакет и ждать ответа, мы отправляем TCP ACK пакет на сканируемый хост. Если в ответ мы получим RST-пакет, значит сканируемый хост активен. Эта опция помогает избежать сканирования неактивных хостов в сети, блокирующей ICMP-пакеты. Для непривилегированных пользователей используется connect() метод, при котором активность хоста фактически определяется его ответом на посланный нами SYN-пакет. Что бы указать порт(ы) назначения для нашего сканирования - используйте '-PA[,port2][...]'. По-умолчанию используется 80-ый порт, поскольку чаще всего он не фильтруется.

-PS [порт(ы)]
    Использовать SYN-пакет (запрос на соединение) вместо ACK-пакетов для привилегированных пользователей. Активные хосты должны ответить на наш пакет RST-пакетом (или что уже редко - SYN|ACK). Можно указать порты назначения точно так же как и в '-PA' опции.

-PR Использовать raw ethernet ARP ping. Когда сканируемый хост находится в одном физическом сегменте сети со сканирующим, можно более быстро и надёжно (ARP-пакеты не фильтруются фаерволом или другим IP-фильтром) определить активен ли он. Nmap посылает IPv4-to-Ethernet ARP-запрос для каждого сканируемого хоста и смотрит за приходящими ARP-ответами. Эта опция не может комбинироваться с остальными типами ping-опроса. -PU [порт(ы)] Эта опция отправляет UDP-запрос на сканируемый хост. Если в ответ приходит сообщение "ICMP port unreachable", или UDP-ответ (порт открыт), то сканируемый хост активен. Поскольку многие UDP-сервисы не отвечают на пустой пакет, лучше указывать предположительно закрытый порт.

-PE Использовать "настоящий" ping (посылать на сканируемый хост "ICMP echo request" пакет). При включении этой опции ищутся активные хосты и broadcast-адреса (адреса которые доступны внешне, и транслируют приходящие IP-пакеты всем хостам внутренней сети). Такие адреса могут использоваться для организации DoS-атак. (Атака типа отказ в обслуживании)

-PP Использовать пакет ICMP "timestamp request (type 13)" для определения активных хостов.

-PM Использовать пакет ICMP "netmask request (type 17)" для определения активных хостов.

-PB [порт(ы)]
    Это тип ping-опроса по-умолчанию. Он параллельно использует ACK ( -PA ) и "ICMP echo request" пакет ( -PE ). Этим путем можно обойти фаервол который фильтрует один из этих пакетов.

-O  (Operating system detection) - эта опция позволяет определить операционную систему сканируемого хоста с помощью снятия отпечатков стека TCP/IP. Другими словами, nmap активизирует мощный алгоритм, функционирующий на основе анализа свойств сетевого стека установленной на хосте ОС. В результате сканирования получается "отпечаток", состоящий из стандартных тестовых запросов и "ответов" хоста на них. Затем полученный отпечаток сравнивается с имеющейся базой стандартных ответов известных ОС, хранящейся в файле nmap-os-fingerprinting, и на основании этого принимается решение о типе и версии ОС сканируемого хоста.

    Если nmap не смог определить OC сканируемой машины, потому что такого отпечатка ещё нет в базе, но получение отпечатка представляется возможным (на машине хотя бы один открытый порт) nmap укажет url, на котором вы сможете отправить отпечаток для внесения его разработчиками в базу отпечатков, если вы точно знаете что за ОС используется на сканируемом хосте. Заметьте, если вы укажете ip-адрес машины, для которой вы прислали отпечаток, то при внесении его в базу эта машина будет ещё раз просканирована для подтверждения результатов.

    Опция '-О' также инициализирует несколько других тестов. Один из таких как использование "TCP timestamp" опции (RFC 1323) для определения времени активности хоста с момента его последней перезагрузки. Эта информация предоставляется только с разрешения сканируемого хоста.

    Другой тест, инициализируемые опцией '-O' - это "TCP Sequence Predictability Classification" - классификация предсказуемости последовательности TCP. Его суть в том, что бы определить насколько тяжело установить поддельное соединение с удалённой машиной. Эта информация может использоваться для обхода прав доступа к удалённой машине или скрытия источника атаки. Эта информация отображается при включенной опции '-v'.

    Когда опция '-v' используется вместе с '-O', - частота генерации IPID также отображается. Большинство машин отображаются как "incremental", что означает изменение поля "ID" в заголовке IP для каждого отправленного пакета на одинаковую величину, что делает их уязвимыми для некоторых углублённых методов сбора информации и spoof-атак.

--osscan_limit
    Определение ОС сканируемой машины значительно эффективнее, если найдены хотя бы один закрытый и открытый порт. Используйте эту опцию и nmap не будет пробовать определять ОС, если таковых портов не найдено. Это может сократить время сканирования, например при -P0 сканировании множества хостов. Эта опция используется только вместе с '-O' или '-A' опциями.

-A  Эта опция включает режим Additional Advanced и Aggressive, объединяя опции '-O' и '-sV'. В будущем эта опция планируется для объединения многих опций, для того что бы меньше запоминать. ;-)

-6  Эта опция включает поддержку протокола IPv6. Все сканируемые хосты должны поддерживать IPv6 при использовании этой опции, и могут быть указаны путем нормального имени DNS (запись AAAA) или литеральным IP-адресом, например 3ffe:501:4819:2000:210:f3ff:fe03:4d0. На данный момент, поддерживаются только методы TCP connect()-сканирование и TCP connect() Ping-сканирование. Если Вас интересует UDP или другой тип сканирования, посетите http://nmap6.sourceforge.net/.

--send_eth
    Эта опция заставляет nmap отсылать пакеты на канальном уровне (data link layer) вместо сетевого уровня (network layer). По-умолчанию nmap сам выбирает на каком уровне отправлять пакеты в зависимости от используемой платформы. Raw-сокеты (сетевой уровень) более эффективно использовать на UNIX машинах, однако на канальном уровне лучше функционируют ОС семейства Windows, в которых Microsoft отключила поддержку raw-сокетов. Nmap однозначно будет использовать raw-сокеты если нет другого выбора (например в не локальной сети).

--send_ip
    Эта опция заставляет nmap отсылать пакеты на сетевом уровне (network layer) вместо канального (data link layer). Это противоположная опция к '--send_eth'.

--spoof_mac [mac, prefix, or vendor substring]
    Эта опция заставляет nmap использовать заданный MAC-адрес во всех отправляемых пакетах канального уровня. Адрес может задаваться в нескольких форматах. Если это просто строка "0", nmap выберет полностью случайный MAC-адрес для этой сессии. Если заданный адрес - набор шестнадцатеричных чисел, с разделителем в виде двоеточия, nmap будет использовать эту строку как МАС-адрес. Если задано меньше 12 шестнадцатеричных чисел, nmap сам заполнит недостающие случайными значениями. Если заданный аргумент не 0 и не шестнадцатеричная строка, то nmap будет искать в файле nmap-mac-prefixes похожее значение в именах производителей сетевого оборудования. Если такой производитель будет найден, nmap возьмет OUI (3байтный префикс) производителя и дополнит его случайными 3 байтами, в результате получится поддельный МАС-адрес определённого производителя. Правильными аргументами --spoof_mac будут, например: "Apple", "0", "01:02:03:04:05:06", "deadbeefcafe", "0020F2", и "Cisco".

-f  (fragment packets) - эта опция используется совместно с SYN, FIN, Xmas или NULL-сканировании и указывает на необходимость использования IP-фрагментации. Идея заключается в том, чтобы разбить TCP-заголовок исходящего пакета на несколько фрагментов. Сканируемый хост дефрагментирует эти IP-фрагменты в один TCP-пакет. Фрагментирование значительно усложняет фильтрацию пакетов, работу систем обнаружения и других подобных средств защиты, и позволяет nmap скрыть свои действия. Однако следует осторожно использовать данную опцию, поскольку некоторые старые или непрофессиональные новые программы, например снифферы, просто зависают при попытке собрать такие маленькие фрагменты. Укажите эту опцию один раз и nmap будет разбивать пакеты на 8байтовые или меньше пакеты, исключая IP-заголовок. Например, 20-байтовый TCP заголовок будет разбит на 3 пакета - на 2 по 8байт и один на 4. Конечно же, каждый фрагмент имеет собственный IP-заголовок. Укажите опцию '-f' ещё раз и пакеты будут разбиваться соответственно на 16байтные фрагменты. Или вы можете указать свой собственный размер фрагмента, используя опцию '--mtu'. Не используйте эти (-f и --mtu) опции вместе, и не забывайте, что размер фрагмента должен быть кратен 8.

    Заметьте, что некоторые ОС, например Linux c включенным модулем ip tables connection tracking, дефрагментируют исходящие пакеты на уровне ядра. Просмотрите генерируемый nmap фрагментированный трафик сниффером, что бы выяснить работает ли опция '-f'.

-v  (verbose output) - использовать режим подробного отчета. Если вы укажете эту опцию, nmap будет подробно сообщать о ходе выполнения текущей операции. Для получения лучшего эффекта можно указать ее дважды. Можете ещё несколько раз указать опцию ' -d

-h  (help) - показывает краткую инструкцию по использованию nmap с указанием опций и краткого их описания, не запуская саму программу.

-oN <имя_файла>
    (output Normal) - записывает результаты сканирования в удобной для пользователя форме в файл, указанный в качестве аргумента.

-oX <имя_файла>
    (output XML) - записывает результаты сканирования в формате XML в файл, указанный в качестве аргумента. Это позволяет программам легче обрабатывать вывод nmap'а. Вы можете использовать аргумент случае не используется. Внимательно следите за сообщениями об ошибках, потому как они выводятся на stderr. Document Type Definition (DTD), объясняющий структуру вывода результатов nmap в формате XML доступен здесь: http://www.insecure.org/nmap/nmap.dtd.

--stylesheet <имя_файла>
    Nmap обращается к XSL таблице стилей, которая называется nmap.xsl, для просмотра или транслирования XML вывода в HTML формат. Если вы желаете указать другую таблицу стилей - используйте эту опцию. В качестве аргумента указывается полный путь или url, например '--stylesheet http://www.insecure.org/nmap/data/nmap.xsl', что укажет браузеру загрузить последнюю версию таблицы стилей с сервера insecure.org. Эта таблица может использоваться для просмотра nmap XML-вывода на машине где nmap не установлен. По умолчанию, в целях безопасности, используется локальная копия nmap.xsl.

--no_stylesheet
    Указывает nmap не использовать никакой XSL таблицы стилей для отображения XML-вывода.

-oG <имя_файла>
    (output Grepable) - записывает результаты сканирования в удобной для программы grep форме в файл, указанный в качестве аргумента. Вы можете использовать аргумент '-' (без кавычек) для вывода на stdout. Нормальный вывод в этом случае не используется. Внимательно следите за сообщениями об ошибках, потому как они выводятся на stderr. В нынешнее время рекомендуется использовать XML-вывод (-oX).

-oA <имя_базы>
    (output All) - записывает результаты во всех основных форматах (нормальном, grep и XML). Вы указываете базовое имя, например base, и выходные файлы будут называться base.nmap, base.gnmap и base.xml.

-oS <имя_файла>
    thIs l0gz th3 r3suLtS of YouR ScanZ iN a s|<ipT kiDd|3 f0rM iNto THe fiL3 U sPecfy 4s an arGuMEnT! U kAn gIv3 the 4rgument "-" (wItHOUt qUOteZ) to sh00t output iNT0 stDouT!@!!

--resume <имя_файла>
    Если сканирование было прервано нажатием комбинации [Ctrl+C], сетевым сбоем и т.п., то оно может быть продолжено включением этой опции. Если результаты прерванного сканирования записывались в лог-файл с помощью опций '-oG' или '-oN', просто запустите nmap с указанием этой опции и имени лог-файла, в который производилась запись предыдущего сеанса. Не указывайте никаких других опций, поскольку при возобновлении сканирования будут использоваться опции, указанные в предыдущем сеансе. Nmap продолжит сканирование с адреса, следующего за последним отсканированным.

--exclude <хост1 [,хост2][,хост3],...">
    Исключить из списка сканирования цели (хосты, сетевые диапазоны), которые не должны сканироваться.

--excludefile <имя_файла>
    Смысл этой опции такой же, как и '--exclude', только цели для исключения задаются файлом, каждая запись - в отдельной строке.

--allports
    Опция используется вместе с режимом определения версий служб (-sV) и разрешает работать со всеми найденными открытыми портами, даже с теми, которые помечены как опасные в файле nmap-service-probes.

--append_output
    Дописывать результаты сканирования в лог-файл, а не затирать предыдущую информацию в нём.

-iL <имя_файла>
    (input List) - считывать список хостов для сканирования из файла, заданного в качестве аргумента. Файл должен содержать список имен хостов или IP-адресов, разделенных пробелами, знаками табуляции или что бы каждая запись была в отдельной строке. Что бы nmap считал список хостов с StdIn, укажите вместо имени файла символ разделе "Способы задания цели".

-iR <количество_хостов>
    Если указать эту опцию, то nmap будет сканировать хосты выбранные случайным образом. Используйте 0 в качестве заданной цели для сканирования, и nmap будет сканировать пока вы его не остановите. Эта опция может быть использована для статистических исследований Интернета. Если вам действительно скучно - запускайте "nmap -sS -PS80 -iR 0 -p 80" что бы найти некоторые веб-сервера, которые могут вас заинтересовать.

-p <диапазон_портов>
    Этой опцией вы можете задать порты, которые вы хотите сканировать. Для примера, если задать "-р 23", то будет сканироваться только 23 порт на хосте. "-р 20-30,139,60000-" просканирует порты от 20 до 30, 139 порт, и все порты, номера которых больше 60000. По умолчанию сканируются порты от 1 до 1024, и те, которые указаны в файле nmap-services. Для сканирования протоколов IP (-sO) эта опция указывает какой протокол просканировать (0-255).

    Когда сканируются как TCP так и UDP порты, можно указать диапазон для каждого типа портов отдельно, используя префиксы "Т:" и "U:" соответственно. Например, если задать аргумент "-р U:53,111,137,T:21-25,80,139,8080" то будут сканироваться 53, 111, и 137 UDP-порты, и указанные ТСР-порты. Заметьте, что бы просканировать UDP и ТСР порты, нужно указать -sU и хотя бы один из методов ТСР-сканирования (-sS, -sF, -sT).

-F  Быстрое сканирование. Если указать эту опцию, то nmap будет сканировать порты только тех служб, которые перечислены в файле nmap-services (или nmap-protocols для '-sO'). Сканирование проходит гораздо быстрее, чем если бы nmap сканировал все 65535 портов хоста.

-D <ложный_хост1,[ложный_хост2],[,ME],...>
    Эта опция используется для сокрытия реального источника сканирования, используя ложные хосты. Вместе с нашими пакетами на сканируемый хост отсылаются такие же пакеты, но с поддельными адресами источника. Защитная программа на сканируемом хосте может отобразить 5-10 попыток сканирования с разных источников, но узнать с какого именно хоста производится истинное сканирование сложно, особенно если указать много ложных хостов.

    Указывайте ложные хосты через запятую, и используйте "МЕ" для обозначения своего хоста в этой цепочке. Например, если указать "МЕ" на 5 позиции, то истинные пакеты будут отправлены после предыдущих четырех ложных. Если не указать "ME", nmap выберет позицию для вашего хоста случайным образом.

    Учтите, что хосты, которые вы укажете как ложные, должны быть в активном состоянии, иначе вы можете случайно затопить сканируемую цель SYN-пакетами, или будет очень легко определить источник сканирование, если только ваша машина окажется активной. Также предпочтительно использовать ip-адреса вместо dns-имён, иначе на сервере имён ложных хостов в лог-файле сохранятся записи о ваших обращениях к ним.

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

    Ложные хосты можно использовать в любом методе сканирования а также при определении операционной системы удалённого хоста (-O).

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

-S <ip-адрес>
    При некоторых обстоятельствах nmap не сможет определить ваш ip-адрес (nmap сообщит вам об этом). В таких случаях можно использовать эту опцию для явного указания вашего ip-адреса.

    Другой вариант использования этой опции - отправка пакетов с поддельным ip-адресом. Это может использоваться для создания видимости сканирования целевого хоста кем-то другим, однако в таком случае результат сканирования можно получить лишь прослушивая трафик, проходящий между целевым хостом и хостом, пакеты которого вы подделываете. Что бы использовать данный метод, необходимо так же включить опцию '-e'.

-e <интерфейс>
    Если nmap не может определить какой интерфейс использовать для приёма и отправки пакетов, то этой опцией можно указать его явно.

--source_port <номер_порта>
    Использовать порт отправки с определённым номером. Много непрофессиональных фаерволов и пакетных фильтров позволяют пакетам, отправленным с таких портов как например 53 (DNS) или 20 (FTP-DATA), свободно инициализировать соединения на защищаемом хосте. Соответственно, изменив наш порт отправки на разрешенный фаерволом порт мы можем устанавливать соединения с защищённой этим фаерволом машиной. Для UDP сканирования попробуйте сначала установить 53 порт, а для TCP - 20. Однако эта техника не всегда работает, вы не сможете определить характер изменения ISN, в связи с чем nmap самостоятельно сменит номер порта для этой цели, даже если вы указали эту опцию.

--data_length <количество_байт>
    Обычно nmap использует минимальные по размеру пакеты, которые содержат только заголовок. TCP пакеты обычно размером в 40 байт, а ICMP эхо запрос - всего 28. Эта опция указывает nmap дополнять отсылаемые пакеты заданным количеством байт случайной информации. Пакеты используемые при определении ОС сканируемого хоста не изменяются.

-n  Указывает nmap никогда не преобразовывать ip-адреса активных хостов в DNS-адресa. Увеличивает скорость сканирования и предотвращает появление записей о dns-запросах nmap в лог-файле на сервере имен.

-R  Указывает nmap всегда преобразовывать ip-адреса хостов в DNS-адресa. Обычно это происходит только если сканируемые машины находятся в активном состоянии.

-r  Указывает nmap не изменять порядок номеров сканируемых портов случайным образом.

--ttl <значение>
    Устанавливать в поле TTL отправляемых пакетов IPv4 заданное значение.

--privileged
    Указывает nmap, что пользователь имеет достаточные привилегии для таких операций как использование raw-сокетов, прослушивание трафика, и т.п. Эта опция используется в таких системах, где непривилегированным пользователям ядро разрешает использовать функции, которые доступны только привилегированным, например в специально сконфигурированной ОС Linux. Nmap не может этого определить, так как использует функцию getuid(), и в этом случае используется данная опция, которую необходимо указывать перед всеми остальными опциями. В качестве альтернативы --privileged можно использовать переменную NMAP_PRIVILEGED.

--interactive
    Запускает nmap в интерактивном режиме. Эту опцию полезно использовать в многопользовательских системах, так как, например, в истории командной строки не остаётся указанных вами параметров.

--randomize_hosts
    Указывает nmap сканировать хосты в случайной последовательности. Используются группы до 2048 хостов. Эта опция делает сканирование менее заметным для различных систем сетевого мониторинга, особенно если вы используете ее совместно с опциями настройки временных параметров.

-M <максимальное_количество_сокетов>
    Устанавливает максимальное количество сокетов, используемых параллельно в методе TCP connect() сканирования. Эту опцию можно использовать для замедления процесса сканирования и предотвращения выведения из строя сканируемого хоста.

--packet_trace
    Указывает nmap отображать все принимаемые и передаваемые пакеты в формате TCPDump. Эта опция может использоваться для отладки работы nmap и сети, а также в обучающих целях.

--datadir [имя_директории]
    При запуске nmap считывает данные из файлов nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes и nmap-os-fingerprints. Сначала nmap ищет эти файлы в директории указанной в опции --nmapdir. Если файлы не найдены - проверяется переменная окружения NMAPDIR, после чего ~/nmap, а затем путь наподобии /usr/local/share/nmap или /usr/share/nmap. И наконец, nmap ищет эти файлы в текущем каталоге. Этой опцией можно задать явное имя директории где расположены эти файлы.

НАСТРОЙКА ВРЕМЕННЫХ ПАРАМЕТРОВ
    Обычно nmap автоматически настраивает временные параметры при запуске, в соответствии с характеристиками сканируемой сети, что бы произвести сканирование как можно быстрее и точнее. Но иногда бывают случаи, когда самостоятельная настройка временных параметров nmap вас не устраивает. В этом случае вы можете воспользоваться следующими опциями:

-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
    Возможность установления режимов сканирования с готовыми наборами правил по установке временных интервалов. Paranoid режим - сканирование происходит очень медленно для того что бы системы защиты не распознали его. Пакеты посылаются последовательно, с интервалом в 5 минут. Режим Sneaky похож на режим Paranoid. Разница лишь в том, что интервал между посылкой пакетов составляет 15 секунд. Режим Polite используется в случае, когда необходимо что бы нагрузка на сеть была минимальной. В этом режиме пакеты отправляются последовательно с интервалом минимум 0,4 секунды. Режим Normal используется nmap по умолчанию. В этом режиме сканирование производится с максимальной скоростью, и по возможности без перегрузки сети и потери пакетов. Режим Aggressive используется для быстрого сканирования хорошо фильтруемых сетей, особенно если используется SYN-сканирование. Режим Insane рекомендуется использовать или в очень быстрых сетях, или если вы точно знаете, что пакеты не затеряются. Время сканирования одного хоста - 15 минут, а ожидание ответа на запрос - 0,3 секунды.

    Каждому режиму присвоен определённый номер от 0 до 5, и его можно указать вместо полного названия режима. Например, опция '-T0' означает режим Paranoid, а '-T5' - Insane. Если вы хотите использовать такие опции как --max_rtt_timeout или --host_timeout, располагайте их в командной строке после любых '-T' опций.

--host_timeout <миллисекунды>
    Устанавливает время, отводимое nmap на сканирование одного хоста, прежде чем он перейдет к очередному IP-адресу. По умолчанию этот параметр не имеет ограничения.

--max_rtt_timeout <миллисекунд>
    Устанавливает максимальное количество времени, в течение которого nmap ожидает ответ на посланный запрос, прежде чем повторить запрос или считать его утерянным. По умолчанию это значение установлено равным 9000 миллисекунд.

--min_rtt_timeout <миллисекунд>
    Если сканируемый хост очень быстро отвечает на запросы, nmap будет автоматически уменьшать интервал между посылаемыми запросами. Это ускоряет сканирование, но может привести к потере пакетов с ответами, пришедшими позже, чем обычно. Эта опция определяет сколько времени nmap должен ждать перед отправкой очередного пакета.

--initial_rtt_timeout <миллисекунд>
    Устанавливает время, отводимое на определение активности хоста. Эта опция используется в основном для сканирования хостов, защищенных фаерволом, совместно с опцией '-P0'. Обычно nmap автоматически выбирает оптимальное значение этого параметра после отправки ping и первых сканирующих пакетов на хост. Значение по умолчанию составляет 6000 миллисекунд.

--max_hostgroup <количество_хостов>
    Устанавливает максимальное количество хостов, которое nmap может сканировать параллельно. Большинство техник сканирования портов используют одновременное сканирование нескольких хостов, что позволяет работать быстрее. Но что бы дождаться всех результатов сканирования вам необходимо ждать, пока будут просканированы все хосты. Если вы хотите, что бы хосты сканировались поочерёдно и результаты выводились относительно каждого хоста без задержки - используйте 1 в качестве аргумента. Заметьте, что ping -сканирование группирует хосты по-своему и игнорирует этот параметр.

--min_hostgroup <количество_хостов>
    Устанавливает минимальное количество хостов, которое nmap должен сканировать параллельно. (см. --max_hostgroup)

--max_parallelism <количество>
    Устанавливает максимальное количество параллельных процессов сканирования nmap. Установка этого параметра равным 1 означает, что nmap никогда не будет сканировать более одного порта в один момент времени. Этот параметр также влияет и на ping-сканирование, RPC-сканирование и т.п.

--min_parallelism <количество>
    Устанавливает минимальное количество параллельных процессов сканирования nmap. Увеличивает скорость прохождения пакетов через некоторые фаерволы, однако если установить слишком большое значение, - результаты сканирования будут ненадёжными.

--scan_delay <миллисекунды>
    Устанавливает минимальное время задержки между отправкой пакетов. Эта опция используется для снижения нагрузки на сеть и уменьшения вероятности обнаружения сканирования. Nmap иногда может увеличивать это значение самостоятельно, если обнаруживает значительные потери пакетов. Например, ОС Solaris отвечают только одним ICMP port unreachable пакетом в секунду при UDP-сканировании. Nmap старается определить это и увеличить минимальное время задержки до одной секунды.

--max_scan_delay <миллисекунды>
    Как отмечено выше, nmap может автоматически изменять время задержки между отправкой пакетов. Это может давать лучшие результаты при сканировании, но значительно замедлять его. По умолчанию (без включенной '-Т' опции), nmap может изменять время задержки между отправкой пакетов до 1 в секунду. Эта опция позволяет установить большее или меньшее максимальное значение.

СПОСОБЫ ЗАДАНИЯ ЦЕЛИ
Всё, что не является опцией (или аргументом опции) nmap интерпретирует как адрес сканируемой цели. Простейший вариант - указать имена или ip-адреса хостов в командной строке. Если вы хотите просканировать подсеть ip-адресов, вы можете дополнить /маску сети к ip-адресу. Маска должна быть в диапазоне от 0 (сканировать весь Интернет) до 32 (сканировать единственный хост). Используйте /24 для сканирования целой сети класса "С" и /16 для сети класса "В".

Nmap также позволяет более гибко указать целевые IP-адреса, используя списки и диапазоны для каждого их элемента. Например, чтобы просканировать подсеть класса "B" с адресом 192.168.*.*. в командной строке вы можете указать " 192.168.*.* " или " 192.168.0-255.0-255 " или даже " 192.168.1-50,51-255.1,2,3,4,5-255 ". И, конечно же, вы можете использовать маску - " 192.168.0.0/16" ("*"), помните, что некоторые командные интерпретаторы требуют указывать "

Ещё одним вариантом задания адресов является использование префикса. Например, что бы просканировать все адреса в сети, заканчивающиеся на

ПРИМЕРЫ
В этом разделе приводятся некоторые примеры использования nmap, от простых до более сложных.

nmap -v target.example.com

Сканировать все зарезервированные TCP-порты на хосте target.example.com. Опция '-v' означает включить режим подробного отчета о ходе процесса сканирования.

nmap -sS -O target.example.com/24

Запускает SYN-сканирование (-sS) всех 255(маска /24) машин с адресами класса "C", одной из которых является target.example.com. Также осуществляется определение ОС (-O) каждого из сканируемых хостов. Для выполнения этих действий вам необходим статус root.

nmap -sX -p 22,53,110,143,4564 198.116.*.1-127

Запускает Xmas-сканирование (-sX) первой половины адресов (0-127) каждой из 255 подсетей класса "B" адресного пространства 128.210.*.*. На этих хостах сканируются 22, 53, 110, 143 и 4564 порты. Заметьте, что Xmas-сканирование работает с ОС Windows, CISCO, IRIX, HP/UX и BSDI машинами.

nmap -v --randomize_hosts -p 80 *.*.2.3-5

Вместо сканирования конкретных адресных диапазонов, иногда бывает интересно сканировать хосты, выбранные случайным образом. Эта команда ищет веб-сервера, ip-адрес которых оканчивается на .2.3, .2.4 и .2.5. Если ваш статус root, вы также можете просканировать порты обнаруженных хостов, указав опцию '-sS'. Вы можете найти много интересных машин, адреса которых начинаются на 127. Для этого укажите вместо первого астериска '127-222'.

host -l company.com | cut -d -f 4 | ./nmap -v -iL -

Просмотреть серверы DNS зоны и найти хосты в домене company.com, передав затем в nmap их адреса. Так выглядит команда для GNU/Linux, но для других ОС она может выглядеть несколько иначе.

ОШИБКИ
Ошибки? Какие ошибки? Если вы нашли ошибки - просьба незамедлительно сообщить о них. (желательно присылать и исправления :-) ). Не забывайте также присылать новые отпечатки ОС для пополнения общей базы. Отправляйте информацию на e-mail fyodor[@]insecure.org или в конференцию http://seclists.org/#nmap-dev.

АВТОР

Fyodor <fyodor@insecure.org>

РАСПРОСТРАНЕНИЕ
Новейшую версию nmap вы можете скачать по адресу http://www.insecure.org/nmap/

Права на Nmap Security Scanner принадлежат 1996-2004 Insecure.Com LLC. Nmap также является зарегистрированной торговой маркой Insecure.Com LLC. Эта программа является бесплатным программным обеспечением. Вы можете свободно распространять и/или модифицировать ее в соответствии с требованиями GNU General Public License, опубликованной Free Software Foundation; Версия 2. Если вы хотите использовать технологии nmap в частных программных продуктах - мы можем продать альтернативные лицензии. Обращайтесь на sales@insecure.com

ЭТА ПРОГРАММА ПОСТАВЛЯЕТСЯ БЕЗ ПРЕДОСТАВЛЕНИЯ КАКИХ-ЛИБО ГАРАНТИЙ.

Этот продукт также включает в себя программное обеспечение произведённое Apache Software Foundation (http://www.apache.org/)

Авторские права на библиотеку PCRE (Perl Compatible Regular Expressions), созданную Philip Hazel, принадлежат Кэмбриджскому Университету. Подробнее - http://www.pcre.org/

Библиотека Libpcap распространяется вместе с nmap и авторские права на неё принадлежат Van Jacobson, Craig Leres и Steven McCanne, Национальная лаборатория Lawrence Berkley Калифорнийского университета, Беркли, Калифорния. Сейчас эта библиотека сопровождается http://www.tcpdump.org.

Nmap опционально может быть скомпилирован с поддержкой OpenSSL. Подробнее - http://www.openssl.org/.

Перевод руководства пользователя на русский : Айви Ризз 5B43694E5D