Наверное, каждый системный администратор хоть раз в жизни сталкивался с ситуацией, когда при подключении в сеть возникал вопрос "А что тут вообще происходит?". Далее происходило долгое и мучительное выяснение какие хосты есть в данной сети и зачем они нужны. Именно для облегчения и автоматизации данной задачи был придуман специальный программный продукт, создатели которой назвали его nmap. Да, да, он был создан не для хакеров или людей, которые безудержно сканируют весь интернет в ожидании банхаммера или ФСБ, а именно для уменьшения временных затрат на обслуживание вычислительной сети системными администраторами и сетевыми инженерами.
В данной статье описываются базовые возможности nmap и основные параметры конфигурации, или, другими словами, quickstart гайд.
Как работает nmap и что в нём можно конфигурировать.
Во время выполнения nmap выполняет четыре основные задачи: установка параметров работы, обнаружение хостов, сканирование обнаруженных софтов, вывод результатов. Рассмотрим их по порядку.
0. Как запускать
Во-первых, разберёмся наконец с тем как запуска nmap.
nmap [options] target
В качестве target могут выступать имена хостов и ip адресы в различных видах.
На примере опишу как можно указать список ip адресов:
192.168.2.1-10
192.168.2.*
192.168.*.1-10
192.168.2.0/24
Пояснять не буду, всё достаточно очевидно.
1. Параметры работы
Наверное, единственное что можно затронуть в этой секции -- это таймеры. nmap можно заставить работать как "быстро и жестоко", так и "медленно и мучительно". Эти параметры могут использоваться как для обхода систем, защищающих сеть от DOS атак и сканирования, так и для ускорения процесса.
Существует множество настроек таймеров, но в данном гайде я опишу только шаблоны, добродушно предоставленные разработчиками.
Существующие шаблоны:
-T0 -- paranoid, невероятно медленный
-T1 -- sneaky, можно использовать для обхода систем, защищающих сеть от сканирования
-T2 -- polite, используется для предотвращения возможной повышенной нагрузки на целевую систему
-T3 -- normal, средние параметры, устанавливаются по умолчанию
-T4 -- aggressive, ускоряет получение результатов. Рекомендуется использовать только в локальной сети
-T5 -- insane, название говорит само за себя. Отрабатывает очень быстро
Чтобы указать какой шаблон использовать, требуется использовать ключ -T[0-5].
2. Параметры сканирования
По умолчанию для того чтобы узнать "жив" ли хост, nmap использует ICMP ECHO. Если ответа не поступило, произведётся попытка подключиться к портам 80 и 443. Если последнее действие также оказалось неудачным, nmap решит что в сети нет активного хоста с данным ip адресом.
Но, как мы все понимаем, описанных выше процедур в большинстве случаев недостаточно для поиска всех живих машин в выбранном сетевом диапозоне. По этой причине существует возможность выполнить другие способы сканирования, среди которых:
TCP SYN Ping (-PS), TCP ACK Ping (-PA), UDP Ping (-PU), SCTP Ping (-PY), ICMP Timestamp Ping (-PP), ICMP Address Mask Ping (-PM), ARP Ping (-PR) и многое другое.
3. Параметры сканирования
3.1 Простое сканирование
Простое сканирование выдаст вам список открытых TCP портов (по умолчанию проверяются 1000 самых популярных (список самых популярыных составляли разработчики nmap))
$ nmap 192.168.2.13
Starting Nmap 6.40 ( http://nmap.org ) at 2017-04-19 17:24 MSK
Nmap scan report for scansun.elcom.spb.ru (192.168.2.13)
Host is up (0.00043s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
631/tcp open ipp
6566/tcp open sane-port
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
3.2 Сканирование нескольких устройств
Просто используем иструкцию по указанию target, написанную выше
$ nmap 192.168.2.10-12
Starting Nmap 6.40 ( http://nmap.org ) at 2017-04-19 17:29 MSK
Nmap scan report for 192.168.2.10
Host is up (0.00023s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 00:16:3E:89:AA:6C (Xensource)
Nmap scan report for 192.168.2.11
Host is up (0.00044s latency).
Not shown: 994 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
3390/tcp open dsc
5357/tcp open wsdapi
MAC Address: 00:21:F6:00:00:02 (Oracle)
Nmap scan report for 192.168.2.12
Host is up (0.00027s latency).
Not shown: 978 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
631/tcp open ipp
873/tcp open rsync
1556/tcp open veritas_pbx
3920/tcp open exasoftport1
4045/tcp open lockd
4848/tcp open appserv-http
5432/tcp open postgresql
7676/tcp open imqbrokerd
8080/tcp open http-proxy
8081/tcp open blackice-icecap
8181/tcp open unknown
8888/tcp open sun-answerbook
9102/tcp open jetdirect
13722/tcp open netbackup
13782/tcp open netbackup
13783/tcp open netbackup
32771/tcp open sometimes-rpc5
32772/tcp open sometimes-rpc7
MAC Address: 00:14:5E:BD:2B:E6 (IBM)
Nmap done: 3 IP addresses (3 hosts up) scanned in 208.30 seconds
3.3 Агрессивное сканирование
nmap -A выведет кучу разных нужных и не очень нужных данных об отсканированном хосте. Среди них: версия ОС (не всегда работает), открытые порты, запущенные на них сервисы с версиями этих сервисов, тип устройства, MAC адрес и ещё многое и разное.
$ nmap -A 192.168.2.11
Starting Nmap 6.40 ( http://nmap.org ) at 2017-04-19 17:37 MSK
Nmap scan report for 192.168.2.11
Host is up (0.00056s latency).
Not shown: 994 filtered ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
445/tcp open netbios-ssn
3389/tcp open ms-wbt-server Microsoft Terminal Service
3390/tcp open dsc?
5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-methods: No Allow or Public header in OPTIONS response (status code 503)
|_http-title: Service Unavailable
MAC Address: 00:21:F6:00:00:02 (Oracle)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|phone
Running: Microsoft Windows 7|Phone|Vista|2008
OS CPE: cpe:/o:microsoft:windows_7::-:professional cpe:/o:microsoft:windows cpe:/o:microsoft:windows_vista::- cpe:/o:microsoft:windows_vista::sp1 cpe:/o:microsoft:windows_server_2008::sp1
OS details: Microsoft Windows 7 Professional, Microsoft Windows Phone 7.5, Microsoft Windows Vista SP0 or SP1, Windows Server 2008 SP1, or Windows 7, Microsoft Windows Vista SP2, Windows 7 SP1, or Windows Server 2008
Network Distance: 1 hop
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_nbstat: NetBIOS name: SUNWIN, NetBIOS user: <unknown>, NetBIOS MAC: 00:21:f6:00:00:02 (Oracle)
| smb-os-discovery:
| OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
| OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
| Computer name: SUNWIN
| NetBIOS computer name: SUNWIN
| Workgroup: ELCOM
|_ System time: 2017-04-19T17:39:31+03:00
| smb-security-mode:
| Account that was used for smb scripts: guest
| User-level authentication
| SMB Security: Challenge/response passwords supported
|_ Message signing disabled (dangerous, but default)
|_smbv2-enabled: Server supports SMBv2 protocol
TRACEROUTE
HOP RTT ADDRESS
1 0.56 ms 192.168.2.11
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 194.59 seconds
3.4 Просто вывести все "живые хосты". Работает на debian-like системах
По сути, nmap тут используется только для заполнения arp таблицы всеми хостами, которые отвечают на arp в заданной подсети. Почему делать так? Потому что работает быстро. Мы не задействуем никакие "фичи" nmap, которые нам в данный момент не нужны и решаем проблему. Просто nmap -sn выведет не все хосты так как они могут не отвечать на ICMP ECHO, а на ARP они уж всяко ответят.
nmap -sn 192.168.2.0/24 >/dev/null ;arp -n |awk 'NR>1 && !/incomplete/ {print $1}'
4. Вывод результатов
По поводу вывода можно сказать немногое: есть обычный выво|и, J4LULZ, существует вывод в 133t (-oS)|д в терминал (без ключей, пример выше), вывод в текстовый файл (-oN file), вывод в файл в виде XML (-oX file), т.н. Gepable Output (-oX file) и, J4LULZ, существует вывод в 133t (-oS).
Выводы
Тут описаны только некоторые и базовые возможности nmap, но многое уже является достаточно полезным. Для более подробного изуачения рекомендую прочитать либо официальную документацию (книга, частично платная) или хотя бы man.