使用 tcpdump 过滤封装的 ipv6 数据包

Filtering encapsulated ipv6 packets with tcpdump

我有 Next header == 0x29(41) 的 IPv6。我想通过主 IPv6 框架内 IPv6/TCP 框架的目标地址和端口过滤数据包。

tcpdump -B 1000000 -pnni 任意 "ip6[6] == 0x29"

00:24:33.461496 IP6 xxxx > yyyy: IP6 zzzz.45388 > hhhh.443: Flags [.], ack 809205, win 2636, options [nop,nop,TS val 1395182923 ecr 142811329], length 0
00:24:33.461505 IP6 xxxx > yyyy: IP6 zzzz.45388 > hhhh.443: Flags [.], ack 809205, win 2636, options [nop,nop,TS val 1395182923 ecr 142811329], length 0

可以用 tcpdump 做到这一点吗?我在 pcap 库文档中找不到任何信息。

Alexander 在笔记中记录的解决方案是您今天能做的最好的解决方案。问题是您今天无法在 tcpdump/BPF 下使用带有 IPv6 的 tcp 宏来引用 TCP 端口。

但是,没有必要将所有偏移量都基于以太网帧 header。您可以使用 IPv6 header 作为起点。请记住,在 IPv6 header 和 TCP header 之间可能存在路由、分段或其他 header,这使得这一切都非常具有挑战性。

坦率地说,使用 Scapy 或 libpcap 绑定来编写一个 Python(或类似的)脚本来打开数据包捕获、过滤 IPv6 并编写 TCP 端口的选择逻辑会更容易在那个更高的水平。