如何使用 tcpdump 过滤 MAC 地址?

Posted

技术标签:

【中文标题】如何使用 tcpdump 过滤 MAC 地址?【英文标题】:How to filter MAC addresses using tcpdump? 【发布时间】:2012-10-16 17:01:54 【问题描述】:

我在 DD-WRT 路由器上运行 tcpdump 以便从手机捕获上行链路数据。我只想听一些mac地址。为此,我尝试使用类似于 Wireshark 的语法运行该命令:

tcpdump -i prism0 ether src[0:3] 5c:95:ae -s0 -w | nc 192.168.1.147 31337

这样我就可以收听所有具有初始mac地址5c:95:ae的设备。

问题是语法错误,我想知道你们中是否有人知道正确的语法来获得我想要的东西。

【问题讨论】:

【参考方案1】:

man pcap-filter 我找到了这个解决方案:

tcpdump "ether[6:2] == 0x5c95 and ether[8:1] == 0xae"

【讨论】:

嗨!非常感谢您的回答。我也发现了这种方式。问题是我需要在 ether 之后指定标志 src 但如果我添加它,我仍然会收到语法错误。 你为什么这么需要这个标志? 为什么要在ether之后指定srcether src XX:XX:XX:XX:XX:XX 中的 ether 表示“这是一个以太网地址”,因此要仅查看源地址,您需要指定“src”,但 ether[6:2] 中的 ether 表示“这是以太网的一部分header”,以太网报头的字节 6 和 7 是源地址的前两个字节,字节 8 是源地址的第三个字节,所以 6:28:1 指定您正在测试源地址地址。石墨的过滤器正是您需要和想要的。 好的!那我试试!非常感谢您的帮助!有什么问题我再写到这里! 嗨!我不知道为什么,但这没有用。基本上,我使用整个 mac 地址(tcpdump -i prism0 ether src 5c:95:ae:x8:6c:3a -s0 -w | nc 192.168.1.147 31337)运行命令,然后 tcpdump 捕获了从我的手机发送的数据包。虽然,如果我使用石墨的过滤器(tcpdump -i prism0 "ether[6:2] == 0x5c95 and ether[8:1] == 0xae" -s0 -w | nc 192.168.1.147 31337)它不会捕获任何数据包。我不应该得到更多带有石墨过滤器的数据包吗?再次感谢您的帮助!

以上是关于如何使用 tcpdump 过滤 MAC 地址?的主要内容,如果未能解决你的问题,请参考以下文章

tcpdump规则过滤抓包及结果筛选查看

如何根据数据包长度过滤 tcpdump 输出

tcpdump 使用实例

tcpdump 正则过滤

tcpdump 协议过滤哪些协议

tcpdump