null

Непонятная сеть? Держи nmap!

Наверное, каждый системный администратор хоть раз в жизни сталкивался с ситуацией, когда при подключении в сеть возникал вопрос "А что тут вообще происходит?". Далее происходило долгое и мучительное выяснение какие хосты есть в данной сети и зачем они нужны. Именно для облегчения и автоматизации данной задачи был придуман специальный программный продукт, создатели которой назвали его 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.