1

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

4

1 回答 1

1

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

例子:

tshark -i eth0 -e eth.src -Tfields
于 2014-09-28T10:13:49.463 回答