一、图形界面抓包

1、通过web界面抓包

进入 系统管理--网络--数据包捕获

如上图 数据包捕获界面,点击新建即可创建一个抓包过滤器,并进行抓包。

按上图填入需要抓取的过滤条件,ip、端口等,点击确认,添加好的数据捕获如下图。

选择添加好的数据捕获,点击运行开关抓包;抓取包后,可以点击下载将抓取的数据包保存的本地磁盘,可以用wireshark直接查看。

该方式的优点是方便,抓取的内容可以直接查看,缺点是过滤选项不够丰富。

二、抓包命令详解

命令格式:diagnose sniffer packet <interface> <'filter'> <verbose> <count>

2.1 interface

<interface> 指定实际的接口名称,可以是真实的物理接口名称,也可以是VLAN 的逻辑接口名称,当使用any关键字时,表示抓全部接口的数据包。 例:

#diagnose sniffer packet port1 //表示抓物理接口为port1 的所有数据包

#diagnose sniffer packet any //表示抓所有接口的所有数据包

#diagnose sniffer packet port1-v10 //当在物理接口建立一个VLAN 子接口,其逻辑 接口名为port1-v10,此时表示抓port1-v10 接口的所有数据包,此处一定注意一个问题, 由于抓包命令中的空格使用来区分参数字段的,但是在逻辑接口创建时,接口名称支持空格,考虑到今后抓包分析的方便,建议在创建逻辑接口时不要带有空格。

2.2 verbose显示内容

<verbose> 指控制抓取数据包的内容。常用选项4和6。

1: print header of packets, //只抓取IP的原地址、源端口、目的地址、目的端口和数据包的Sequence numbers, 为系统缺省设置

2: print header and data from ip of packets, //抓取包括IP、TCP或UDP及其内容层的payload。

3: print header and data from ethernet of packets) ,//抓取包括Ether、IP、TCP或UDP及其内容层的payload。 可导出到文本文件使用专用的转换工具,转换为Ethereal支持文件

4:print header of packets with interface name //与第一项类似,但包括显示收发包的接口信息

5: print header and data from ip of packets with interface name  //与第二项类似,但包括显示收发包的接口信息

6: print header and data from ethernet of packets (if available) with intf name  //与第三项类似,但包括显示收发包的接口信息

2.3 count

<count> 抓取的数据包的数量。

2.4 filter  包过滤参数

过滤器可以用一个表达式来表示,也可以是多个表达式进行组合;

当表达式为连续字符串,中间没有空格字符时,不需要加单引号或者双引号。

如diagnose sniffer packet wan1 icmp 1 10;

当过滤器表达式中间存在空格,或者是由多个过滤条表达式组合的时候,则需要将整个表达式放入单引号或者双引号之内。

如:

diagnose sniffer packet any 'host 192.168.1.11'  4  2

diagnose sniffer packet  wan1 'icmp and host 8.8.8.8' 1 10; 

 

2.4.1 none

None或者不写任何参数,则不做任何过滤。

Ruijie # diagnose sniffer packet wan1 none 1 3

interfaces=[wan1]

filters=[none]

0.726021 arp who-has 192.168.118.64 tell 192.168.118.1

0.726054 arp who-has 192.168.118.207 tell 192.168.118.1

0.907046 192.168.118.55.3975 -> 255.255.255.255.2654: udp 312

 

2.4.2 Tcp, udp, icmp,arp参数

Ruijie # diagnose sniffer packet wan1 tcp 1 3

interfaces=[wan1]

filters=[tcp]

5.854756 192.168.118.28.41972 -> 74.125.31.138.443: 1918013413 ack 2189770725

10.680845 192.168.118.28.37644 -> 106.120.151.51.80: syn 1554494232

10.681300 106.120.151.51.80 -> 192.168.118.28.37644: syn 199984742 ack 1554494

3

 

Ruijie # diagnose sniffer packet wan1 udp 1 3

interfaces=[wan1]

filters=[udp]

0.851497 192.168.118.39.58839 -> 234.34.23.234.33674: udp 20

0.880828 192.168.118.28.38299 -> 8.8.8.8.53: udp 37

0.951063 192.168.118.55.4045 -> 255.255.255.255.2654: udp 312

 

Ruijie # diagnose sniffer packet wan1 icmp 1 3

interfaces=[wan1]

filters=[icmp]

5.831862 192.168.118.28 -> 119.254.12.21: icmp: echo request

5.833274 119.254.12.21 -> 192.168.118.28: icmp: echo reply

6.836748 192.168.118.28 -> 119.254.12.21: icmp: echo request

 

Ruijie # diagnose sniffer packet wan1 arp 1 3

interfaces=[wan1]

filters=[arp]

0.835697 arp who-has 192.168.118.211 tell 192.168.118.1

0.955753 arp who-has 192.168.118.64 tell 192.168.118.1

0.955780 arp who-has 192.168.118.207 tell 192.168.118.1

 

2.4.3 Src,dst参数

 

指定源IP  或者目的IP。

Ruijie # diag sniffer pa any 'src 192.168.118.45 and dst 4.2.2.1' 4 

interfaces=[any]

filters=[src 192.168.118.45 and dst 4.2.2.1]

3.053283 SE in 192.168.118.45 -> 4.2.2.1: icmp: echo request

4.055621 SE in 192.168.118.45 -> 4.2.2.1: icmp: echo request

5.057185 SE in 192.168.118.45 -> 4.2.2.1: icmp: echo request

6.059751 SE in 192.168.118.45 -> 4.2.2.1: icmp: echo request

 

2.4.4 host参数

指定主机,抓取包括该host IP地址的数据包,可以是源地址,也可以是目标地址。

Ruijie # diagnose sniffer  packet  wan1 'host 8.8.8.8' 1 10

interfaces=[wan1]

filters=[host 8.8.8.8]

5.793921 192.168.118.28 -> 8.8.8.8: icmp: echo request     //目标地址

5.833691 8.8.8.8 -> 192.168.118.28: icmp: echo reply      //源地址

2.4.5 port参数

根据数据包源端口或者目标端口进行抓包。

Ruijie # diagnose sniffer packet wan1 'port 80' 1 3

interfaces=[wan1]

filters=[port 80]

5.391804 192.168.118.28.8977 -> 83.145.92.172.80: syn 3438827760

5.392339 83.145.92.172.80 -> 192.168.118.28.8977: syn 4238988927 ack 3438827761

5.392842 192.168.118.28.8977 -> 83.145.92.172.80: ack 4238988928

 

2.4.6 proto参数

 

可以通过协议号进行抓包,1:ICMP, 6:TCP , 17:UDP, 89: OSPF等。

Ruijie # diagnose sniffer  packet  wan1 'proto 1' 1 10

interfaces=[wan1]

filters=[proto 1]

5.193085 192.168.118.28 -> 8.8.8.8: icmp: echo request

5.233840 8.8.8.8 -> 192.168.118.28: icmp: echo reply

6.193968 192.168.118.28 -> 8.8.8.8: icmp: echo request

6.234911 8.8.8.8 -> 192.168.118.28: icmp: echo reply

 

Ruijie # diagnose sniffer  packet  wan1 'proto 17' 1 10

interfaces=[wan1]

filters=[proto 17]

1.291398 192.168.118.48.1786 -> 255.255.255.255.2654: udp 312

1.307764 192.168.118.48.1787 -> 255.255.255.255.2654: udp 322

2.813556 192.168.118.55.3735 -> 255.255.255.255.2654: udp 312

2.815426 192.168.118.55.3736 -> 255.255.255.255.2654: udp 324

 

2.4.7 and 和or 参数

 

表达式连接符号and为的关系,or为的关系。通过这个2参数可以将多个过滤表达式组合成一个更精确的抓包过滤器。

Ruijie # diagnose sniffer  packet  wan1 'host 8.8.8.8 and udp and port 53  1 10

interfaces=[wan1]

filters=[host 8.8.8.8 and udp and port 53]

9.161057 192.168.118.28.25758 -> 8.8.8.8.53: udp 30

9.200929 8.8.8.8.53 -> 192.168.118.28.25758: udp 273

 

Ruijie # diagnose sniffer packet wan1 'host 8.8.8.8 or udp' 1 6

interfaces=[wan1]

filters=[host 8.8.8.8 or udp]

0.406682 192.168.118.28 -> 8.8.8.8: icmp: echo request

0.446384 8.8.8.8 -> 192.168.118.28: icmp: echo reply

1.408758 192.168.118.28 -> 8.8.8.8: icmp: echo request

1.447828 192.168.118.48.2345 -> 255.255.255.255.2654: udp 312

1.448329 8.8.8.8 -> 192.168.118.28: icmp: echo reply

1.467194 192.168.118.48.2346 -> 255.255.255.255.2654: udp 324

 

2.4.8 TCP包头字段过滤

Ruijie # diag sniff packet any 'tcp[13]==2' 4 10  

interfaces=[any]

filters=[tcp[13]==2]

0.566163 SE in 192.168.118.44.51011 -> 118.67.120.53.80: syn 1443461665

0.566253 port13 out 59.108.29.180.65483 -> 118.67.120.53.80: syn 1443461665

0.566476 SE in 192.168.118.44.51012 -> 118.67.120.37.80: syn 2381613524

0.566569 port13 out 59.108.29.180.65484 -> 118.67.120.37.80: syn 2381613524

 

TCP包头的13字节内容==2, 即00000010。包头的第一个字节序号为0,依次次往后数,13就是Flag位置所在的字节,该字节的倒数第二位为SYN位,所以该命令的就是抓取所有syn包为1,其他flag位为0的数据包。

同理:diagnose sniffer packet any "tcp[13] & 4 != 0" 3 10 抓FIN为1的包。

因为FIN位为1的数据包,ACK也置位1,通过tcp[13] & 4 != 0,即通过做与运算不等于0.也就是说只要FIN为1,其他位任意。

diagnose sniffer packet any "tcp[13] & 2 != 0" 4 10 SYN位为1的,其他位置可以为任意值的数据包,(SYN,SYN ACK包)。

2.4.9 IP包头字段过滤

 

16进制0x59为十进制的89,IP头第9字节为协议字节,协议号89则为OSPF.

Ruijie # diagnose sniffer packet any "ip[9]==0x59" 1 10 

interfaces=[any]

filters=[ip[9]==0x59]

0.601194 192.168.118.28 -> 224.0.0.5:  ip-proto-89 44

11.601206 192.168.118.28 -> 224.0.0.5:  ip-proto-89 44

 

2 packets received by filter

0 packets dropped by kernel

 

Ruijie # diagnose sniffer packet any "ip[9]==89" 1 10

interfaces=[any]

filters=[ip[9]==89]

2.601194 192.168.118.28 -> 224.0.0.5:  ip-proto-89 44

12.601208 192.168.118.28 -> 224.0.0.5:  ip-proto-89 44

 

2.4.10 Ethernet包头字段过滤

以太网包头的第6字节开始的4个连续字节为源MAC地址字段位置。下面的命令为抓取所有源MAC地址为0x00090fdf的数据包。

Ruijie # diagnose sniffer packet SE "(ether[6:4]=0x00090fdf) and (ether[10:2]=0xe8e3)" 3 3

interfaces=[SE]

filters=[(ether[6:4]=0x00090fdf) and (ether[10:2]=0xe8e3)]

0.632650 192.168.118.45.62528 -> 192.168.118.1.22: ack 2277714159

0x0000   0009 0fcd 9f48 0009 0fdf e8e3 0800 4500        .....H........E.

0x0010   0028 2383 4000 7f06 6acd c0a8 762d c0a8        .(#.@...j...v-..

0x0020   7601 f440 0016 16b9 4e62 87c3 28ef 5010        v..@....Nb..(.P.

0x0030   3fa0 f88f 0000                                 ?.....

 

0.633263 192.168.118.45.62528 -> 192.168.118.1.22: ack 2277714383

0x0000   0009 0fcd 9f48 0009 0fdf e8e3 0800 4500        .....H........E.

0x0010   0028 2384 4000 7f06 6acc c0a8 762d c0a8        .(#.@...j...v-..

0x0020   7601 f440 0016 16b9 4e62 87c3 29cf 5010        v..@....Nb..).P.

0x0030   3ec0 f88f 0000                                 >.....

 

抓取目标MAC = 00:09:0f:cd:9f:48数据包

Ruijie # diagnose sniffer packet SE "(ether[0:4]=0x00090fcd) and (ether[4:2]=0x9f48)" 3 3

interfaces=[SE]

filters=[(ether[6:4]=0x00090fdf) and (ether[10:2]=0xe8e3)]

0.632650 192.168.118.45.62528 -> 192.168.118.1.22: ack 2277714159

0x0000   0009 0fcd 9f48 0009 0fdf e8e3 0800 4500        .....H........E.

0x0010   0028 2383 4000 7f06 6acd c0a8 762d c0a8        .(#.@...j...v-..

0x0020   7601 f440 0016 16b9 4e62 87c3 28ef 5010        v..@....Nb..(.P.

0x0030   3fa0 f88f 0000                                 ?.....

2.5 数据格式转换

首先,通过该命令抓取数据包,会直接输出到屏幕上,需要通过SecureCRT 相关工具进行抓包数据的收集。

其次,使用抓包命令的<verbose>级别为6时,导出的文件才能被Wireshark识别。

第三,要获取大量抓包信息时,SecureCRT 工具应通过远程TELNET/SSH连接到防火墙。如果使用主机串口来抓包,由于串口速率低,获取大量数据时速度非常慢。

第四,使用单独提供的脚本程序文件进行转换,主机必须提前安装Perl的解释程序和Wireshark软件,并在提供的转换脚本程序中做必要的路径指向

2.5.1 SecureCRT配置

正常安装SecureCRT 软件,并通过远程方式登陆到防火墙

1、配置SecureCRT:File > Log Session,选择配置文件存储的路径,文件格式为*.txt

2、防火墙上执行抓包命令

Ruijie # diagnose sniffer packet <interface><'filter'>6<count>

其中6 代表抓到的包输出文件支持经过转换为Wireshark格式文件。

2.5.2 脚本程序

在此页下面附件内下载ruijiet2eth.pl文件,并使用编辑器进行编辑。由于文件转换成pacp文件格式需要使用到抓包软件的text2pacp.exe程序,比如Wireshark的text2pacp.exe,所以需要在脚本中指明text2pcap.exe的路径。text2pcap.exe所在路径是Wireshark的安装路径。找到如下行,按实际情况修改红色部分,注意路径需要用两个"\",即\\.

# Path to the windows text2pcap.exe

# You need to double character '\'

  my $text2pcapdirwin   = "c:\\Progra~1\\Ethereal";

  # Use wireshark text2pcap if installed

  $text2pcapdirwin   = "D:\\Program Files\\Wireshark" if -e "D:\\Program Files\\Wireshark\\text2pcap.exe";

2.5.2 转换操作

1、安装perl解释器

转换前需要安装Perl 解释器,下载链接http://www.activestate.com/activeperl/downloads

2、准备好脚本和抓包文件

假设抓包文件为packet.txt。在C盘建立一个工作目录,比如c:\pacp,把脚本ruijiet2eth.pl文件和抓包文件packet.txt拷贝到c:\pacp

3、转换工作

进入cmd命令行,进入perl解释器执行程序目录,然后按如下命令执行转换:

执行命令后,回车,在c:\pacp下自动生成1.pacp文件,1.pcap就是转换为Wireshark识别的格式文件。用Wireshark打开后即可进行详细分析。直接输入perl Ruijiet2eth.pl help获得帮助信息