Сканеры сети. Определение ос Сетевой сканер nmap системные требования

Сегодня ответ на вопрос о том, что представляет собой IP-сканер сети, может дать практически любой пользователь. Это специальная программа-сниффер, которая идентифицирует конкретный компьютерный терминал в локальной сети или при установке подключения к интернету. Как работает эта система, остается только догадываться. Что же представляет собой сканер сети? Условно все команды или программы такого типа можно разделить на несколько классов в зависимости от определяемых параметров. Должно быть ясно, что программный сканер сети должен функционировать в нескольких режимах, в том числе и включая определение внешних и внутренних IP-адресов подключенных устройств, распознавание беспроводных сетей, запуск системы диагностики и наличия доступа к ресурсам на основе протоколов HTTP и FTP.

Средства операционной системы Windows, предназначенные для сканирования

В операционных системах семейства Windows для определения IP-адресов имеется специальное средство, которое уже встроено в операционную систему.IP-адреса, как правило, автоматически задаются провайдерами при нынешнем их использовании.В сетевых настройках нужно просто установить данную установку – Obtain IPad dressautomatically. В том же режиме при этом устанавливается шлюз и маска подсети. Основной и альтернативный DNS-сервер в данном случае оказываются не задействованы. Их адреса в некоторых случаях необходимо вводить в ручном режиме, особенно в том случае, если настройка осуществляется через сервисы Google. Однако распознать любой внутренний адрес можно при использовании простейшей команды ping, которую нужно ввести с соответствующей консоли с указанием внутреннего адреса локального компьютера или терминала, который подключается к корпоративной сети. Чтобы посмотреть все адреса устройств, которые в данный момент подключены к одному из сетевых протоколов, необходимо использовать команду ipconfig. Многие пользователи недооценивают командную строку. А ведь именно в ней при задании дополнения к основной команде в виде renew или release6 можно применить автоматические настройки протокола IPv6 или даже обновить конфигурацию с получением настроек сервера DHCP.

Внешний запрос на основе команды пингования

Что же касается внешних запросов, поступающих по команде ping, то они производятся по большей части только со стороны администратора сети или провайдера. Недостаток данного метода заключается в определении внешнего адреса IP-устройства, подключенного к интернету. При этом внутренний адрес может быть скрыт или присвоен автоматически. В случае проверки виртуальных сетей WLAN осуществляется только пингование ADSL-модема или роутера. Его адрес никак не соответствует адресу локального компьютерного терминала.

Сканер сетей Wi-Fi

Перейдем непосредственно к рассмотрению программных продуктов.Наверное, уже не стоит говорить о том, что в том же Google Play вы можете скачать бесплатную утилиту, которая способна распознавать виртуальные сети, которые находятся вблизи пользователя. Если хорошо поискать в интернете, то можно обнаружить не просто сканер сети, а целый программный комплекс, который позволяет взломать пароль и даже выступить в роли анонимайзера. Это немного напоминает использование виртуальных прокси-серверов и протоколов доступа. Суть вопроса сводится к тому, чтобы определить незадействованный адрес или подключиться к нему. Таким образом, любой сканер IP адресов в сети выполняет их определение на основе выделяемых провайдером. Сама служба при условии использования виртуального прокси-сервера может только догадываться об этом.

Самые простые программы

Среди всего многообразия, которое сегодня можно обнаружить в интернете, наиболее популярными являются следующие программные продукты:

— сканер общедоступных беспроводных сетей Free WiFi Detector;

— сканер локальный портов и IP-адресов Net Scan;

— инструмент для беспроводных сетей InSSiDer;

— система проверки свободных адресов, не задействованных в локальных подключениях – Angry IP Scanner.

Все сканеры сети упомянутого выше типа работают по одному принципу. Это определение внешнего IP адреса подключаемого устройства, без разницы, мобильное устройство вы используете, ноутбук или стационарный компьютер. Все приложения, которые относятся к разряду программ«Сканер сети Windows7», применяют скрытую команду пингования, о чем пользователь может даже не догадываться. Внешний запрос при этом осуществляется не в форме операции, выполняемой Windows, а на основе собственных разработок с учетом используемого протокола и сервера DHCP. В варианте подключения прокси-сервера при этом могут наблюдаться сбои. Чтобы изменить эти настройки, необходимо использовать параметры сети или сетевого адаптера. В них необходимо выставить запрет использования прокси для локальных адресов. Это как минимум настройки протокола IPv4. Мобильные приложения в то же время являются довольно востребованными. В наиболее простом варианте можно привести следующий пример. Предположим, пользователь пришел в кафе и ему срочно нужно отправить электронное письмо или написать сообщение. Он не знает пароля доступа к виртуальной сети. При наличии установленного на планшете или смартфоне соответствующего приложения, сканер сети будет работать автоматически. Он определит ближайшую беспроводную схему. В зависимости от программного продукта, также может присутствовать и возможность беспарольного доступа к сети. Однако такой вариант является незаконным. Наверное, не нужно лишний раз напоминать о том, что сегодня существует огромное количество взломщиков, к которым иногда причисляют и приложения данного типа. При этом никто не понимает, что сканер IP-адресов сети определяет только источник, при помощи которого осуществляется подключение к интернету и доступ в сеть.

Заключение

Хуже всего тот факт, что ни одна программа данного типа при сканировании внешних и внутренних адресов не может обойти стороной конфигурационный файл hosts, в котором хранятся сведения об обращениях к стандартным адресам. Его содержимое иногда может иметь записи, которые блокируют те или иные ресурсы. Обращение к этим настройкам в операционных системах семейства Windows имеет очень высокий приоритет даже по отношению к серверам прокси и DNS. Поэтому при установке сканера сети, необходимо подумать о целесообразности использования данного программного продукта. К сожалению, приложения в виде сканеров, не контролируемых операционной системой Windows, могут вызывать конфликты на системном уровне. Так, например, может заблокироваться работа некоторых динамических библиотек, которые необходимы для корректного функционирования Windows и драйверов устройств. Также следует обратить внимание на законность проникновения в определенные виртуальные сети, это уже не говоря об установке программного обеспечения, взятого из неофициальных источников.

Сисадмин мнил себя богом сети,
но электрик грубо развеял этот миф.

ИТ-юмор

Введение

Сетевое сканирование - один из первых шагов в процессе взлома или его предупреждения, так как оно позволяет определить наиболее уязвимые и потенциально опасные открытые порты компьютера. Поскольку каждый компьютер обладает набором определенных особенностей, с помощью сканера портов можно определить, какие службы (FTP-, web-, почтовый сервер и т.п.) запущены на компьютере, а также какая операционная система управляет им. Чем больше служб запущено на компьютере, тем выше вероятность его взлома - ведь каждое программное обеспечение имеет уязвимые места.

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

Основы протокола TCP

Чтобы понять, каким образом происходит сканирование, необходимо разобраться в том, по какому алгоритму осуществляется TCP-соединение между компьютерами. Чтобы установить TCP-соединение между клиентом и сервером, клиент посылает запрос (TCP-пакет) с установленным флагом SYN для инициализации соединения. В случае если сервер прослушивает этот порт, он посылает пакет клиенту с установленными флагами SYN и ACK, тем самым одновременно подтверждая запрос клиента и запрашивая его об установлении обратного соединения. Затем клиент посылает пакет с установленным флагом ACK, подтверждая запрос SYN-сервера. Далее происходит передача данных, для подтверждения получения которых каждый раз отправляется пакет с флагом ACK. Когда сервер или клиент полностью закончит передачу данных, он посылает пакет с установленным флагом FIN, тем самым сообщая другой стороне о необходимости завершить соединение. Другая сторона, получив пакет с флагом FIN, посылает обратный пакет с установленным флагом FIN, подтверждая окончание соединения. Для того чтобы прервать соединение, любая из сторон может послать пакет с флагом RST. Более наглядно процесс обмена пакетами показан в табл. 1.

Таблица 1. Процесс установления соединения и обмена пакетами

Большинство сканеров получают информацию о доступных открытых портах и присутствии компьютера в сети исходя именно из этой последовательности.

Сетевой сканер Nmap и его возможности

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

Сетевой сканер Nmap появился в 1997 году для операционных систем на базе UNIX и продолжает совершенствоваться по сей день. От подобных программ для ОС на базе Windows он отличается мощным встроенным инструментарием, высокой скоростью работы, различными сопутствующими утилитами, разнообразными методами сканирования и популярность, поскольку практически любой дистрибутив Linux оснащен этим сканером сетевой безопасности. Однако, как и большинство узкоспециализированных программ для Linux, он не имеет доступной конечному пользователю оболочки и запускается из командной строки. Конечно, существуют дополнительные интерфейсы для управления этой утилитой, например такие, как Umit, Nmapfe, которые используют движок Nmap и выводят информацию в оконном режиме, а не в командной строке. Но все-таки эта утилита изначально разрабатывалась для работы в командной строке, а «навесные» утилиты увеличивают время работы и имеют массу недостатков по сравнению с оригиналом, в том числе и в стиле оформления. Кроме того, существует версия этой программы и для операционных систем на базе Windows. Так как методы работы и многие команды для обеих платформ идентичны, в данной статье будет рассмотрена версия Nmap 4.1 для Linux-систем. Поскольку Nmap входит практически в каждый дистрибутив Linux, для того чтобы просканировать сеть, не переставляя операционную систему, можно воспользоваться так называемыми LiveCD. Загрузочные диски такого типа не требуют установки и загружаются с CD/DVD-привода, при этом не нужно разбивать жесткий диск и создавать дополнительные разделы - жестким диском в этом случае служит часть оперативной памяти компьютера.

В настоящее время сетевые сканеры позволяют определять множество дополнительных параметров сканируемого компьютера. Nmap может определять большинство основных параметров сетевого адаптера: MAC-адрес, имя компьютера в домене, открытые порты, порты, закрытые брандмауэром, компанию - производителя чипсета сетевого адаптера исследуемого компьютера, версии ОС и служб. Отметим, что данные о MAC-адресах и о производителе чипсета можно получить только для компьютеров, которые находятся в той же подсети, что и сканирующий ПК. Чтобы оценить все достоинства этой программы, рассмотрим наиболее часто используемые при ее работе ключи.

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

Рис. 1. Список ключей при вводе команды Nmap

Синтаксис запуска программы следующий: Nmap {target specification} , где вместо Scan type указывается тип сканирования (по умолчанию, если это место оставить пустым, Nmap будет открыто сканировать доступные порты). В качестве options вводятся всевозможные ключи и параметры сканирования, а вместо target specification - либо IP-адрес компьютера, либо диапазон IP-адресов (который определяется маской подсети), либо название хоста.

Маски подсети

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

Как известно, IP-адрес состоит из четырех целочисленных значений (октет) и представляется в форме xxx.xxx.xxx.xxx, где xxx может принимать значения от 0 до 254. Но IP-адрес сам по себе не достаточен, и для того, чтобы сетевое устройство определило, к какой именно подсети принадлежит компьютер, необходима также маска подсети, чтобы показать, какая часть IP-адреса является идентификатором сети (Network ID), а какая - идентификатором хоста (Host ID). Идентификатор сети (Network ID) по существу - это адрес самой сети, а идентификатор хоста (Host ID) - адрес самого узла в сети. Рассмотрим узел с IP-адресом 10.242.10.242 и маской подсети 255.0.0.0 - в этом случае компьютер принадлежит к сети 10.0.0.0. Здесь идентификатором сети служит 10.0.0.0, а идентификатором хоста - 242.10.242. Чтобы получить адрес сети, зная IP-адрес и маску подсети, необходимо применить к ним операцию поразрядной конъюнкции. Результат получается побитным с AND между IP-адресом и маской подсети:

Например, в случае более сложной маски:

IP-адрес: 00001100 00100010 00111000 1001110 (12.34.56.78)

Маска подсети: 11111111 11111111 11100000 0000000 (255.255.224.0)

Адрес сети: 00001100 00100010 00100000 0000000 (12.34.32.0)

Однако для того, чтобы осуществлять сканирование сети и при этом писать меньше текста, можно использовать альтернативный ввод маски подсети с использованием префиксов. В большинстве случаев для простых сетей можно ограничиться простыми масками подсети, такими как 255.0.0.0, 255.255.0.0 и 255.255.255.0. Маску подсети часто записывают вместе с IP-адресом в формате «IP-адрес/количество единичных бит в маске». Например, IP-адрес 12.34.56.78 с маской 255.255.224.0 (то есть состоящей из 19 единичных и 13 нулевых бит) можно записать как 12.34.56.78/19. Для трех рассмотренных типов существует альтернативный ввод вида ip/8, ip/16 и ip/24, позволяющий сократить количество набираемых цифр при вводе в командной строке. Для приведенного выше примера маска подсети может быть записана таким образом: 10.242.10.242/8, что значительно короче, чем 10.242.10.242 маска 255.0.0.0. Поэтому диапазон IP-адресов для сети 10.0.0.0 можно записать в виде 10.0.0.0/8.

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

Вернемся к сетевому сканеру Nmap. Как уже говорилось, в качестве {target specification} можно указывать IP-адрес, диапазон адресов и имя хоста. Если требуется сканировать множество различных IP-адресов и хостов, вписывать все вручную в командную строку не очень удобно (особенно если количество адресов превышает 20) - для этого Nmap поддерживает загрузку файла с адресами. В табл. 2 перечислены возможные ключи, связанные с вводом сканируемых адресов.

Таблица 2. Ключи, отвечающие за ввод адресов

Стоит отметить, что файл, содержащий список адресов, должен быть оформлен в текстовом виде. Новый адрес или диапазон адресов должен начинаться с новой строки. Примеры ввода сканируемых адресов показаны на рис. 2 и 3.

Рис. 2. Использование ввода адресов из командной строки

Зная, каким образом можно задать адреса исследуемых компьютеров, посмотрим, что же выводится в конечном счете на экран. Набираем команду Nmap 10.0.0.62 10.0.0.53 , чтобы просканировать открытые порты компьютеров с этими адресами.

Рис. 3. Задание сканируемых адресов из файла

Результаты сканирования и их анализ

На рис. 4 показан вывод результатов сканирования. Сначала с помощью сервера DNS Nmap пытается определить соответствие имени сканируемому IP-адресу. Если операция прошла успешно, то в самом начале Nmap указывает реальное имя компьютера. Как видно из рисунка, IP-адресу 10.0.0.62 соответствует имя pakhomov.computerpresspublishing.ru. А для следующего исследуемого адреса - 10.0.0.53 - такого соответствия нет. Далее Nmap отображает информацию о закрытых или заблокированных портах (Not shown 1674 closed ports), а затем выводит (в три колонки) порты, имеющие другой статус. Первая колонка обозначает текущий номер порта, вторая может принимать различные значения, которые будут свидетельствовать об определенном Nmap статусе порта:

  • open (открытый порт) - порт открыт, и служба принимает TCP- или UDP-соединения по этому порту (данный порт наиболее уязвим для взлома);
  • filtered - порт закрыт брандмауэром, иной блокирующей программой или службой (правила роутера, аппаратный брандмауэр и т.п.);
  • closed - порт закрыт, так как нет службы или иной программы, прослушивающей этот порт на компьютере.

Рис. 4. Результат сканирования

Если порту присвоен статус unfiltered, это предполагает, что Nmap не смог точно определить, открыт порт или закрыт, обычно такое значение присваивается при сканировании методом ACK (о нем будет написано далее). Также существуют два допустимых значения: open|filtered и closed|filtered - в обоих случаях Nmap не смог определить статус порта. Чтобы более точно определить значение для первого случая, необходимо использовать сканирование методом FIN, Null, Xmas или UDP. Скорее всего, эти методы сканирования позволят получить более детальную информацию. Что касается значения closed|filtered, то оно появляется лишь в случае применения метода сканирования Idlescan.

Последняя колонка дает небольшую информацию о предполагаемом сервисе, использующем этот порт. Допустим, если открыт порт с номером 80, Nmap информирует, что этот порт обычно применяется web-серверами (http). Следует отметить, что для большей безопасности некоторые службы запускаются не на своем стандартном порте, а на другом, поэтому утверждать, что на 80-м порте запущен web-сервер, нельзя (для более точного определения запущенного сервиса предназначен метод сканирования версий). После вывода списка открытых портов Nmap отображает физический (MAC) адрес сетевого устройства, а также, если это возможно, определяет производителя чипсета сетевого адаптера исследуемого ПК и, в некоторых случаях, даже его наименование.

Методы сканирования на предмет наличия компьютера в сети

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

Обнаружение компьютера методом Ping

Самым простым является метод обнаружения работающих компьютеров с помощью Ping. Для этого в командной строке необходимо использовать ключ -sP. Сетевой сканер Nmap посылает ICMP эхо-запросы заданному IP-адресу или адресам и ждет ответа. Если ответ получен, значит, сканируемый компьютер работает, что и отображается в качестве результата сканирования. На рис. 5 показан результат использования этого метода.

Рис. 5. Результат сканирования с использованием -sP

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

Обнаружение с помощью SYN/ACK- и UDP-пакетов

Если какой-либо сервис прослушивает порт, а Nmap пытается установить соединение с ним (отсылает пакет с флагом SYN), в ответ сервис может послать пакет с флагами SYN/ACK, что покажет: компьютер в сети существует. Но при отсутствии сервиса по этому порту сервер посылает в ответ пакет с флагом RST, что также указывает, что по заданному IP-адресу компьютер есть. Если в ответ на посланный пакет SYN от сервера ничего не пришло - это значит, что либо компьютер выключен, либо трафик блокируется брандмауэром. Чтобы обойти блокирование брандмауэром, разработан еще один метод сканирования. Сканер Nmap обычно посылает пакеты с флагами SYN/ACK и пакет UDP по стандартному 80-му порту, который чаще всего используется для web-трафика и поэтому очень редко блокируется брандмауэром. С помощью ключей -PS, -PA и -PU можно задавать, какой пакет будет отправлен серверу и по какому порту. Пример этих команд приведен на рис. 6. Кстати, название порта пишется слитно с указанием типа пакета: -PS80,81.

Рис. 6. Результат сканирования с применением -PA, -PS и -PU

Обнаружение компьютера посредством различных ICMP-пакетов

Приведенный выше метод не позволяет точно установить наличие компьютера в сети. Сетевой сканер Nmap имеет еще одну возможность определения наличия компьютера в сети. Для того чтобы воспользоваться этой функцией, необходимо указать дополнительные ключи -PE, -PP или -PM. Первый метод использует запросы ICMP echo, однако, как уже упоминалось, ICMP-трафик часто блокируется, поэтому данный метод не всегда применим, но, следуя спецификации ICMP, существуют также запросы даты/времени (timestamp requests) и адреса маски сети (address mask requests). С помощью этих методов тоже можно получить ответ от удаленного компьютера, однако зачастую они не дают должного результата. Для применения метода ICMP echo необходимо указать ключ -PE, для двух других описанных методов - ключи -PP и -PM соответственно. На рис. 7 показаны попытки сканирования тремя методами.

Рис. 7. Результат сканирования с использованием ключей -PE, -PP и -PM

Отключение обнаружения компьютера при сканировании

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

По умолчанию при сканировании IP-адреса Nmap получает информацию об имени компьютера из системного DNS. Чтобы увеличить скорость сканирования, можно отключить эту опцию, для чего необходимо добавить ключ -n. Кстати, практически во всех программах и сервисах, так или иначе связанных с сетевым окружением, ключ -n используется именно в этом значении (netstat -n, route -n и т.п.). Существует также несколько опций, которые позволяют получить имя компьютера с помощью не только системного DNS, но и внешних серверов DNS. Для активирования этой опции необходимо запустить Nmap с ключом --dns-servers , где serv1 и serv2 - адреса DNS-серверов. Кроме того, можно воспользоваться ключом -R. Как уже упоминалось, по умолчанию для получения имени компьютера Nmap применяет системный DNS. Для указания этой опции вручную необходимо ввести ключ --system-dns . На рис. 8 приведены примеры использования ключей -n и -R --dns-servers.

Рис. 8. Использование ключей -n и -R --dns-servers

Методы сканирования портов удаленного компьютера

Сетевой сканер Nmap предполагает применение разнообразных методов сканирования и получения необходимой информации. Однако оговоримся, что очень многие методы задействуют различные манипуляции с флагами TCP-пакетов на низком уровне, а потому для работы требуют полномочий root (суперпользователя) в системе. Используемые методы могут функционировать только отдельно друг от друга, лишь сканирование UDP-портов может осуществляться одновременно с другими методами сканирования. Сканирование портов основывается на все том же методе отправки пакетов с измененными флагами при инициации TCP- и UDP-соединений.

Сканирование методом SYN

Наиболее распространенный метод, который используется по умолчанию, - это сканирование TCP SYN. Для большинства исследуемых компьютеров этого метода вполне достаточно, чтобы определить открытые порты. TCP SYN-сканирование наиболее быстрое по сравнению с другими методами - оно позволяет сканировать несколько сот портов в секунду, сохраняя при этом сканирующий компьютер в тени, поскольку никогда не завершает TCP-соединение (большинство утилит мониторинга не регистрируют данные соединения). Для использования этого метода необходимы права суперпользователя (root). Сканер Nmap отправляет исследуемому компьютеру пакет с флагом SYN, как будто он хочет открыть обычное TCP-соединение, следуя приведенным в начале статьи правилам. Если ответ (пакет с флагами SYN/ACK) от запрашиваемого хоста получен, порт будет обозначен как открытый, а при получении пакета с флагом RST - как закрытый. В случае если сканируемый компьютер не ответил, предполагается, что этот порт фильтруется брандмауэром. Чтобы использовать данный метод сканирования, необходимо запустить Nmap с ключом -sS (рис. 9).

Рис. 9. Сканирование с применением ключа -sS (сканирование TCP SYN)

Как видно из рисунка, большинство портов открыты, но некоторые закрыты брандмауэром.

Сканирование с использованием системной функции connect()

Бывают ситуации, когда полномочия суперпользователя отсутствуют, а просканировать удаленный компьютер необходимо. В этом случае Nmap использует метод, основанный на установлении соединения с помощью системной функции connect(), которую применяет большинство приложений - p2p-клиенты, браузеры и сетевые приложения. При этом Nmap посылает запрос самой операционной системе, которая и устанавливает TCP-соединение. Если соединение установлено, то порт помечается как открытый, а если нет - как закрытый. После определения статуса порта Nmap прерывает соединение, то есть с помощью функции connect() посылается пакет с флагом RST. Однако такой метод имеет один недостаток: поскольку соединение устанавливается полностью, оно остается в логах и журналах сканируемой системы, а потому системы по мониторингу практически всегда определят, какой компьютер произвел сканирование. В связи с этим данный метод применяется редко. Чтобы запустить вышеописанное сканирование, необходимо запустить Nmap с ключом -sT. Пример использование метода сканирования с помощью системной функции connect() приведен на рис. 10.

Рис. 10. Сканирование с использованием ключа -sT (сканирование TCP connect())

Сканирование портов UDP-протокола

Не стоит забывать и о UDP-сервисах, которые распространены почти так же, как сервисы, применяющие TCP-протокол. Наиболее распространенные сервисы, использующие UDP-протокол, - это DNS, SNMP и DHCP. Поскольку сканирование протокола UDP более сложное и медленное по сравнению с TCP-сканированием, многие защитные системы пренебрегают им и игнорируют прослушивание (фильтрацию) этих портов. Но в таком случае сервисы, прослушивающие данные порты, тоже могут быть уязвимы для взлома, так как Nmap позволяет определить, какие порты открыты и что за сервисы их прослушивают. Поскольку UDP-протокол не похож на TCP, метод сканирования отличается от рассмотренных ранее. Nmap посылает UDP-пакет с пустым заголовком по всем исследуемым портам и ждет ответа. Если в ответ он получает ICMP-пакет с ошибкой unreachable error, порт считается закрытым. При получении пакетов с другими ошибками Nmap считает, что порт фильтруется брандмауэром. Полученный ответный UDP-пакет свидетельствует о наличии сервиса, и порт маркируется открытым. Если ответ не получен после нескольких попыток, Nmap помечает порт как open|filtered, поскольку не может точно установить - открыт ли порт или брандмауэр блокирует трафик на этом порту. Кроме того, многие компьютеры могут посылать за секунду ограниченное количество ICMP-сообщений с ошибками. Это сделано для защиты от перегрузки сети. Чтобы уточнить состояние порта, можно использовать ключ -sV (в этом случае Nmap пытается определить запущенный по сканируемому порту сервис и его версию), но тогда скорость сканирования снижается на порядок. UDP-сканирование может быть запущено одновременно с любыми из методов TCP-сканирования, поскольку они применяют разные протоколы. Запуск UDP-сканирования происходит при указании ключа -sU. Различия в скорости продемонстрированы на рис. 11, где последовательно приведены примеры сканирования без опции -sV и с ее использованием.

Рис. 11. UDP-сканирование с использованием ключа -sV и без него

Из рисунка видно, что сканирование с помощью опции определения версии сервисов заняло почти в 10 раз больше времени (54 секунды против 4), чем без нее. Но эта опция помогла определить, что 53-й и 137-й UDP-порты открыты, хотя предыдущее сканирование не смогло точно установить их статус. В то же время даже эта опция далеко не всегда помогает получить достоверную информацию - из девяти портов с неопределенным статусом точно определились лишь два (53-й и 137-й). Nmap позволяет также задать время отклика для исследуемого компьютера, тем самым отсеивая медленные хосты и значительно увеличивая скорость UDP-сканирования. Опция, отвечающая за отклик сканируемого компьютера, может применяться не только с UDP-сканированием, но и со всеми остальными методами. Чтобы использовать эту опцию, необходимо ввести ключ --hosts-timeout , где sec - время отклика в миллисекундах.

Сканирование с помощью методов FIN, Xmas и Null

Поскольку TCP-соединение базируется на трехходовом установлении связи, рассмотренном в начале статьи, путем прерывания последовательности соединения можно также получить информацию о закрытых и открытых портах исследуемого хоста. Существует метод FIN-сканирования, при котором удаленному хосту посылаются пакеты с флагом FIN, которые обычно применяются при закрытии соединения. В этом случае закрытый порт компьютера, в соответствии со спецификацией протокола TCP, должен послать ответный пакет с флагом RST. Если же порт открыт или блокируется брандмауэром, ответа от него не будет. Как и в случае SYN-сканирования, соединение устанавливается не полностью, поэтому информации в системных логах исследуемого хоста может и не остаться, в то же время большинство систем мониторинга могут зафиксировать этот тип сканирования. Данный метод является более скрытным по сравнению с TCP connect-сканированием и позволяет определить, закрыт порт или открыт (блокируется), поэтому существуют несколько модификаций этого метода. При использовании метода null-сканирования вместо пакета с FIN-флагом отсылается пакет с пустым заголовком (0 бит, все флаги отключены). Этот метод работает по вышеописанному принципу. Еще один метод, имеющий схожий алгоритм работы, называется Xmas-сканирование. В этом случае хосту отсылается пакет, раскрашенный несколькими флагами (FIN, PSH и URG) на манер рождественской елки. Для каждого из рассмотренных методов существуют собственные ключи: -sN, -sF и -sX (Null-, FIN- и Xmas-сканирование соответственно). На рис. 12 приведены примеры сканирования всех трех типов, а для сравнения на рис. 13 - метод сканирования SYN.

Рис. 12. Сканирование с применением ключей -sN, -sF и -sX

При сравнении результатов сканирования с помощью SYN и Null, FIN и Xmas видно, что с их помощью многие порты были определены не как точно открытые, а только как open|filtered. Это объясняется тем, что большинство операционных систем семейства Windows, сетевых устройств Cisco и других не всегда следуют спецификации, поэтому результат такого сканирования для этих типов систем, скорее всего, будет отрицательным. В то же время сканирование этими тремя методами подходит для определения открытых портов на системах с ОС семейства UNIX, которые следуют спецификации протокола TCP, а также позволяет обходить многие брандмауэры и фильтрацию пакетов.

Рис. 13. SYN-сканирование

Сканирование с использованием различных флагов

Nmap позволяет задать флаги, которые будут применяться при таком типе сканирования, для чего необходимо запустить программу с ключом --scanflags. При этом типы флагов могут быть различными - URG, ACK, PSH, RST, SYN и FIN. Синтаксис команды следующий: Nmap --scanflags URGACKPSHRSTSYNFIN . В дополнении к этой команде можно указать и два метода сканирования: -sA и -sF (если они не указаны, по умолчанию применяется метод SYN-сканирования).

Сканирование с помощью методов ACK и Window

Для определения, какие порты на компьютере находятся в статусе filtered, а какие - в unfiltered, существует отдельно вынесенный тип сканирования - ACK. Его также можно задействовать с помощью ключа --scanflags ACK. Поскольку многие брандмауэры осуществляют просмотр лишь SYN-пакетов на определенном порту, выполняя тем самым фильтрацию, с помощью отсылки пакетов с флагом ACK с большой долей вероятности можно определить, существует ли на исследуемом компьютере брандмауэр или нет. Пакет с флагом ACK в этом случае отсылается не как часть соединения, а отдельно. В случае если принимающая сторона отсылает обратный пакет с флагом RST (соответственно порт не блокируется брандмауэром), порт помечается как unfiltered, если же хост не отвечает на пакет, то на нем установлен брандмауэр и порт находится в статусе filtered. Для активации этого метода необходимо запустить Nmap с ключом -sA. На рис. 14 показан пример использования этого метода сканирования.

Рис. 14. Сканирование методом ACK

Поскольку уже было проведено исследование компьютера путем SYN-сканирования (см. рис. 13), можно сказать, что ACK-сканирование позволяет определить статус лишь некоторых портов хоста. У этого метода существует аналог, который работает по такому же принципу, но несколько иначе интерпретирует полученные от хоста результаты. Сканирование методом TCP Window предполагает, что на некоторых хостах службы используют положительное значение поля window в ответном пакете (не ноль). Поэтому с помощью данного метода Nmap анализирует заголовки приходящих пакетов с флагом RST, и если приходящий пакет содержит положительное значение поля, то Nmap помечает этот порт открытым. Получение пакета с нулевым значением поля означает, что порт закрыт. Чтобы активировать этот метод сканирования, необходимо ввести ключ -sW.

Сканирование методом Maimon

Еще одним методом сканирования на основе трехходового соединения является метод, описанный специалистом по имени Uriel Maimon. Его метод практически идентичен методам FIN, Xmas и Null, за исключением того, что посылаются пакеты с флагами FIN/ACK. Здесь, если порт закрыт, хост должен отвечать пакетом RST. Чтобы активировать этот метод сканирования, необходимо ввести ключ -sM.

Все вышеописанные методы базируются на том же трехходовом методе соединения при TCP-соединении.

Скрытое сканирование с использованием алгоритма idlescan

Ни один из рассмотренных методов не позволяет полностью скрыть IP-адрес сканирующего хоста. Поскольку подмена IP-адреса исходящего пакета не так сложна, был найден метод сканирования, при котором исследуемый хост не может определить точного IP-адреса компьютера, с которого производится сканирование. Метод idlescan по своему алгоритму работы практически идентичен SYN-сканированию. Чтобы понять, каким образом при этом скрывается IP-адрес сканирующего компьютера, необходимо знать, что каждый IP-пакет имеет свой номер (fragment identification number, IPID). Многие операционные системы увеличивают этот номер для каждого следующего посланного пакета, поэтому можно легко определить, сколько пакетов послал хост. При этом стоит учитывать, что если компьютер получил пакет с флагами SYN/ACK от адреса, у которого он соединения не запрашивал, то в ответ он пошлет пакет с флагом RST. Этот метод предполагает использование еще одного компьютера-«зомби», от имени которого будут идти пакеты к сканируемому компьютеру. Далее рассмотрим алгоритм работы idlescan-метода.

Пусть сканирующий компьютер будет attacker, компьютер-«зомби» - zombie, а сканируемый компьютер - target.

Первый случай - исследуемый порт открыт:

  • attacker посылает пакет с флагами SYN/ACK zombie, а в ответ zombie посылает пакет с флагом RST. Этот пакет, например, имеет идентификационный номер (IPID) 123;
  • attacker посылает пакет с флагом SYN по искомому порту от имени компьютера zombie;
  • target посылает ответный запрос с флагами SYN/ACK компьютеру zombie. В ответ zombie посылает пакет с флагом RST компьютеру target, так как zombie не собирался устанавливать с ним соединение. Этот пакет имеет номер, увеличенный на единицу, - IPID 124;
  • attacker посылает пакет с флагом SYN/ACK компьютеру zombie, в ответ zombie посылает пакет с флагом RST. Этот пакет имеет IPID, увеличенный уже на два, - 125.

Второй случай - порт закрыт:

  • attacker посылает пакет с флагами SYN/ACK zombie, в ответ zombie посылает пакет с флагом RST. Этот пакет, к примеру, имеет идентификационный номер (IPID) 123;
  • attacker посылает пакет с флагом SYN по искомому порту от лица компьютера zombie;
  • target посылает пакет с флагом RST компьютеру zombie. В ответ zombie ничего не посылает;
  • attacker посылает пакет с флагом SYN/ACK компьютеру zombie, в ответ zombie посылает пакет с флагом RST. Этот пакет имеет IPID, увеличенный на единицу, - 124.

Таким образом, путем простой арифметики можно вычислить, открыт или закрыт порт на исследуемом компьютере. Преимущество данного способа заключается в том, что выявить IP-адрес сканирующего компьютера очень сложно, поскольку компьютер target считает, что сканирование было произведено компьютером zombie, а запросы сканирующего компьютера остаются только в журналах zombie. Чтобы активировать этот способ сканирования, необходимо ввести ключ -sI , где zombie - название или IP-адрес компьютера, от лица которого будет производиться сканирование, а port - порт для связи сканирующего компьютера и zombie (по умолчанию 80-й, поскольку на большинстве компьютеров этот порт открыт для web-трафика). Пример сканирования с использованием этого метода показан на рис. 15, для сравнения также приведен пример SYN-сканирования.

Рис. 15. Сканирование с использованием метода idlescan

Как видно из рисунка, компьютером-«зомби» служил ПК с IP-адресом 10.0.0.79, а сканируемый компьютер имел IP-адрес 10.0.0.62. Проанализировав результаты, можно утверждать, что idlescan-метод не всегда правильно определяет статус порта (открыт он или блокируется брандмауэром). Кроме того, если сравнивать время сканирования, то скорость SYN-метода значительно выше, так как при idlescan-сканировании Nmap приходится иногда несколько раз посылать пакеты, поскольку zombie-компьютер тоже может работать интенсивно и активно обмениваться пакетами, сбивая при этом счетчик IPID, который просчитывается Nmap. Такой метод является наиболее предпочтительным в случае, если необходимо скрыть сканирование, тем не менее он все-таки не дает точной картины открытых портов на исследуемом компьютере. Данный тип сканирования рекомендуется запускать с ключом -P0, поскольку в этом случае Nmap не опрашивает хост перед сканированием. В некоторых случаях, если zombie-компьютер ведет себя агрессивно и препятствует получению результатов сканирования (не может отобразить результаты сканирования), а информацию об открытых портах получить необходимо, можно использовать опцию -v -v (verbose mode). В этом режиме Nmap выводит всю служебную и полученную информацию на экран в режиме online.

Сканирование на наличие открытых протоколов

В некоторых случаях необходимо определить открытые протоколы на удаленном хосте. Поскольку каждому IP-протоколу транспортного уровня присвоен собственный порядковый номер, а каждый IP-пакет имеет поле protocol, которое указывает на тип заголовков пакетов и номер протокола, можно узнать, какие протоколы открыты на исследуемом компьютере. Для определения доступности протокола на хосте Nmap посылает несколько пакетов с пустыми заголовками, содержащими в поле protocol только номер протокола. В случае, если протокол недоступен, компьютер вернет ICMP-сообщение «protocol unreachable». Если в ответ хост не посылает пакетов - это может означать, что либо протокол доступен, либо брандмауэр блокирует ICMP-трафик. Такая ситуация очень схожа с UDP-сканированием, где также невозможно точно определить, открыт порт или фильтруется брандмауэром. Чтобы активировать сканирование протоколов, необходимо задействовать ключ -sO. На рис. 16 приведен пример использования этого метода.

Рис. 16. Сканирование доступных протоколов

В качестве результата Nmap выводит открытые и подвергающиеся фильтрации протоколы, поскольку он может точно определить этот статус. Остальные просканированные протоколы маркируются как open|filtered.

Скрытное сканирование посредством метода ftp bounce

Сетевой сканер Nmap поддерживает метод сканирования ftp bounce, суть которого заключается в возможности ftp-сервера отправлять файлы третьей стороне. Поскольку эта функция очень часто используется для других целей (сканирование, попытка взлома), многие ftp-серверы ее больше не поддерживают или блокируют. Метод ftp bounce позволяет просканировать порты удаленного компьютера от лица ftp-сервера. Сканирующий компьютер посылает запрос ftp-серверу на установление TCP-соединения по определенному порту с исследуемым компьютером для передачи файла. Анализ полученных ошибок от ftp-сервера позволяет Nmap определить, открыт порт или закрыт. В этом случае обеспечивается скрытность сканирования, поскольку для исследуемого компьютера инициатором соединения является ftp-сервер, а не сканирующий компьютер. Этот метод в первую очередь удобен тем, что, как правило, брандмауэр пропускает трафик известного ftp-сервера, поскольку последний обычно имеет больше прав доступа как к внешним, так и к внутренним ресурсам сети. Таким образом, появляется возможность обойти фильтры портов и брандмауэры, которые не пропускают трафик при сканировании другими методами. Для того чтобы просканировать компьютер с использованием этого метода, необходимо найти подходящий ftp-сервер, поддерживающий описанную функцию и логин/пароль для входа в этот ftp-сервер. Для запуска Nmap при сканировании этим методом необходимо указать ключ -b , где username и password - это логин и пароль для входа на ftp-сервер, а server - имя или IP-адрес сервера. По умолчанию если не использовать ключ:port, то Nmap будет пытаться соединиться с ftp-сервером по стандартному 21-му порту. На рис. 17 показан пример применения этого метода.

Рис. 17. Сканирование методом ftp bounce

Как видно из рисунка, сканирование этим методом дало положительные результаты. Однако сканирование этим методом возможно не всегда, так как очень часто ftp-сервер не может устанавливать соединение с удаленным компьютером по привилегированным портам (ниже 1024). При подобных ошибках Nmap выдает строку your ftp bounce server doesn‘t allow privileged ports или recv problem from ftp bounce server . Как и в случае idlescan-сканирования, чтобы скрыть присутствие, рекомендуется указывать ключ -P0, чтобы Nmap не пытался отсылать ICMP эхо-запросы сканируемому компьютеру. Стоит обратить внимание на частое зависание Nmap при использовании ftp bounce к определенным хостам. Для того чтобы все-таки получить необходимую информацию, следует запускать Nmap с опциями -v -v, с помощью которых сетевой сканер будет выводить получаемую информацию онлайн.

Настройки сканируемых портов

Сканер Nmap имеет множество дополнительных настроек. В табл. 3 рассмотрены настройки, касающиеся портов сканирования.

Таблица 3. Настройки портов сканирования

По умолчанию Nmap сканирует все порты, в том числе привилегированные (от 0 до 1024), и порты, определенные в файле Nmap-services. Этот файл постоянно обновляется разработчиками и включает порты, применяемые распространенными приложениями и сервисами. Файл содержит название сервиса, его описание и используемый им протокол. Поскольку Nmap позволяет сканировать не только TCP-, но и UDP-порты, при использовании ключа -p можно четко указать протокол и его порт. Сканирование 25-го UDP- и 80-го TCP-портов будет выглядеть следующим образом: Nmap -p U:25,T:80.

Определение версий запущенных служб

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

Таблица 4. Настройки сканирования для определения версий служб

Ключ -allports, приведенный в табл. 4, как правило, не используется, так как если эта опция активирована, Nmap будет посылать пакеты и по TCP-порту 9100. Это объясняется тем, что многие принтеры имеют следующий недостаток: при получении пакетов по порту 9100 они автоматически печатают полученную информацию и, чтобы не получить горы испорченной бумаги, TCP-порт 9100 при определении версии пропускают мимо сканирования.

Определение версии ОС на удаленном компьютере

Безусловно, одной из самых интересных опций является определение операционной системы удаленного компьютера. В этом случае применяется модернизированный метод, предназначенный для определения версий запущенных служб. Nmap производит различные тесты, посылая пакеты по разным протоколам с различными условиями на исследуемый компьютер. Сравнивая полученные результаты с эталонными значениями, указанными в файле Nmap-os-fingerprints, программа выдает сводный результат по компьютеру. В зависимости от количества и качества полученной информации, Nmap может определить производителя ОС, ее примерную версию и тип оборудования, поскольку не всегда конечным результатом сканирования является компьютер - это может быть также роутер, управляемый коммутатор и т.п. Для того чтобы активировать этот метод сканирования, необходимо указать ключ -O, а также ключ -A, который активизирует определение версии операционной системы и версий запущенных служб. На рис. 18 приведен пример определения ОС.

Рис. 18. Определение операционной системы

Настройки временных задержек

Высокая скорость работы определяется временны ми параметрами ответов и посылки пакетов. По умолчанию, чтобы получить правдоподобные результаты сканирования, Nmap использует наиболее эффективные параметры времени. Однако специалистам безопасности, которые пользуются этим сканером, для определенных методов сканирования могут понадобиться специальные установки временны х констант. В связи с этим разработчики Nmap предусмотрели установку некоторых констант вручную, а также возможность задать «расписание» сканирования. Некоторые ключи используют установку времени, которое по умолчанию вводится в миллисекундах, однако существует возможность записи времени в виде s, m и h - эти буквенные аргументы добавляются в конец числового значения, значительно сокращая запись и упрощая ее. Например, 600000, 600s, 10m обозначают одно и то же время. Указание возможных ключей временны х параметров и производительности приведено в табл. 5.

Таблица 5. Настройки временных параметров и производительности

Расписание сканирования

Как указывалось выше, Nmap позволяет задать расписание сканирования, чтобы попытаться скрыть свое присутствие от брандмауэров и систем безопасности. Существует шесть расписаний сканирования: Paranoid, Sneaky, Polite, Normal, Aggressive и Insane, при этом расписание Normal используется по умолчанию. Временны е задержки и другие сопутствующие факторы приведены в табл. 6.

Таблица 6. Характеристики различных расписаний сканирования

Дополнительные параметры командной строки

Практически все наиболее важные параметры командной строки описаны выше. Далее приведены некоторые тоже часто применяемые параметры:

  • -S - использование чужого IP-адреса в посылаемых компьютеру пакетах. В этом случае сервер вернет ответ по указанному адресу;
  • -e - применение только определенного сетевого интерфейса, например Nmap –e eth0;
  • -v; -d - вывод текущего состояния сканирования в режиме онлайн. Директива -d включает режим debug, где показывается вся возможная информация о текущем состоянии работы, а также ошибки и их коды;
  • -g (альтернатива --source-port ) - позволяет выбрать порт-источник, с которого будут посылаться пакеты при сканировании;
  • -data-length - дает возможность задать размер пакета в байтах. По умолчанию используются значения 40 и 28 для TCP- и ICMP-запросов соответственно;
  • -ttl - позволяет задать время для IP-пакета в поле time-to-live;
  • -spoof-mac - позволяет задать другой MAC-адрес (физический) для фреймов. Пример применения: Dlink, 0, 01:02:03:04:05:06 ;
  • -badsum - посылает пакеты TCP и ICMP с искаженной проверочной суммой. Брандмауэры или системы безопасности, как правило, отвечают на такой пакет;
  • -6 - использование сканирования для IPv6-сетей. В этом случае следует задать IPv6-адрес или название хоста;
  • -log-errors - все ошибки записываются в лог-файл;
  • -oN; -oM; -oS; -oA; -oG - запись сканирования в журнал. Типы записи различаются по методу сохранения информации. Опция -oN осуществляет запись после появления информации на экране, а опция -oA - запись сразу всеми возможными форматами в файлы с названием file и различными расширениями (*.xml, *.gNmap, *.Nmap).

Вывод

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

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

Несколько примеров работы с замечательным сканером сети - NMAP

Сканировать сеть в поиске Активных Хостов:

$ nmap -sn 192.168.1.0/ 24

Сканирование списка хостов/сетей из Файла:

$ nmap -iL input.txt

Формат файла:

Записи могут быть представлены в любом из форматов, с которыми работает Nmap из командной строки (IP адреса, имена хостов, CIDR, IPv6, или октетные диапазоны). Записи должны разделятся одним или более пробелами, табуляциями или переходами на новую строку.

$ cat input.txt server.test.com 192.168.1.0/ 24 192.168.2.1,2 ,3 192.168.3.0-200

Сканировать Множество IP Адресов:

$ nmap 192.168.1.1 192.168.1.2 192.168.1.3 $ nmap 192.168.1.1,2 ,3


5. Исключение IP/Хостов/Сетей из Сканирования

Исключить Цели из сканирования Nmap-ом:

$ nmap 192.168.1.0/ 24 --exclude 192.168.1.1 $ nmap 192.168.1.0/ 24 --exclude 192.168.1.1 192.168.1.5 $ nmap 192.168.1.0/ 24 --exclude 192.168.1.1,2 ,3

Исключить Список хостов, взятых из файла:

$ nmap 192.168.1.0/ 24 --excludefile exclude.txt

6. Сканирование Определенных Портов

Сканировать Один Порт:

$ nmap -p 80 192.168.1.1

Сканировать Несколько Портов:

$ nmap -p 80 ,443 192.168.1.1

Сканировать Диапазон Портов:

$ nmap -p 80 -1000 192.168.1.1

Сканировать Все Порты:

$ nmap -p "*" 192.168.1.1

Сканировать открытые порты

$ nmap -Pn 192.168.1.1

7. Определение Поддерживаемых IP Протоколов

Определить какие IP Протоколы (TCP, UDP, ICMP, и т.д.) поддерживает сканируемый хост:

$ nmap -sO 192.168.1.1

8. Сканирование TCP/UDP Портов

Сканировать все TCP Порты:

$ nmap -sT 192.168.1.1

Сканировать определенные TCP Порты:

$ nmap -p T:80 192.168.1.1

Сканировать все UDP Порты:

$ nmap -sU 192.168.1.1

Сканировать определенные UDP Порты:

$ nmap -p U:53 192.168.1.1

Объединение сканирования разных портов:

$ nmap -p U:53 ,79 ,113 ,T:21 -25 ,80 ,443 ,8080 192.168.1.1

9. Быстрое Сканирование

Активировать Быстрый Режим сканирования:

$ nmap -F 192.168.1.1

Показывать Причину Состояния Порта

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

$ nmap --reason 192.168.1.1

11. Показывать Только Открытые Порты

Показать Только Открытые Порты (либо возможно открытые) :

$ nmap --open 192.168.1.1

Показать только открытые 22-е порты:

Nmap -p22 --open 192.168.1.1

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

Включить Определение ОС:

$ nmap -O 192.168.1.1

* Определяет удаленную операционную систему с помощью отпечатка стека TCP/IP.
13. Определение Версии Сервисов

Включить Определение Версии Сервисов:

$ nmap -sV 192.168.1.1

* Определяет версии программ, запущенных на удаленном сервере.
14. Обнаружение Фаервола

Узнать, защищен ли компьютер какими-либо Пакетными Фильтрами или Фаерволом:

nmap -oX output.xml 192.168.1.1

Nmap -A 192.168.1.2

Эта команда позволит запускать все скрипты и много других вариантов, вот описание из меню справки: Enable OS detection, version detection, script scanning, and traceroute.
К примеру, по сервису Samba (445 порт), он покажет следующее:

Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)

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

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

Например, с помощью скриптов можно автоматически обнаруживать новые уязвимости безопасности в вашей сети. Namp может использоваться с хорошими и плохими намерениями, будьте аккуратны, чтобы не использовать nmap против закона. В этой инструкции мы рассмотрим как пользоваться namp для сканирования портов в операционной системе Linux. Но сначала нужно попытаться понять как работает эта утилита.

В компьютерных сетях все подключенные устройства имеют свой ip адрес. Каждый компьютер поддерживает протокол ping, с помощью которого можно определить подключен ли он к сети. Мы просто отправляем ping запрос компьютеру, и если он отзывается, то считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит какие хосты прислали ответ.

Но об этом вы, наверное, уже знаете. Более интересно то как Nmap узнает какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться к уже другой программой (адресатом) порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.

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

Синтаксис Nmap

Команда запуска Nmap очень проста для этого достаточно передать ей в параметрах целевой IP адрес или сеть, а также указать опции при необходимости:

$ nmap опции адрес

Теперь давайте рассмотрим основные опции, которые понадобятся нам в этой статье.

  • -sL - просто создать список работающих хостов, но не сканировать порты nmap;
  • -sP - только проверять доступен ли хост с помощью ping;
  • -PN - считать все хосты доступными, даже если они не отвечают на ping;
  • -sS/sT/sA/sW/sM - TCP сканирование;
  • -sU - UDP сканирование nmap;
  • -sN/sF/sX - TCP NULL и FIN сканирование;
  • -sC - запускать скрипт по умолчанию;
  • -sI - ленивое Indle сканирование;
  • -p - указать диапазон портов для проверки;
  • -sV - детальное исследование портов для определения версий служб;
  • -O - определять операционную систему;
  • -T - скорость сканирования, чем больше, тем быстрее;
  • -D - маскировать сканирование с помощью фиктивных IP;
  • -S - изменить свой IP адрес на указанный;
  • -e - использовать определенный интерфейс;
  • --spoof-mac - установить свой MAC адрес;
  • -A - определение операционной системы с помощью скриптов.

Теперь, когда мы рассмотрели все основные опции, давайте поговорим о том, как выполняется сканирование портов nmap.

Как пользоваться Nmap для сканирования портов в Linux

Дальше рассмотрим примеры nmap. Сначала давайте рассмотрим как найти все подключенные к сети устройства, для этого достаточно использовать опцию -sL и указать маску нашей сети. в моем случае это 192.168.1.1/24. Маску вашей локальной сети вы можете найти, выполнив команду:

Из вывода для используемого интерфейса возьмите число после слеша, а до слэша укажите ip вашего роутера. Команда на сканирование сети nmap будет выглядеть вот так:

nmap -sL 192.168.1.1/24

Иногда это сканирование может не дать никаких результатов, потому что некоторые операционные системы имеют защиту от сканирования портов. Но это можно обойти, просто использовав для сканирования ping всех ip адресов сети, для этого есть опция -sn:

nmap -sn 192.168.1.1/24

Как видите, теперь программа обнаружила активные устройства в сети. Дальше мы можем сканировать порты nmap для нужного узла запустив утилиту без опций:

sudo nmap 192.168.1.1

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

Чтобы узнать более подробную информацию о машине и запущенных на ней сервисах вы можете использовать опцию -sV. Утилита подключится к каждому порту и определит всю доступную информацию:

sudo nmap -sV 192.168.1.1

На нашей машине запущен ftp, а поэтому мы можем попытаться рассмотреть эту службу подробнее с помощью стандартных скриптов nmap. Скрипты позволяют проверить порт более детально, найти возможные уязвимости. Для этого используйте опцию -sC и -p чтобы задать порт:

sudo nmap -sC 192.168.56.102 -p 21

Мы выполняли скрипт по умолчанию, но есть еще и другие скрипты, например, найти все скрипты для ftp вы можете командой:

sudo find /usr/share/nmap/scripts/ -name "*.nse" | grep ftp

Затем попытаемся использовать один из них, для этого достаточно указать его с помощью опции --script. Но сначала вы можете посмотреть информацию о скрипте:

sudo nmap --script-help ftp-brute.nse

Этот скрипт будет пытаться определить логин и пароль от FTP на удаленном узле. Затем выполните скрипт:

sudo nmap --script ftp-brute.nse 192.168.1.1 -p 21

В результате скрипт подобрал логин и пароль, admin/admin. Вот поэтому не нужно использовать параметры входа по умолчанию.

Также можно запустить утилиту с опцией -A, она активирует более агрессивный режим работы утилиты, с помощью которого вы получите большую часть информации одной командой:

sudo nmap -A 192.168.1.1

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

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

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

Если не задано никаких опций обнаружения хостов, то Nmap посылает TCP ACK пакет на порт 80 и запрос на ICMP эхо ответ кажодй целевой машине. Исключение составляет ARP сканировании всех целей в сети. Для непривилегированных пользователей Unix оболочки, вместо ACK пакета посылается SYN используя системный вызов connect Эти умолчания равнозначны опциям -PA -PE . Такое сканирование достаточно для локальных сетей, но для исследования безопасности необходимо использовать более сложные наборы запросов.

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

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

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

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

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

-sP (Пинг сканирование)

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

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

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

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

Указывает Nmap полностью пропустить этап обнаружения хостов. Обычно, Nmap использует этот этап для обнаружения активных машин, к которым можно применить более углубленное сканирование. По умолчанию Nmap производит углубленное сканирование, такое как сканирование портов, определение версии или определение ОС только обнаруженных работающих хостов. После отключения этапа обнаружения хостов опцией -PN , Nmap будет производить сканирование каждого заданого целевого IP адреса. Так что, если для сканирования будет определена сеть с адресным пространством класса B (/16), то будет произведено сканирование всех 65,536 IP адресов. Т.к. этап обнаружения хостов и составления списка целей сканирования пропущен, то Nmap будет исполнять запрошенные функции, как если бы каждый IP адрес был активен. Для машин локальной сети будет произведено ARP сканирование (пока не зададите --send-ip), т.к. Nmap необходимы MAC адреса для дальнейшего сканирования целевых хостов. Раньше эта опция задавалась флагом P0 (используется нуль), но была переименова, чтобы избежать путаницы с пингованием с использованием 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), то хост помечается как не работающий. Этот механизм также используется для соединений с использованием протокола IPv6, т.к. построение сырых пакетов IPv6 еще не реализовано в Nmap.

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

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

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

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

Другим популярным типом сетевого экрана является брандмауэр блокирующий все непредвиденные пакеты. Изначально эта функция поддерживалась только в наиболее продвинутых брандмауэрах, хотя с годами она становится все популярнее. Использующийся в Linux сетевой экран Netfilter/iptables реализует этот механизм с помощью опции --state , которая категоризирует пакеты в зависимости от состояния соединения. Против таких систем лучше использовать пакеты SYN, т.к. непредвиденные пакеты ACK с большой вероятностью будут распознаны как фиктивные и заблокированы. Решение такого затруднительного положение состоит в том, чтобы посылать и SYN и ACK запросы путем задания опций -PS и -PA .

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

Еще одной функцией используемой для обнаружения хостов является UDP пингование, которая посылает пустой (пока не задана опция --data-length) UDP пакет на данные порты. Список портов задается в том же формает, что и для описанных выше опций -PS и -PA . Если порты не заданы, то по умолчанию используется 31338. Порт по умолчанию может быть задан во время компиляции путем изменения DEFAULT_UDP_PROBE_PORT_SPEC в nmap.h . По умолчанию выбран не распростаненный порт, т.к. отправка запросов на открытые порты нежелательна для этого типа сканирования.

Целью запроса UDP является получение в ответ ICMP пакета с ошибкой "порт недостижим". Это указывает Nmap на то, что машина работает и доступна. Другие типы ICMP ошибок, такие как хост/сеть недоступна или превышение TTL указывают на то, что машина выключена или недоступна. Отсутствие ответа интерпретируется этим же путем. Если такой запрос посылается на открытый порт, то большинство служб просто игнорируют пустой пакет и не посылают никакого ответа. Поэтому портом по умолчанию является 31338, т.к. он вряд ли будет использоваться какой-либо службой. Лишь некоторые службы, такие как Character Generator (chargen) protocol, ответят на пустой UDP пакет, и это также укажет Nmap на то, что машина доступна.

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

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

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

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

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

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

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

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

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

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

--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), возможно будет необходимо послать только один пакет на каждый хост.

--reason (Показать причины состояний портов и хостов)

Показывает информацию о причинах, по которым каждый порт установлен в какое-либо состояние, и по которым каждый хост работает или нет. Эта опция выводит тип пакета, по которому было определено состояние порта или хоста. Например, RST пакет от закрытого порта или эхо ответ от работающего хоста. Информация, которую может предоставить Nmap, определяется типом сканирования или пингования. SYN сканирование и SYN пингование (-sS и -PS) описываются очень детально, а информация о сканировании с использованием TCP соединений (-sT) ограничена реализацией системного вызова connect . Эта функция автоматически активируется при использовании опции отладки (-d) , и результаты ее работы хранятся в XML файлах, даже если эта опция не была задана.

-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 [, [,... ] ] (Сервера для обратного разрешения DNS)

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

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