Назад | Перейти на главную страницу

Есть ли способ запросить все MAC-адреса в сети?

Я знаю, что этот вопрос был помечен как "не по теме" и "непрофессиональный", но при создании шлюза или IDS это может быть весьма актуальным. Кроме того, Google не находит ничего полезного ...

В каждом обычном коммутаторе есть такая вещь, как MAC-таблица (или CAM-таблица) (согласно этой статье: https://en.wikipedia.org/wiki/CAM_Table)

Если коммутатор точно знает маршрут к MAC-адресу и объявляет их на каждом порту (кажется логичным) ...

Я обычно устанавливаю arpalert в системе для этой цели. Это демон, который использует libcap для отслеживания трафика. Он хранит базу данных MAC-адресов для каждого интерфейса. Он также может отслеживать некоторые необычные типы событий и отправлять уведомления. Он отслеживает последнее использование и сохраняет базу данных при перезагрузках (по сравнению с простой настройкой интерфейса моста).

Честно говоря, все говорят "arp -a", но я не удовлетворен этим ответом, поскольку он показывает только известный MAC-адреса (и соответствующие им IP-адреса).

К списку все адреса на порту, вам необходимо изменить текущую конфигурацию сети. Мы будем использовать пакет bridge-utils, но любая другая реализация моста (например, OpenvSwitch) может это сделать. Следующее описание будет работать в системах на основе Debian:

  1. Сначала вы должны установить пакет bridge-utils.
  2. Установите выбранный порт вниз с помощью ifdown
  3. Создайте мост на порту, для которого вы хотите получить список MAC-адресов.

Предположим, что это порт eth0, а IP-адрес динамический. В / etc / network / interfaces должно появиться следующее

allow-hotplug eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
  bridge-ports eth0
  bridge_fd 0
  bridge_stp off

Чтобы применить эти изменения, вы можете либо использовать ifup на eth0, а затем на br0, либо просто перезапустить.

  1. Теперь вы можете использовать brctl для запроса порта

В нем будет указана полная таблица MAC-адресов:

root@debian:~# brctl showmacs br0

Результат должен выглядеть примерно так:

port no mac addr                is local?       ageing timer
  1     ab:cd:ef:01:02:03       no                 1.72
  1     ab:cd:ef:01:02:04       no                25.52
  1     ab:cd:ef:01:02:05       no                 2.64
  1     ab:cd:ef:01:02:06       no                10.67
  1     ab:cd:ef:01:02:07       yes                0.00