我正在尝试获取每个数据包被丢弃在网络上的源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地址拼凑在一起。
答案 0 :(得分:1)
通过使用tshark你可以这样做:
示例:
tshark -i eth0 -e eth.src -Tfields