基本命令

1
2
3
命令: diagnose sniffer packet.
# diag sniffer packet <interface> <'filter'> <verbose> <count>

抓包参数示例

interface

1
2
3
4
5
6
7
8
9
<interface> 指定实际的接口名称,可以是真实的物理接口名称,也可以是
VLAN 的逻辑接口名称,当使用“any”关键字时,表示抓全部接口的数据包。
例:
#diag sniffer packet port1 //表示抓物理接口为port1 的所有数据包
#diag sniffer packet any //表示抓所有接口的所有数据包
#diag sniffer packet port1-v10 //当在物理接口建立一个VLAN 子接口,其逻辑
接口名为port1-v10,此时表示抓port1-v10 接口的所有数据包,此处一定注意一个问题,
由于抓包命令中的空格使用来区分参数字段的,但是在逻辑接口创建时,接口名称支持空
格,考虑到今后抓包分析的方便,建议在创建逻辑接口时不要带有空格。

verbose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<verbose> 指控制抓取数据包的内容
1: print header of packets, //只抓取IP的原地址、源端口、目的地址、目的端口和数据包
的Sequence numbers 为系统缺省设置
2: print header and data from ip of packets, //抓取IP数据包的详细信息,包括IP数据的
payload。
3: print header and data from ethernet of packets) ,//抓取IP数据包的详细信息,包
括IP数据的payload,导出到文本文件可以使有专用的转换工具,转换为Ethereal支持文件
格式
例:
【例1】 抓所有接口(interface=any)的任何数据包(filter=none),级别1
(verbose=1)
FG-UTM # dia sni pa any none 1
interfaces=[any]
filters=[none]
nr=2048,fr=1584,b_nr=1024,pg=4096
3.710103 127.0.0.1.1029 -> 127.0.0.1.53: udp 40

【例2】 抓所有接口(interface=any)的任何数据包(filter=none),级别2
(verbose=2),会显示数据包的payload信息。
# diag sniffer packet internal none 2 1
192.168.0.1.22 -> 192.168.0.30.1144: psh 2867817048 ack 1951061933
0x0000 4510 005c 8eb1 4000 4006 2a6b c0a8 0001 E..\..@.@.*k....
0x0010 c0a8 001e 0016 0478 aaef 6a58 744a d7ad .......x..jXtJ..
0x0020 5018 0b5c 8ab9 0000 9819 880b f465 62a8 P..\.........eb.
0x0030 3eaf 3804 3fee 2555 8deb 24da dd0d c684 >.8.?.%U..$.....
0x0040 08a9 7907 202d 5898 a85c facb 8c0a f9e5 ..y..-X..\......
0x0050 bd9c b649 5318 7fc5 c415 5a59 ...IS.....ZY

【例3】 抓所有接口(interface=any)的任何数据包(filter=none),级别3
(verbose=3),会显示数据包的payload信息。
FG-UTM # dia sni pa any none 3
interfaces=[any]
filters=[none]
nr=2048,fr=1584,b_nr=1024,pg=4096
3.770099 127.0.0.1.1029 -> 127.0.0.1.53: udp 40
0x0000 0004 0304 0000 0000 9200 0000 2a00 0800

count

1
2
3
4
5
6
7
8
9
<count> 指使有抓包命令抓取的数据包的数量
例:
# diag sniffer packet internal none 1 3
192.168.0.30.1156 -> 192.168.0.1.80: syn 2164883624
192.168.0.1.80 -> 192.168.0.30.1156: syn 3792179542 ack 2164883625
192.168.0.30.1156 -> 192.168.0.1.80: ack 3792179543
说明:抓取internal 接口,不使有任何过滤器(及none)级别为1,抓取3
个数据包。此处,注意“none”必须要,代表过滤器的类型;注意“1”必须要,
否则系统会自动识别为<verbose>参数。

filter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<filter> 抓包文件过滤器
语法: '[[src|dst] host<host_name_or_IP1>] [[src|dst]
host<host_name_or_IP2>] [[arp|ip|gre|esp|udp|tcp] [port_num]]
[[arp|ip|gre|esp|udp|tcp] [port_num]]'
此处一定注意任何过滤语法必须使用单引号包含,否则会有问题。
第二种简单语法,适用于主机的会话抓包,无源和目的地址之分
'udp and port 1812 and host client1 and \( client2 or client3 \)'
【例1】使用源地址和目的地址过滤抓包
# diag sniffer packet internal 'src host 192.168.0.130 and dst
host 192.168.0.1' 1
192.168.0.130.3426 -> 192.168.0.1.80: syn 1325244087
192.168.0.1.80 -> 192.168.0.130.3426: syn 3483111189 ack 1325244088
192.168.0.130.3426 -> 192.168.0.1.80: ack 3483111190
192.168.0.130.3426 -> 192.168.0.1.80: psh 1325244088 ack 3483111190
192.168.0.1.80 -> 192.168.0.130.3426: ack 1325244686
192.168.0.130.1035 -> 192.168.0.1.53: udp 26
192.168.0.130.1035 -> 192.168.0.1.53: udp 42
192.168.0.130.1035 -> 192.168.0.1.53: udp 42
192.168.0.130 -> 192.168.0.1: icmp: echo request
192.168.0.130.3426 -> 192.168.0.1.80: psh 1325244686 ack 3483111190
192.168.0.1.80 -> 192.168.0.130.3426: ack 1325244735
192.168.0.130 -> 192.168.0.1: icmp: echo request


【例2】使用源地址和目的地址、以及TCP 关键词过滤抓两个地址间的TCP 流

# diag sniffer packet internal 'src host 192.168.0.130 and dst host
192.168.0.1 and tcp' 1
192.168.0.130.3569 -> 192.168.0.1.23: syn 1802541497
192.168.0.1.23 -> 192.168.0.130.3569: syn 4238146022 ack 1802541498
192.168.0.130.3569 -> 192.168.0.1.23: ack 4238146023


【例3】使用地址(含源地址和目的地址)、以及ICMP 关键词过滤抓某个地
址间的ICMP 流量
# diag sniffer packet internal 'host 192.168.0.130 and icmp' 1
192.168.0.130 -> 192.168.0.1: icmp: echo request
192.168.0.1 -> 192.168.0.130: icmp: echo reply


【例4】使用ICMP 关键词抓所有地址间的ICMP 流量
FG-UTM # diagnose sniffer packet port8 'icmp'
0.340847 10.7.10.100 -> 10.7.10.1: icmp: echo request
0.340869 10.7.10.1 -> 10.7.10.100: icmp: echo reply
1.340982 10.7.10.100 -> 10.7.10.1: icmp: echo request
1.340997 10.7.10.1 -> 10.7.10.100: icmp: echo reply


【例5】使用地址(含源地址和目的地址)、以及TCP 的端口关键词过滤抓两
个地址间的TCP 对应端口流量
# diag sniffer packet internal 'host 192.168.0.130 or host 192.168.0.1
and tcp and port 80' 1
192.168.0.130.3625 -> 192.168.0.1.80: syn 2057246590
192.168.0.1.80 -> 192.168.0.130.3625: syn 3291168205 ack 2057246591
192.168.0.130.3625 -> 192.168.0.1.80: ack 3291168206
192.168.0.130.3625 -> 192.168.0.1.80: psh 2057246591 ack 3291168206
192.168.0.1.80 -> 192.168.0.130.3625: ack 2057247265


【例6】使用接口、以及TCP 的端口关键词过滤抓多个地址间的TCP 非对应端
口流量,下例为不抓取23 端口的TCP 流量
FG-UTM # diagnose sniffer packet any 'tcp and port !23'
interfaces=[any]
filters=[tcp and port !23]
nr=8192,fr=1680,b_nr=4096,pg=4096
9.323698 10.7.10.100.1853 -> 10.7.10.1.443: syn 4042810565
9.323786 10.7.10.1.443 -> 10.7.10.100.1853: syn 177080791 ack 4042810566
9.324070 10.7.10.100.1853 -> 10.7.10.1.443: ack 177080792
9.326695 10.7.10.100.1853 -> 10.7.10.1.443: psh 4042810566 ack 177080792
9.326765 10.7.10.1.443 -> 10.7.10.100.1853: ack 4042810644


【例7】使用接口、以及IP 的协议端口proto 关键词过滤抓多个地址间的IP
层对应端口流量,下例为抓取IP 层协议号为 1 的及ICMP 的流量
FG-UTM # diagnose sniffer packet port8 'ip proto 1'
interfaces=[port8]
filters=[ip proto 1]
nr=8192,fr=1664,b_nr=4096,pg=4096
5.701978 10.7.10.100 -> 10.7.10.1: icmp: echo request
5.702056 10.7.10.1 -> 10.7.10.100: icmp: echo reply
6.694490 10.7.10.100 -> 10.7.10.1: icmp: echo request