Предположим, у вас есть встроенная плата с 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!
Установить
bridge-utils
из репозитория.Создайте новый мост 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 секунд. Установите это по своему вкусу, но не слишком низко.
Поднимите мост:
ifup br0
Проверьте, все ли в порядке,
brctl show
и просмотрите таблицу MAC-адресов:brctl showmacs br0
Выгода (?)
решение2
Вы можете либо использовать Wireshark для захвата всего трафика и фильтрации его по протоколу Bootp, либо использовать -e
опцию для вывода информации о канальном уровне и фильтра Bootp с помощью tcpdump:
http://www.tcpdump.org/tcpdump_man.html
sudo tcpdump -i any port bootps -e