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

Nmap также может определять Mac-адрес, тип ОС, версию службы и многое другое.

В этой статье объясняются основы использования команды nmap для выполнения различных сетевых задач.

Установка Nmap

Nmap - это многоплатформенная программа, которую можно установить во всех основных операционных системах. Первоначально он был выпущен как инструмент только для Linux, а позже был перенесен на другие системы, такие как BSD, Windows и macOS.

Если вы предпочитаете графический интерфейс, а не командную строку, Nmap также имеет графический пользовательский интерфейс под названием Zenmap.

Официальные бинарные пакеты доступны для загрузки со страницы загрузки Nmap.

Процедура установки проста и зависит от вашей операционной системы.

Установка Nmap в Ubuntu и Debian

Nmap доступен из репозиториев Ubuntu и Debian по умолчанию. Чтобы установить его, запустите:

$ sudo apt update
$ sudo apt install nmap

Установка Nmap на CentOS и Fedora

На CentOS и других производных от Red Hat запускаются:

$ sudo dnf install nmap

Установка Nmap на macOS

Пользователи macOS могут установить Nmap, загрузив установочный пакет «.dmg» с сайта Nmap или через Homebrew:

$ brew install nmap

Установка Nmap в Windows

Версия Nmap для Windows имеет некоторые ограничения и, как правило, немного медленнее, чем версия для UNIX.

Самый простой вариант установки Nmap в Windows - это загрузить и запустить самоустанавливающийся exe-файл.

Вы можете запустить Nmap в Windows либо из командной строки, либо запустив программу Zenmap. Для получения дополнительной информации о том, как использовать Nmap в Windows, ознакомьтесь с инструкциями по использованию после установки.

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

Nmap обычно используется для аудита сетевой безопасности, отображения сети, определения открытых портов и поиска сетевых устройств.

Упрощенный синтаксис команды nmap следующий:

$ nmap [Options] [Target...]

Самый простой пример использования Nmap - сканирование одной цели от имени обычного пользователя без указания каких-либо параметров:

$ nmap scanme.nmap.org

При вызове от имени пользователя без полномочий root, у которого нет прав доступа к исходным пакетам, nmap запускает сканирование TCP-соединения. (-sT) по умолчанию включен в непривилегированном режиме.

Вывод будет выглядеть примерно так, включая основную информацию о сканировании и список открытых и отфильтрованных TCP-портов.

Output

Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-04 20:19 CET
Nmap scan report for cast.lan (192.168.10.121)
Host is up (0.048s latency).
Not shown: 981 closed ports
PORT     STATE    SERVICE
21/tcp   open     ftp
22/tcp   open     ssh
25/tcp   open     smtp
53/tcp   open     domain
80/tcp   open     http
110/tcp  open     pop3
143/tcp  open     imap
443/tcp  open     https
587/tcp  open     submission
993/tcp  open     imaps
995/tcp  open     pop3s
1025/tcp open     NFS-or-IIS
1080/tcp open     socks
8080/tcp open     http-proxy
8081/tcp open     blackice-icecap

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

Самым популярным вариантом сканирования является сканирование TCP SYN (-sS), которое работает быстрее, чем параметр подключения, и работает со всеми совместимыми стеками TCP.

-sS включается по умолчанию, когда nmap вызывается от имени пользователя с административными привилегиями:

$ sudo nmap 192.168.10.121

Для более подробного вывода используйте увеличение детализации с помощью -v или -vv:

$ sudo nmap -vv 192.168.10.121

Чтобы выполнить сканирование UDP, вызовите команду с параметром (-sU) от имени пользователя root:

$ sudo nmap -sU 192.168.10.121

Для получения полного списка методов сканирования портов посетите страницу документации Nmap.

Nmap также поддерживает адреса IPv6. Чтобы указать хост IPv6, используйте параметр -6:

$ sudo nmap -6 fd12:3456:789a:1::1

Указание целевых хостов

Nmap рассматривает все аргументы, которые не являются опциями, как целевые хосты.

Аргументы считаются вариантами, если они начинаются с одинарного или двойного тире (-,--).

Самый простой вариант - передать один или несколько целевых адресов или доменных имен:

$ nmap 192.168.10.121 host.to.scan

Вы можете использовать нотацию CIDR, чтобы указать диапазон сети:

$ nmap 192.168.10.0/24

Чтобы указать диапазон октетов, используйте символ тире. Например, для сканирования 192.168.10.1, 192.168.11.1 и 192.168.12.1:

$ nmap 192.168.10-12.1

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

$ nmap 192.168.10,11,12.1

Вы можете комбинировать все формы:

$ nmap 10.8-10.10,11,12.0/28 192.168.1-2.100,101

Чтобы убедиться, что вы указали правильные хосты перед сканированием, используйте параметр сканирования списка (-sL), который перечисляет только целевые объекты без запуска сканирования:

$ nmap -sL 10.8-10.10,11,12.0/28 192.168.1-2.100,101

Если вы хотите исключить цели, которые включены в указанный вами диапазон, используйте параметр --exclude:

$ nmap 10.8-10.10,11,12.0/28 --exclude 10.10.12.12

Указание и сканирование портов

По умолчанию Nmap выполняет быстрое сканирование 1000 самых популярных портов. Это не первые 1000 последовательных портов, а 1000 наиболее часто используемых портов в диапазоне от 1 до 65389.

Чтобы сканировать все порты с 1 по 65535, используйте параметр -p-:

$ nmap -p- 192.168.10.121

Каждый порт может находиться в одном из следующих состояний:

  • open - программа, запущенная на порту, отвечает на запрос.
  • closed - на порту не работает ни одна программа, и хост отвечает на запросы.
  • filtered - Хост не отвечает на запрос.

Порты и диапазоны портов указываются с параметром -p.

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

$ nmap -p 443 192.168.10.121

Чтобы указать более одного порта, разделите целевые порты запятой:

$ nmap -p 80,443 192.168.10.121

Диапазоны портов можно указать с помощью символа тире. Например, чтобы просканировать все порты UDP в диапазоне от 1 до 1024, вы должны запустить:

$ sudo nmap -sU -p 1-1024 192.168.10.121

Все вместе:

$ nmap -p 1-1024,8080,9000 192.168.10.121

Порты также можно указать с помощью имени порта. Например, для поиска порта 22, ssh, вы можете использовать:

$ nmap -p ssh 192.168.10.121

Ping сканирование

Чтобы выполнить ping-сканирование или обнаружение хоста, вызовите команду nmap с параметром -sn:

$ sudo nmap -sn 192.168.10.0/24

Опция -sn указывает Nmap только обнаруживать сетевые хосты и не выполнять сканирование портов. Это полезно, когда вы хотите быстро определить, какой из указанных хостов запущен и работает.

Отключение разрешения DNS-имен

По умолчанию Nmap выполняет обратное разрешение DNS для каждого обнаруженного хоста, что увеличивает время сканирования.

При сканировании больших сетей рекомендуется отключить разрешение обратного DNS и ускорить сканирование. Для этого вызовите команду с параметром -n:

$ sudo nmap -n 192.168.10.0/16

Определение ОС, служб и версий

Nmap может обнаружить операционную систему удаленного хоста с помощью снятия отпечатков стека TCP / IP. Чтобы запустить обнаружение ОС, вызовите команду с параметром -O:

$ sudo nmap -O scanme.nmap.org

Если Nmap может обнаружить ОС хоста, он напечатает что-то вроде следующего:

Output

...
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.0 - 5.4
Network Distance: 18 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.47 seconds

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

Благодаря обнаружению службы и версии Nmap покажет вам, какая программа прослушивает порт и версию программы.

Для поиска службы и версии используйте параметр -sV:

$ sudo nmap -sV scanme.nmap.org
Output

...
PORT      STATE    SERVICE      VERSION
19/tcp    filtered chargen
22/tcp    open     ssh          OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
80/tcp    open     http         Apache httpd 2.4.7 ((Ubuntu))
135/tcp   filtered msrpc
139/tcp   filtered netbios-ssn
445/tcp   filtered microsoft-ds
9929/tcp  open     nping-echo   Nping echo
31337/tcp open     tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Вы также можете сканировать ОС, версии и запускать traceroute одной командой, используя параметр -A:

$ sudo nmap -A 192.168.10.121

Вывод Nmap

По умолчанию Nmap выводит информацию на стандартный вывод (stdout).

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

Nmap предоставляет несколько типов вывода. Чтобы сохранить вывод в нормальном формате, используйте параметр -oN, за которым следует имя файла:

$ sudo nmap -sU -p 1-1024 192.168.10.121 -oN output.txt

Самый популярный вариант - сохранить вывод в формате XML. Для этого используйте параметр -oX:

$ sudo nmap -sU -p 1-1024 192.168.10.121 -oX output.xml

Еще один полезный формат - вывод grepable, который можно анализировать с помощью стандартных инструментов Unix, таких как grep, awk и cut. Вывод grepable указывается с параметром -oG:

$ sudo nmap -sU -p 1-1024 192.168.10.121 -oG output

Механизм сценариев Nmap

Одна из самых мощных функций Nmap - это скриптовый движок. Nmap поставляется с сотнями скриптов, и вы также можете писать свои собственные скрипты на языке Lua.

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

Например, чтобы проверить, скомпрометирован ли данный хост, вы можете использовать:

$ nmap -sV --script http-malware-host scanme.nmap.org

Заключение

Nmap - это инструмент с открытым исходным кодом, который в основном используется администраторами сети для обнаружения хоста и сканирования портов.

Обратите внимание, что в некоторых странах сканирование сетей без разрешения является незаконным.