2014-09-28 71 views
1

我试图获取每个在网络上转储的数据包的源MAC地址,排除了涉及主机的任何数据包。我期望为了实现这个目标,我应该在混杂模式下使用主机的网络接口从tcpdump获取数据。从tcpdump获取源MAC地址

请注意,我是而不是有兴趣获得完整的标题或甚至链接级别标题。 -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等一些网络,它有所不同。

我想,使其输出相匹配的正则表达式的MAC地址的第一个项目,我可以重写我的sed命令:

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

,但我不能确定,如果在该行的第一个MAC地址将永远是源MAC地址。

如果没有办法让tcpdump直接输出源MAC地址,有什么办法可以让它从链路层头输出原始位?从那里我应该能够拼凑源MAC地址。

+1

你有没有考虑使用'tshark'? – Yoel 2014-09-28 09:15:25

回答

1

通过tshark的,你可以那样做:

例如:

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

嘿,这很不错!在tshark 1.10.6中,我正在间断地获取行号,不仅仅是MAC地址 – 2015-10-14 14:05:13