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