ARP: определение MAC адресов в локальной сети
ARP (англ. Address Resolution Protocol — протокол определения адреса) — протокол в компьютерных сетях, предназначенный для определения MAC-адреса по IP-адресу другого компьютера. Существуют следующие типы сообщений ARP: запрос ARP (ARP request) и ответ ARP (ARP reply). Система-отправитель при помощи запроса ARP запрашивает физический адрес системы-получателя. Ответ (физический адрес узла-получателя) приходит в виде ответа ARP.
Компьютер А (IP-адрес 192.168.1.1) и компьютер Б (IP-адрес 192.168.1.2) соединены сетью Ethernet. Компьютер А желает переслать пакет данных на компьютер Б, IP-адрес компьютера Б ему известен. Компьютеру А для осуществления передачи через Ethernet требуется узнать MAC-адрес компьютера Б в сети Ethernet. Для этой задачи и используется протокол ARP.
Компьютер А отправляет широковещательный запрос, адресованный всем компьютерам в одном с ним широковещательном домене. Суть запроса: «компьютер с IP-адресом 192.168.1.2, сообщите свой MAC-адрес компьютеру с МАС-адресом . ». Этот запрос доставляется всем устройствам в том же сегменте Ethernet. Компьютер Б отвечает компьютеру А на запрос и сообщает свой MAC-адрес.
Протокол имеет буферную память (ARP-таблицу), в которой хранятся пары адресов (IP-адрес, MAC-адрес) с целью уменьшения количества посылаемых запросов, следовательно, экономии трафика и ресурсов. Записи ARP-таблицы бывают двух вид видов: статические и динамические. Статические добавляются самим пользователем, динамические же — создаются и удаляются автоматически. При этом в ARP-таблице всегда хранится широковещательный физический адрес FF:FF:FF:FF:FF:FF.
Команда arp в Windows
Позволяет просмотреть ARP-таблицу, добавить в нее новую запись или удалить существующую:
Создать запись в ARP-таблице:
Вывести записи ARP-таблицы:
Команда arp в Linux
Позволяет просмотреть ARP-таблицу, добавить в нее новую запись или удалить существующую:
Создать запись в ARP-таблице:
Вывести записи ARP-таблицы:
Альтернативный способ просмотра записей таблицы — команда
Источник
Системный интегратор
ARP определение MAC адресов в локальной сети
ARP (Address Resolution Protocol — протокол определения адреса) — протокол канального уровня, предназначенный для определения MAC-адреса Получателя в TCP/IP сетях.
Для передачи пакета в сети TCP/IP Отправитель должен знать MAC адрес Получателя. MAC адрес Получателя (физический адрес), Отправитель может узнать, выполнив широковещательный ARP запрос, или может прочитать в своем ARP кэше. ARP кэш хранит данные несколько минут после сеанса связи, затем данные о MAC адресе Получателя удаляются из кэша и перед выполнением очередного сеанса связи Отправитель будет вынужден опять отправить ARP запрос в сеть. MAC адреса (физические адреса) имеют смысл только в локальной сети, а при обращении в другую сеть используется MAC адрес роутера.
Просмотр MAC адресов в ARP кэше Linux:
Просмотр MAC адресов в ARP кэше Windows:
Замечание: Для заполнения ARP кэша, с каждым из перечисленных узлов в сети была установлена связь с помощью команды ping.
Возможен еще один способ просмотра кэша ARP — это непосредственно прочитать файл кэша ARP /proc/net/arp.
Альтернативой команде arp является команда ip neigh.
Протокол ARP является абсолютно незащищённым. На использовании недостатков протокола ARP основан ARP-spoofing (ARP-poisoning) — техника сетевой атаки, позволяющая перехватывать трафик между узлами. Подробнее о ARP-spoofing читайте у Игоря Чубина. Существует несколько программ предназначенных для борьбы с ARP-spoofing и управления ARP таблицами. Демон arpwatch создает базу соответствия между IP и MAC-адресами, и при обнаружении аномалий, посылает сообщение в системный журнал и по электронной почте администратору системы.
Отключение ARP на интерфейсе:
Включение ARP на интерфейсе
Внесение постоянной записи в ARP кэш
Удаление записи из ARP кэша
Внесение постоянной записи в ARP кэш в режиме прокси ARP
В результате выполнения этой команды Ваш компьютер будет отвечать на ARP запросы предназначенные хосту dm800se.local.
Удаление записи из ARP кэша в режиме прокси
Источник
Получить все MAC адреса устройств в локальной сети
Итак, перед Вами поставлена задача, провести соответствие устройств с их 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 — 0 xb
адрес в Интернете Физический адрес Тип
192.168.0.1 00-15-5 d -0 a -06-00 динамический -> вот это и есть MAC адрес устройства, где первые 6 байт: 00-15-5 d это идентификатор производителя, вычисляется он по полной базе (Задача: прикрутить к скрипту опознавание кто это), а следующие 6 байт – это уникальный идентификатор сетевого адаптера установленного в системе.
Как я бы решал поставленную задачу:
Т.к. я преимущественно отожествляю себя, как Ubuntu специалист, то и средство на котором я буду разбирать пути решения – это система Ubuntu 12.04.5 серверная редакция:
Получить результат можно следующими способами:
А) Утилита arp — scan – данная утилита может просканировать все сеть и получить заветные значения: IP & MAC
$ sudo apt-get install arp-scan –y
Запускаю утилиту на сканирование текущей сети, в которой сетевой адаптер получил от DHCP сервера IP адрес:
$ 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 для предоставления ей таких прав на запуск:
$ 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 адресов:
$ 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
Просканировать локальную сеть, ограничив результаты маской подсети:
$ sudo arp-scan —interface=eth0 192.168.0.0/24
$ sudo arp-scan —interface=eth0 192.168.0.0:255.255.255.0
Просканировать локальную сеть, огранив результаты, указанным диапозоном IP адресов:
$ 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 адрес:
$ 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
$ 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 адресом как и у зарегистрированного клиента:
$ sudo arp-scan —interface=eth0 —arpspa=dest 192.168.0.10
За дополнительными параметрами следует обращаться к справочной информации: man arp — scan
Б) Вторым способом получения, точно такого же результата, как выше из утилиты arp — scan является сетевой сканер безопасности: — nmap
$ sudo apt-get install nmap –y
На заметку: обозначение опций используемых для получения результата: IP = MAC
— sP -> Пинг сканирование — просто определить, работает ли хост
— PR -> Задействовать проверку ARP Ping ,т.е. по хосту определить производителя сетевой карточки.
$ 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
$ sudo nmap -sP 192.168.0.1/24 | grep ‘MAC’ | awk ‘
Всё, конечно же, хорошо, но вот получаемый вывод без дополнительного форматирования не очень удобен для экспорта в программу Calc для последующей обработки, но задачу свою утилита nmap выполняет также хорошо.
В) Третьим способом это использование расширенной версии стандартной утилиты ping , а именно утилита fping которая проверяет доступность систем в сети путем отправки ICMP ECHO _ REQUEST пакетов, но с указанием нескольких узлов или тектового файла со списком узлов
$ sudo apt-get install fping –y
Определить список хостов, которые находятся online в сети:
$ 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
Определить все живые хосты в сети и произвести их опрос на предмет, какой сетевой адаптер установлен на этой системе:
$ fping -r0 -g 192.168.0.1/24 2>&1 | grep alive | arp –a
$ 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 ”
Также можно и так:
Определяем широковещательный адрес в сети:
$ ifconfig | grep «Bcast»
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
Делаем запрос к широковещательному адресу в сети:
$ pinb -b -c1 192.168.0.255
А теперь производим запрос к локальному кэшу для извлечения информации по IP адресам и их MAC адресам:
? (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.
Источник