Sniffer 过滤条件的合理使用
Sniffer 过滤条件的合理使用
过滤条件使用总结
- 在没有 NAT 场景下,源目 IP 及目的端口都不会变化,则过滤条件可以设置为
host <src IP> and host <dst IP> and <dst port>。 - 在源 NAT 场景下,源 IP 会做 NAT 转换,因此目的 IP 和目的端口是不会变化的,则过滤条件可以设置为
host <dst IP> and <dst port>。 - 在目的 NAT 场景下,目的 IP 会做 NAT 转换,因此源 IP 和目的端口是不会变化的,则过滤条件可以设置为
host <src ip> and <dst port>。 - 在目的端口 NAT 场景下,目的 IP 和端口都会做 NAT 转换,因此源 IP 是不会变化,则过滤条件可以设置为
host <src IP>。 - 在源 NAT 和目的 NAT 都存在的场景下,源 IP 和目的 IP 都会发生变化,则只能通过
or参数分别抓取 NAT 前和 NAT 后的报文,过滤条件可以设置为(<源NAT前的源IP> and <目的NAT前的目的IP> and <目的NAT前目的端口>) or (<源NAT后的源IP> and <目的NAT后的目的IP> and <目的NAT后的目的端口>)。
Sniffer 过滤条件使用举例
重要
Ping、ESP、GRE 是没有端口的,直接使用 icmp、esp、gre 协议过滤即可。
普通三层转发,没有 NAT 场景
普通三层转发,没有 NAT 的情况下,抓
host <src IP> and host <dst IP> and <dst port>可以抓到完整的数据流。拓扑:PC1 (172.16.1.100)-----(port9:172.16.1.1) FGT (port10:202.106.1.1)-----PC2 (202.106.1.100)。
抓包结果如下。
FGT # diagnose sniffer packet any "host 172.16.1.100 and host 202.106.1.100 and icmp" 4 interfaces=[any] filters=[host 172.16.1.100 and icmp] 3.583522 port9 in 172.16.1.100 -> 202.106.1.100: icmp: echo request 3.583541 port10 out 172.16.1.100 -> 202.106.1.100: icmp: echo request 3.583808 port10 in 202.106.1.100 -> 172.16.1.100: icmp: echo reply 3.583818 port9 out 202.106.1.100 -> 172.16.1.100: icmp: echo reply
普通三层转发,有源 NAT 场景
普通三层转发,有源 NAT 的情况下,抓
host <dst IP> and <dst port>可以抓到完整的数据流。拓扑:PC1 (172.16.1.100)-----(port9:172.16.1.1) FGT (port10:202.106.1.1)-----PC2 (202.106.1.100)。
抓包结果如下。
FGT # diagnose sniffer packet any “host 172.16.1.100 and icmp” 4 //抓源IP and icmp协议,是抓不全的// interfaces=[any] filters=[host 172.16.1.100 and icmp] 2.821403 port9 in 172.16.1.100 -> 202.106.1.100: icmp: echo request 2.821707 port9 out 202.106.1.100 -> 172.16.1.100: icmp: echo reply //只能在port9看到数据包in/out,port10的看不到// FGT # diagnose sniffer packet any "host 202.106.1.100 and icmp" 4 //需要抓目的IP and icmp协议// interfaces=[any]filters=[host 202.106.1.100 and icmp] 4.624647 port9 in 172.16.1.100 -> 202.106.1.100: icmp: echo request 4.625032 port10 out 202.106.1.1 -> 202.106.1.100: icmp: echo request 4.625235 port10 in 202.106.1.100 -> 202.106.1.1: icmp: echo reply 4.625243 port9 out 202.106.1.100 -> 172.16.1.100: icmp: echo reply
普通三层转发,有目的 NAT(一对一 NAT)场景
普通三层转发,有目的 NAT 的情况下,抓
host <src ip> and <dst port>可以抓到完整的数据流。拓扑:PC1 (172.16.1.100)-----(port9:172.16.1.1) FGT (port10:202.106.1.1)-----PC2 (202.106.1.100)。
访问 VIP(DNAT),流量从外网侧发起,抓包结果如下。
FGT # diagnose sniffer packet any “host 202.106.1.10” 4 //抓目的IP and icmp协议,是抓不全的// interfaces=[any] filters=[host 202.106.1.10] 3.809005 port10 in 202.106.1.100 -> 202.106.1.10: icmp: echo request 3.809294 port10 out 202.106.1.10 -> 202.106.1.100: icmp: echo reply //只能在port10看到数据包in/out,port9的看不到// FGT # diagnose sniffer packet any “host 202.106.1.100” 4 //需要抓源IP and icmp协议// interfaces=[any] filters=[host 202.106.1.100] 3.523666 port10 in 202.106.1.100 -> 202.106.1.10: icmp: echo request 3.523687 port9 out 202.106.1.100 -> 172.16.1.100: icmp: echo request 3.523937 port9 in 172.16.1.100 -> 202.106.1.100: icmp: echo reply 3.523943 port10 out 202.106.1.10 -> 202.106.1.100: icmp: echo reply
普通三层转发,有双向 NAT (源 NAT + 目的 NAT)场景
普通三层转发,有双 NAT 的情况下,抓
(<源NAT前的源IP> and <目的NAT前的目的IP> and <目的NAT前目的端口>) or (<源NAT后的源IP> and <目的NAT后的目的IP> and <目的NAT后的目的端口>)可以抓到完整的数据流。拓扑:PC1 (172.16.1.100)-----(port9:172.16.1.1) FGT (port10:202.106.1.1)-----PC2 (202.106.1.100)。
访问 VIP,流量从外网侧发起 ,同时在内网接口侧开启了 SNAT,抓包结果如下。
FGT # diagnose sniffer packet any "host 202.106.1.100 and icmp" 4 //只抓源IP是抓不全的// interfaces=[any] filters=[host 202.106.1.100 and icmp] 0.416187 port10 in 202.106.1.100 -> 202.106.1.10: icmp: echo request 0.416576 port10 out 202.106.1.10 -> 202.106.1.100: icmp: echo reply FGT # diagnose sniffer packet any "host 172.16.1.100 and icmp" 4 //只目的IP也是抓不全的// interfaces=[any] filters=[host 172.16.1.100 and icmp] 1.417838 port9 out 172.16.1.1 -> 172.16.1.100: icmp: echo request 1.418326 port9 in 172.16.1.100 -> 172.16.1.1: icmp: echo reply FGT # diagnose sniffer packet any "host 202.106.1.100 or host 172.16.1.1 and icmp" 4 //使用or组合,变化前源目的ip和变化后源目的IP可抓全// interfaces=[any] filters=[host 202.106.1.100 or host 172.16.1.1 or icmp] 0.419407 port10 in 202.106.1.100 -> 202.106.1.10: icmp: echo request 0.419436 port9 out 172.16.1.1 -> 172.16.1.100: icmp: echo request 0.419781 port9 in 172.16.1.100 -> 172.16.1.1: icmp: echo reply 0.419794 port10 out 202.106.1.10 -> 202.106.1.100: icmp: echo reply
抓取 PPPoE 报文
PPPoE Discovery 阶段(协商)的的 ethernet 类型为
0x8863,PPPoE Session 阶段(数据)的 ethernet 类型为0x8864。diagnose sniffer packet <PPPoe Interface> 'ether proto 0x8863 or ether proto 0x8864' 6 0 l也可以使用
pppoed和pppoes参数来作为过滤条件。diagnose sniffer packet any 'pppoed or pppoes' 6 0 l