我使用以下过滤器表达式来嗅探 IPv4/IPv6 SYN/ACK/FIN/RST 数据包。对于 IPv4 使用 tcpdump 效果很好,但是对于 IPv6 我没有看到任何东西
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
Run Code Online (Sandbox Code Playgroud)
在这里,我们检查 TCP 是否是 IPv6 标头中的嵌入协议。从这里开始,我们将 13 个字节放入 TCP 标头中,并添加 40 个字节,因为我们从 ip6 标头的开头引用它。我假设您已经知道这0x17将是与您所写内容相匹配的掩码(SYN | ACK | FIN | RST)。
虽然有一个protochain选项可以在协议链中的任何位置找到 TCP,但使用 BPF 来跟踪哪个“下一个标头”包含 TCP(它应该是最后一个标头)确实不切实际。
要将端口添加到上面,您只需添加:
and ip6[(40+2):2]=80
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2125 次 |
| 最近记录: |