从tcpdump只获取源MAC地址

时间:2014-09-28 08:22:22

标签: linux networking ip tcpdump data-link-layer

我正在尝试获取每个数据包被丢弃在网络上的源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地址。

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

1 个答案:

答案 0 :(得分:1)

通过使用tshark你可以这样做:

示例:

tshark -i eth0 -e eth.src -Tfields