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