Итак, перед Вами поставлена задача, провести соответствие устройств с их MAC адресами в локальной сети, как бы вы поступили? Вопрос номер два: а для чего все это нужно, таким образом, я преследую несколько целей:
- Составить список всех зарегистрированных устройств
- Настроить авторизацию в сети только тех устройств из первого списка, которые реально определяют те устройства, которые реально работают и я их знаю, в общем как то так, позже обобщу все-то чего я хочу добиться этим пунктом.
План исполнения поставленной задачи:
- Просканировать локальную сеть по маске, используемой на предприятии, но может быть, что машины закрыты фаерволом, поэтому нужно посылать arp request’ы.
- Посредством ARP запрос проверить каждый узел сети на получение его MAC адреса, уникального идентификатора устройства.
MAC адрес – это, к примеру:
C:\Users\ekzorchik>ping -n 1 192.168.0.1
Обмен пакетами с 192.168.0.1 по с 32 байтами данных:
Ответ от 192.168.0.1: число байт=32 время=2мс TTL=128
C:\Users\ekzorchik>arp -a 192.168.0.1
Интерфейс: 192.168.0.186 — 0xb
адрес в Интернете Физический адрес Тип
192.168.0.1 00-15-5d-0a-06-00 динамический -> вот это и есть MAC адрес устройства, где первые 6 байт: 00-15-5d это идентификатор производителя, вычисляется он по полной базе (Задача: прикрутить к скрипту опознавание кто это), а следующие 6 байт – это уникальный идентификатор сетевого адаптера установленного в системе.
Как я бы решал поставленную задачу:
Т.к. я преимущественно отожествляю себя, как Ubuntu специалист, то и средство на котором я буду разбирать пути решения – это система Ubuntu 12.04.5 серверная редакция:
Получить результат можно следующими способами:
А) Утилита arp–scan – данная утилита может просканировать все сеть и получить заветные значения: IP & MAC
ekzorchik@srv-host:~$ sudo apt-get install arp-scan –y
Запускаю утилиту на сканирование текущей сети, в которой сетевой адаптер получил от DHCP сервера IP адрес:
ekzorchik@srv-host:~$ arp-scan --interface=eth0 --localnet
You need to be root, or arp-scan must be SUID root, to open a link-layer socket.
link_open: Operation not permitted
Как видно выше и из документации (arp–scan –help) утилита может работать только с правами root, поэтому задействуем утилиту sudo для предоставления ей таких прав на запуск:
ekzorchik@srv-host:~$ sudo arp-scan --interface=eth0 --localnet
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-sca n/)
192.168.0.1 00:15:5d:0a:06:00 Microsoft Corporation
192.168.0.2 00:15:5d:0a:06:01 Microsoft Corporation
192.168.0.3 00:50:56:9c:25:c3 VMware, Inc.
192.168.0.5 00:21:91:fb:c9:45 D-Link Corporation
192.168.0.6 00:22:64:0a:e0:e8 Hewlett Packard
192.168.0.7 00:15:17:fa:a6:ac Intel Corporate
192.168.0.9 00:15:5d:0a:06:0d Microsoft Corporation
192.168.0.10 00:0c:29:34:c4:b4 VMware, Inc.
192.168.0.11 00:0c:29:c2:ee:15 VMware, Inc.
192.168.0.12 d8:eb:97:d0:5d:0d (Unknown)
Здесь я прерываю список, т.к. он очень большой, что теперь я могу сделать:
Сохранить его в txt
Открыть в программе LibreOffice Calc и произвести с ним некоторое форматирование, добавив такие колонки, как: Сервис на этом IP адресе, местонахождение устройства.
На заметку: Также можно использовать данную утилиту не для всего пула устройства в сети, а для конкретных IP адресов:
ekzorchik@srv-host:~$ sudo arp-scan --interface=eth0 192.168.0.1 192.168.0.20 192.168.0.10
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 3 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.20 00:15:17:73:be:84 Intel Corporate
192.168.0.1 00:15:5d:0a:06:00 Microsoft Corporation
192.168.0.10 00:0c:29:34:c4:b4 VMware, Inc.
6 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 3 hosts scanned in 0.106 seconds (28.30 hosts/sec). 3 responded
Просканировать локальную сеть, ограничив результаты маской подсети:
ekzorchik@srv-host:~$ sudo arp-scan --interface=eth0 192.168.0.0/24
ekzorchik@srv-host:~$ sudo arp-scan --interface=eth0 192.168.0.0:255.255.255.0
Просканировать локальную сеть, огранив результаты, указанным диапозоном IP адресов:
ekzorchik@srv-host:~$ sudo arp-scan --interface=eth0 192.168.0.1-192.168.0.10
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 10 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.1 00:15:5d:0a:06:00 Microsoft Corporation
192.168.0.2 00:15:5d:0a:06:01 Microsoft Corporation
192.168.0.3 00:50:56:9c:25:c3 VMware, Inc.
192.168.0.6 00:22:64:0a:e0:e8 Hewlett Packard
192.168.0.5 00:21:91:fb:c9:45 D-Link Corporation
192.168.0.7 00:15:17:fa:a6:ac Intel Corporate
192.168.0.9 00:15:5d:0a:06:0d Microsoft Corporation
192.168.0.10 00:0c:29:34:c4:b4 VMware, Inc.
11 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 10 hosts scanned in 0.363 seconds (27.55 hosts/sec). 8 responded
В комплекте с утилитой идет также утилита: arp–fingerprint – которая по своей базе отпечатком может косвенно определить, к какому типу операционных систем принадлежит тот или иной IP адрес:
ekzorchik@srv-host:~$ sudo arp-fingerprint -o "--interface=eth0 --numeric" 192.168.0.1
192.168.0.1 11110100000 FreeBSD 5.3, 7.0, DragonflyBSD 2.0, Win98, WinME, NT4, 2000, XP, 2003, Catalyst IOS 12.0, 12.1, 12.2, FortiOS 3.00
ekzorchik@srv-host:~$ sudo arp-fingerprint -o "--interface=eth0 --numeric" 192.168.0.10
192.168.0.10 01010100000 Linux 2.2, 2.4, 2.6, Vista, 2008, Windows7
Из обоих примеров, я вынес для себя, что получаемые результаты слишком расплывчаты и не могут со 100% точностью характеризовать систему.
Также очень интересным считаю, это выявление факта того, что в сети каким либо образом появляется двойник (конфликт) с точно таким же IP адресом как и у зарегистрированного клиента:
ekzorchik@srv-host:~$ sudo arp-scan --interface=eth0 --arpspa=dest 192.168.0.10
За дополнительными параметрами следует обращаться к справочной информации: man arp–scan
Б) Вторым способом получения, точно такого же результата, как выше из утилиты arp–scan является сетевой сканер безопасности: – nmap
ekzorchik@srv-host:~$ sudo apt-get install nmap –y
На заметку: обозначение опций используемых для получения результата: IP = MAC
–sP -> Пинг сканирование – просто определить, работает ли хост
–PR -> Задействовать проверку ARP Ping ,т.е. по хосту определить производителя сетевой карточки.
ekzorchik@srv-host:~$ sudo nmap -sP -PR 192.168.0.* | head -n 20
Starting Nmap 5.21 ( http://nmap.org ) at 2015-02-09 09:34 MSK
Nmap scan report for server.dsplit.local (192.168.0.1)
Host is up (0.0030s latency).
MAC Address: 00:15:5D:0A:06:00 (Microsoft)
Nmap scan report for ekt-ts10.dsplit.local (192.168.0.2)
Host is up (0.0027s latency).
MAC Address: 00:15:5D:0A:06:01 (Microsoft)
Nmap scan report for tserver.dsplit.local (192.168.0.3)
Host is up (0.0027s latency).
MAC Address: 00:50:56:9C:25:C3 (VMware)
Nmap scan report for vmw1.dsplit.local (192.168.0.5)
Host is up (0.0082s latency).
MAC Address: 00:21:91:FB:C9:45 (D-Link)
Nmap scan report for 192.168.0.6
Либо так:
ekzorchik@srv-mon:~$ sudo nmap -sP 192.168.0.1/24 | grep 'MAC' | awk '{print $3 $4}'
00:15:5D:0A:06:00(Microsoft)
00:15:5D:0A:06:01(Microsoft)
00:50:56:9C:25:C3(VMware)
00:21:91:FB:C9:45(D-Link)
00:22:64:0A:E0:E8(Hewlett
00:15:17:FA:A6:AC(Intel
00:15:5D:0A:06:0D(Microsoft)
Всё, конечно же, хорошо, но вот получаемый вывод без дополнительного форматирования не очень удобен для экспорта в программу Calc для последующей обработки, но задачу свою утилита nmap выполняет также хорошо.
В) Третьим способом это использование расширенной версии стандартной утилиты ping, а именно утилита fping которая проверяет доступность систем в сети путем отправки ICMP ECHO_REQUEST пакетов, но с указанием нескольких узлов или тектового файла со списком узлов
ekzorchik@srv-host:~$ sudo apt-get install fping –y
Определить список хостов, которые находятся online в сети:
ekzorchik@srv-host:~$ fping -g 192.168.0.1/24 2>&1 | grep alive
192.168.0.1 is alive
192.168.0.2 is alive
192.168.0.3 is alive
192.168.0.5 is alive
192.168.0.6 is alive
Определить все живые хосты в сети и произвести их опрос на предмет, какой сетевой адаптер установлен на этой системе:
ekzorchik@srv-host:~$ fping -r0 -g 192.168.0.1/24 2>&1 | grep alive | arp –a
ekzorchik@srv-host:~$ fping -r0 -g 192.168.0.1/24 2>&1 | grep alive | arp -a | grep -v "incomplete"
npi04e51e (192.168.0.199) at bc:5f:f4:af:c6:c5 [ether] on eth0
? (192.168.0.130) at 00:09:45:58:04:be [ether] on eth0
constr-i7 (192.168.0.65) at 14:14:4b:1e:25:f9 [ether] on eth0
? (192.168.0.158) at 00:09:45:58:03:9e [ether] on eth0
ws13 (192.168.0.93) at 8c:89:a5:29:38:67 [ether] on eth0
meb-015 (192.168.0.154) at e0:cb:4e:82:95:0e [ether] on eth0
? (192.168.0.24) at d8:eb:97:d2:ae:c2 [ether] on eth0
? (192.168.0.89) at 00:09:45:59:27:ae [ether] on eth0
? (192.168.0.150) at 00:0b:82:25:75:9f [ether] on eth0
android-2c8fcfe7f74b52e1 (192.168.0.85) at a0:b3:cc:ca:07:71 [ether] on eth0
holml (192.168.0.146) at 00:0c:29:21:16:82 [ether] on eth0
, где значение наиболее нужных в пояснение ключей:
grep –v “incomplete“ –> исключить из вывода строки содержащие слово “incomplete”
Также можно и так:
Определяем широковещательный адрес в сети:
ekzorchik@srv-phone:~$ ifconfig | grep "Bcast"
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
Делаем запрос к широковещательному адресу в сети:
ekzorchik@srv-phone:~$ pinb -b -c1 192.168.0.255
А теперь производим запрос к локальному кэшу для извлечения информации по IP адресам и их MAC адресам:
ekzorchik@srv-phone:~$ arp -a
? (192.168.0.89) at 00:09:45:59:27:ae [ether] on eth0
? (192.168.0.187) at 00:09:45:59:cb:96 [ether] on eth0
? (192.168.0.170) at 00:09:45:58:03:86 [ether] on eth0
? (192.168.0.62) at 34:08:04:16:31:36 [ether] on eth0
? (192.168.0.157) at 00:09:45:58:03:9c [ether] on eth0
client4 (192.168.0.66) at 00:09:45:5a:a3:4c [ether] on eth0
? (192.168.0.57) at 00:09:45:5a:f4:5e [ether] on eth0
tserver.dsplit.local (192.168.0.3) at 00:50:56:9c:25:c3 [ether] on eth0
c377a6442 (192.168.0.40) at 14:14:4b:b1:76:90 [ether] on eth0
pc (192.168.0.134) at 00:09:45:59:f8:16 [ether] on eth0
? (192.168.0.192) at f8:d1:11:88:21:1c [ether] on eth0
ws17 (192.168.0.175) at 00:09:45:58:04:c6 [ether] on eth0
npi05c1a0 (192.168.0.51) at 2c:44:fd:05:c1:a0 [ether] on eth0
? (192.168.0.158) at 00:09:45:58:03:9e [ether] on eth0
rpcws (192.168.0.182) at 00:09:45:5a:a2:64 [ether] on eth0
? (192.168.0.58) at 00:09:45:58:03:96 [ether] on eth0
Вывод: утилита также отрабатывает поставленную задачу, после конечно загруженный вывод в программу LibreOffice Calc позволит привести результаты к упорядоченному представлению.
Итак, из опробованных трех утилит я не могу выделить фаворита, потому используя каждую из них я получаю результаты наиболее подходящие для выполнения тех или иных задач.
На этом считаю, данную заметку завершенной, я добился решения поставленной задачи по первому пункту, второй же предусматривает тонкую настройку оборудования, посредством которого будет ограничиваться доступ, а это уже тема отдельной заметки. В последствии я, конечно же покажу, как я это делал. А пока все, с уважением – автор блога ekzorchik.
Прикольненько! Давно искал что-то подобное) Спасибо автор!
Есть куча ip\mac сканеров, в тч бесплатные, показывают помимо собственно адресов и производителя сетевого оборудования (карта, роутер и тп), соответствующего mac адресу.
Зачем умничаешь, я в повседневности использую только Ubuntu, зачем мне софт под Windows. Моя блог задуман для того, чтобы сделать/настроить все самим, а не за меня что-то сделает.