
Я знаю, что этот вопрос был помечен как "не по теме" и "непрофессиональный", но при создании шлюза или IDS это может быть весьма актуально. Кроме того, Google не находит ничего полезного...
В каждом обычном коммутаторе есть такая вещь, как таблица MAC-адресов (или таблица CAM) (согласно этой статье:https://en.wikipedia.org/wiki/CAM_Table)
Если коммутатор точно знает маршрут к MAC-адресу и объявляет его на каждом порту (кажется логичным)...
- Предположим, что у вас Linux-компьютер. Возможно ли сделать запрос?каждыйMAC-адрес в сети на указанном интерфейсе?
решение1
Я обычно устанавливаюарпалертв системе для этой цели. Это демон, который использует libcap для отслеживания трафика. Он хранит базу данных mac-адресов для каждого интерфейса. Он также может следить за некоторыми необычными типами событий и отправлять уведомления. Он отслеживает последнее использование и будет хранить базу данных при перезагрузках (по сравнению с простой настройкой интерфейса моста).
решение2
Ну, если честно, все говорят "arp -a", но меня этот ответ не устраивает, так как он показывает толькоизвестенMAC-адреса (и соответствующие им IP-адреса).
К спискувсеадреса на порту, вам нужно будет изменить текущую конфигурацию сети. Мы будем использовать пакет bridge-utils, но любая другая реализация моста (например: OpenvSwitch) может это сделать. Следующее описание будет работать в системах на базе Debian:
- Сначала вам следует установить пакет bridge-utils.
- Установите выбранный порт вниз с помощью ifdown
- Создайте мост на порту, на котором вы хотите просмотреть 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, либо просто перезапустить.
- Теперь вы можете использовать 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