Получить только исходный 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