Получить MAC-адрес подключенного, немаркированного, ненастроенного, ненастраиваемого устройства Ethernet?

Получить MAC-адрес подключенного, немаркированного, ненастроенного, ненастраиваемого устройства Ethernet?

Предположим, у вас есть встроенная плата с Ethernet, подключенная к порту Ethernet на вашем ноутбуке. Вы ничего не знаете о его сетевой конфигурации (пока). Вы знаете, что он загружается, но он безголовый и имеет только порт Ethernet. У него НЕТ IP-адреса (пока).

Как узнать MAC-адрес устройства?

Я посмотрел на arp, arping, arp-scan, arpwatch. Единственное, что я нашел, это использование tshark и ручное прочесывание потока.

решение1

Запуск простого tsharkили tcpdumpприводит к запутанному выводу, поскольку весь трафик, исходящий от вашей машины, также регистрируется.

Пытаться

tcpdump -i eth0 -lenq 'ether src not <your_mac>'
  • -eтакже захватывает кадр Ethernet
  • -lнемедленно очищает буфер stdout.
  • -nне разрешать имена хостов
  • -qбудьте тише.
  • замените <your_mac>на MAC-адрес вашего локального интерфейса, найденный, например, с помощью ip addr show.
  • очевидно, замените eth0на правильный интерфейс. Если вы работаете в Windows, используйте tshark -Dдля вывода списка всех интерфейсов.
  • (Редактировать)В Linux вы можете использовать tcpdumpвместо установки tshark, которая требует установки всего wiresharkпакета. tcpdumpдолжен быть предварительно установлен в Ubuntu (он находится в метапакете ubuntu-standard).

Альтернатива:Если вы хотите, чтобы в качестве выходных данных использовались только исходные MAC-адреса, сделайте следующее (вдохновлено и бесстыдно адаптировано комментарием OP ниже)

ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'

Лучше всего начать захват без подключения, а затем подключить кабель.

Я не думаю, что есть способ обойти сниффинг трафика. Причина сбоя ARP в том, что устройство не имеет IP-адреса и не отвечает на запросы ARP.

Другим возможным решением было бы подключение устройства к управляемому коммутатору и считывание таблицы MAC-адресов, но я думаю, что это не ваш вариант.

В любом случае, чтобы устройство можно было обнаружить, оно должно посылатьнекоторыйсвоего рода трафик Ethernet. Если вам повезет, он пошлет DHCP/Bootp discover, который вы можете пронюхать.

(Редактировать)Почему хост не хранит таблицу MAC-адресов, как коммутатор? Ну, ему это и не нужно, потому что он не коммутатор. В отличие от коммутатора, решение о том, какой интерфейс выдает кадр Ethernet, принимается заранее в соответствии с таблицей маршрутизации. IP-пакет упаковывается в соответствующий кадр после поиска ARP.

Конечно, вы можете превратить свою машину в полноценный коммутатор L2. Вы можете создать мост между несколькими физическими интерфейсами. Я немного повозился с этим, и, как оказалось, таким образом можно получить хорошую таблицу MAC!

  1. Установить bridge-utilsиз репозитория.

  2. Создайте новый мост Ethernet в/etc/network/interfaces

     auto br0
     iface br0 inet static # dhcp goes as well
      address ...
      network ...
      bridge_ports eth0
      up /sbin/brctl setageing br0 300
      up /sbin/brctl stp br0 0
    

Это определяет "мост" (на самом деле моста нет - только один интерфейс) без связующего дерева stp br0 off. Адреса устаревают через 300 секунд. Установите это по своему вкусу, но не слишком низко.

  1. Поднимите мост:ifup br0

  2. Проверьте, все ли в порядке, brctl showи просмотрите таблицу MAC-адресов:

     brctl showmacs br0
    
  3. Выгода (?)

решение2

Вы можете либо использовать Wireshark для захвата всего трафика и фильтрации его по протоколу Bootp, либо использовать -eопцию для вывода информации о канальном уровне и фильтра Bootp с помощью tcpdump:

http://www.tcpdump.org/tcpdump_man.html

sudo tcpdump -i any port bootps -e

Связанный контент