Я пытаюсь получить исходный MAC-адрес каждого сбрасываемого в сети пакета, за исключением любых пакетов, связанных с главной машиной. Я ожидаю, что для этого я должен получить данные от tcpdump с сетевым интерфейсом хоста в беспорядочном режиме.Получите только исходный MAC-адрес от tcpdump
Отметьте, что я не заинтересован в получении полного заголовка или даже заголовка уровня ссылки. Опция -e
- это не то, что я хочу. Мне просто нужен MAC-адрес источника для каждого пакета, и ничего больше.
Это то, что я сейчас делаю прямо сейчас:
sudo tcpdump -I -elt -i wlan0 not host 127.0.0.1 2>> /dev/null | sed 's/ .*//'
с 127.0.0.1
заменяется фактическим IP-адрес интерфейса локальной сети.
Это прекрасно работает в некоторых сетях, где исходный MAC-адрес является первой частью информации, которая выводится tcpdump. К сожалению, это не всегда был мой опыт. Кажется, что вывод на tcpdump is protocol-dependent и т. Д. В некоторых сетях он меняется.
Я полагаю, я мог бы переписать мою SED команды так, чтобы она выводит первый элемент, который соответствует регулярному выражению для MAC-адреса:
(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}
, но я не уверен, если первый MAC-адрес в строке всегда будет MAC-адрес источника.
Если у вас нет прямого доступа к исходному MAC-адресу tcpdump, можно ли каким-то образом передать его исходные биты из заголовка уровня ссылки? Оттуда я должен иметь возможность собрать исходный MAC-адрес.
Рассматривали ли вы с помощью 'tshark'? – Yoel