嗅探IPv6 SYN-ACK数据包存在问题

3
我正在使用以下过滤表达式来嗅探IPv4 / IPv6 SYN / ACK / FIN / RST数据包。对于IPv4,使用tcpdump可以正常工作,但是对于IPv6,我没有看到任何东西出现。
tcp端口80和(tcp [tcpflags]&(tcp-syn | tcp-ack | tcp-fin | tcp-rst)!= 0)
1个回答

5

目前,TCPDump(和Wireshark)不支持IPv6下的嵌入式协议BPF过滤器。为了找到这些数据包,您需要使用BPF偏移量和掩码。

例如:

 ip6 proto tcp and ip6[13+40]&0x17!=0

在这里,我们正在检查TCP是否是IPv6头中的嵌入式协议。从那里,我们进入了TCP头的13个字节,并添加了40个字节,因为我们是从ip6头的开头进行引用。我假设您已经知道0x17将是匹配您所编写的内容(SYN|ACK|FIN|RST)的掩码。

虽然有一个protochain选项可以在协议链中找到TCP,但实际上使用BPF来跟踪包含TCP的“下一个标头”并不实用(它应该是最后一个)。

要将端口添加到上述内容中,您只需添加:

  and ip6[(40+2):2]=80

1
只是重新阅读这些年后的内容...如果不清楚,您不需要使用“40+13”或“40+2”...我建议人们这样做,以便对协议头有一定了解的人清楚地知道您要到达IP6头的末尾(40),然后再前进13个字节(进入TCP头)。您可以将其写为“tcp [53]”,但那更加不透明且看起来像魔法。 - David Hoelzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接