Получить только исходный 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 зависит от протокола и поэтому в некоторых сетях он меняется.

Я полагаю, я мог бы переписать мою команду sed, чтобы она выводила первый элемент, который соответствует регулярному выражению для MAC-адреса:

(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}

но я не уверен, что первый MAC-адрес в строке всегда будет исходным MAC-адресом.

Если tcpdump не может напрямую выводить MAC-адрес источника, можно ли каким-то образом вывести необработанные биты из заголовка уровня канала? Оттуда я смогу собрать воедино MAC-адрес источника.

1 ответ

Решение

Используя tshark, вы можете сделать это так:

пример:

tshark -i eth0 -e eth.src -Tfields
Другие вопросы по тегам