【发布时间】:2014-11-22 20:22:59
【问题描述】:
我正在尝试获取网络上转储的每个数据包的源 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 地址。
【问题讨论】:
-
你考虑过使用
tshark吗?
标签: linux networking ip tcpdump data-link-layer