我正在使用以下过滤器表达式来嗅探IPv4 / IPv6 SYN / ACK / FIN / RST数据包。使用tcpdump for IPv4可以正常工作,但对于IPv6,我看不到任何事情
tcp端口80和(tcp [tcpflags]&(tcp-syn | tcp-ack | tcp-fin | tcp-rst)!= 0)
答案 0 :(得分:1)
目前,TCPDump(和Wireshark)不支持IPv6下的嵌入式协议BPF过滤器。为了找到这些数据包,您必须使用BPF偏移和掩码。
例如:
ip6 proto tcp and ip6[13+40]&0x17!=0
这里我们检查TCP是否是IPv6标头中的嵌入式协议。从那里开始,我们将13个字节输入TCP标头并添加40个字节,因为我们从ip6标头的开头引用它。我假设您已经知道0x17
将是与您所写内容匹配的掩码(SYN | ACK | FIN | RST)。
虽然有一个protochain
选项可以在协议链的任何地方找到TCP,但使用BPF跟踪哪个“Next Header”包含TCP(它应该是最后一个)实际上是不切实际的。
要将端口添加到上面,您只需添加:
and ip6[(40+2):2]=80