2014-09-28 4 views
1

Я пытаюсь получить исходный 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-адрес.

+1

Рассматривали ли вы с помощью 'tshark'? – Yoel

ответ

1

с помощью tshark вы можете сделать это так:

пример:

tshark -i eth0 -e eth.src -Tfields 
+0

Эй, это очень хорошо! В tshark 1.10.6 я получаю номера строк с перерывами; а не только MAC-адреса –