17-Packet Capture配置
本章节下载: 17-Packet Capture配置 (323.69 KB)
目 录
Packet Capture是一种报文捕获及分析工具,该工具能够捕获设备接口的报文并对报文进行解析处理,便于用户分析接口接收到的报文;还可以将报文数据存储为pcap格式的文件,方便用户对报文进行后续解析。
该特性不支持多用户同时配置,目前支持以下三种报文捕获的方式:
· 本地报文捕获
本地报文捕获功能可以将捕获的报文自动上传到FTP服务器、存储在设备存储介质中或者在登录设备的终端上显示报文信息,用户可以任意选择其中一种方式来进行报文捕获。
· 远程报文捕获
远程报文捕获是指设备开启远程报文捕获服务功能后,用户必须通过PC上的第三方报文捕获软件Wireshark客户端与捕获报文的设备建立连接,远端报文捕获设备将报文数据发送给Wireshark客户端,供Wireshark客户端显示。
· 特性包报文捕获
如需支持特性包报文捕获功能,请先使用boot-loader、install或issu命令安装Packet Capture特性软件包,有关安装步骤的详细介绍,请参见“基础配置指导”中的“软件升级”或“ISSU”。
特性包报文捕获可以将捕获的报文保存在本地或直接在终端显示报文信息,还可以解析pcap或pcapng文件。
Packet Capture可以使用捕获过滤表达式指定捕获过滤规则,对进入指定物理接口的报文进行过滤,满足捕获过滤规则的报文则被捕获。捕获过滤规则由关键字、逻辑操作符、运算操作符和比较操作符等组合而成。有关Packet Capture更多规则的详细介绍,请参见网址:http://wiki.wireshark.org/CaptureFilters。
常量关键字是固定的字符串,可以分为以下几类:协议类型、传输方向和传输方向的类型等。
支持的协议有:arp、icmp、ip、ipv6、tcp、udp等 |
||
· src:表示源方向 · dst:表示目的方向 · src or dst:表示源或目的方向 |
||
· host:表示主机 · net:表示网段 · port:表示端口号 · portrange:表示端口号范围 |
||
· broadcast:表示捕获广播报文 · multicast:表示捕获组播报文、广播报文 · less:表示小于等于 · greater:表示大于等于 · len:表示报文长度 · vlan:表示捕获VLAN报文 |
变量关键字形式固定,但内容可变。捕获过滤规则的变量关键字不可以单独使用,其前需要使用常量关键字对其进行修饰。
需要注意的是,所有的协议类型常量关键字、broadcast和multicast关键字不能对变量关键字进行修饰。其它的常量关键字不可单独使用,其后需要使用变量关键字。
将整型用二进制、八进制、十进制或十六进制形式表示。例如:port 23,表示端口号为23 |
|
将整型范围用二进制、八进制、十进制、十六进制形式和“-”表示。例如:portrange 100-200,表示端口号范围为100到200 |
|
IPv4地址 |
使用点分十进制格式表示。例如:src 1.1.1.1,表示源主机IPv4地址是1.1.1.1(在没有指定报文传输方向类型时,报文传输方向类型默认为host) |
IPv6地址 |
使用冒号分十六进制格式表示。例如:dst host 1::1,表示报文的目的主机IPv6地址是1::1 |
IPv4网段 |
使用IPv4地址和掩码或者IPv4网络号表示。以下两种表达式等价: · src 1.1.1,表示源主机的IPv4网段为1.1.1 · src net 1.1.1.0/24,表示源主机的IPv4网段为1.1.1.0/24 |
IPv6网段 |
使用IPv6地址和网络前缀表示。例如:dst net 1::/64,表示目的IPv6网段为1::/64 需要注意的是,指定IPv6网段变量关键字时,必须指定net常量关键字 |
逻辑操作符的逻辑运算顺序为从左到右,下表为逻辑操作符的分类举例。
!或者not |
|
&&或者and |
与操作符。表示连接多个捕获过滤规则。当此操作符连接多个过滤规则时,报文若符合此操作符连接的全部过滤规则,才会过滤成功,否则,过滤失败。 |
||或者or |
或操作符。表示对多个捕获过滤规则进行选择。当此操作符连接多个过滤规则时,报文若不符合此操作符连接的全部过滤规则,才会过滤失败,否则,过滤成功。 |
取位运算符,与协议类型关键字结合使用。例如:ip[6],表示IP报文偏移6个字节后,取得的一个字节的值 |
相等,判断两侧操作数是否相等。例如:ip[6]=0x1c,表示捕获IPv4报文数据域偏移6字节,取得的一个字节值为0x1c的报文 |
|
不等,判断两侧操作数是否不等。例如:len!=60,表示捕获报文长度不等于60字节的报文 |
|
大于,判断左侧操作数大于右侧操作数。例如:len>100,表示捕获报文长度大于100字节的报文 |
|
小于,判断左侧操作数小于右侧操作数。例如:len<100,表示捕获报文长度小于100字节的报文 |
|
大于等于,判断左侧操作数大于等于右侧操作数;与常量关键字greater等价。例如:len>=100,表示捕获报文长度大于等于100字节的报文 |
|
小于等于,判断左侧操作数小于等于右侧操作数;与常量关键字less等价。例如:len<=100,表示捕获报文长度小于等于100字节的报文 |
捕获过滤表达式由关键字、逻辑操作符、运算操作符和比较操作符之间的多种组合而成。以下为典型捕获过滤表达式:
由关键字和逻辑运算符组合的捕获过滤表达式。例如:not port 23 and not port 22,表示捕获端口号既不是23,又不是22的报文;port 23 or icmp,表示捕获端口号是23或icmp协议的报文。
由逻辑操作符连接的多个变量关键字,可以使用同一个常量关键字进行修饰(就近原则),例如:src 192.168.56.1 or 192.168.27,表示捕获的源IPv4地址为192.168.56.1或者源IPv4网段为192.168.27的报文。上述表达式与“src 192.168.56.1 or src 192.168.27”等价。
由关键字、运算操作符和比较操作符组合的捕获过滤表达式。其中,expr是算术表达式;relop为比较操作符。例如:len+100>=200,表示捕获长度大于等于100字节的报文。
由协议类型关键字和运算操作符“[ ]”组合的捕获过滤表达式。其中,proto表示协议类型,expr为算术表达式,表示偏移量,size为整数,表示字节个数,缺省值为1。proto [ expr:size ]的返回值为从proto协议报文数据区域起始位置,偏移expr个字节开始,取size个字节的数据。例如: ip[0]&0xf != 5,表示捕获第一个字节与0x0f按位相与得到的值不是5的IP报文。
expr:size也可以使用表达式的名称表示。例如:icmptype表示ICMP报文的类型域,则表达式:icmp[icmptype]=0x08,表示捕获icmp的type字段的值为0x08的报文。
由关键字vlan,逻辑操作符等组合的捕获过滤表达式。其中,vlan_id为整型,表示VLAN编号。例如,vlan 1 and ip6,表示捕获VLAN编号为1的IPv6报文。
· 对于带VLAN tag且接口允许通过的报文,必须使用此类捕获过滤表达式且关键字vlan要在其它捕获过滤条件之前指定,否则不能正常过滤。例如:vlan 3 and src 192.168.1.10 and dst 192.168.1.1,表示捕获VLAN 3内、192.168.1.10发往192.168.1.1的报文。
· 对于接口收到的不带VLAN tag的报文:
¡ 如果设备会在报文头中添加VLAN tag,则为了捕获该类报文,必须在捕获过滤规则中设置过滤条件为“vlan xx”。对于三层报文,xx为报文出接口的缺省VLAN ID;对于二层报文,xx为入接口的缺省VLAN ID。
¡ 如果设备不会在报文头中添加VLAN tag,则为了捕获该类报文,不能在捕获过滤规则中设置过滤条件为“vlan xx”。
Packet Capture可以使用显示过滤表达式指定显示过滤规则,对捕获到的报文进行显示过滤。当进行显示过滤时,所有报文仍然保存在捕获报文文件中;显示过滤只是将符合显示过滤条件的报文显示出来,不会改变文件的内容。显示过滤规则由关键字,显示过滤操作符等组合而成,有关Packet Capture更多规则的详细介绍,请参见网址:http://wiki.wireshark.org/DisplayFilters。
支持的协议包括:eth,ip,ipv6,tcp,udp,icmp,http,ftp,telnet等。例如:ftp,表示显示所有ftp协议的报文信息。
指定报文的特定字段。使用点“.”表示包含关系。例如:tcp.flags.syn,表示tcp协议报文flags字段中的syn位。例如:tcp.port,表示tcp协议的port字段。
将整型字段值用二进制、八进制、十进制、十六进制形式表示。以下几种表达方式等价: 表示显示IP报文长度小于等于1500字节的报文信息 |
|
不使用其它操作符,单独使用报文字段,则默认指定字段的类型为布尔类型。例如: tcp.flags.syn,表示如果捕获到的报文存在tcp.flags.syn字段,则表达式的值为真,显示过滤成功;否则为假,显示过滤失败 |
|
MAC地址(6字节) |
MAC地址使用以下三种分隔符表示:分号“:”、点“.”或者破折号“-”;分隔符可以在两个或者四个字节间使用。以下几种方式等价: · eth.dst==ff:ff:ff:ff:ff:ff 以上的显示过滤表达式表示显示目的MAC地址为ffff.ffff.ffff的报文信息 |
IPv4地址 |
IPv4地址使用点分十进制格式表示。例如: · ip.addr==192.168.0.1,表示显示源或者目的IP地址为192.168.0.1的报文信息 · ip.addr==129.111.0.0/16,表示显示源或者目的IP地址属于129.111网段的报文信息 |
IPv6地址 |
IPv6地址使用冒号分十六进制格式表示。例如: · ipv6.addr==1::1表示显示源或者目的IPv6地址为1::1的报文信息 · ipv6.addr==1::/64表示显示源或者目的IPv6地址属于1::/64网段的报文信息 |
一些报文字段类型为字符串。例如,http.request version=="HTTP/1.1"表示显示http报文的request version字段为字符串HTTP/1.1的报文信息,双引号表示报文字段内容为字符串 |
逻辑操作符的逻辑运算顺序为从左到右,下表为逻辑操作符的分类举例:
!或not |
|
&&或and |
|
||或or |
|
优先级从高到低依次为:括号操作符、非操作符、与操作符和或操作符,其中与操作符和或操作符的优先级相同。
eq或== |
相等,判断两侧操作数是否相等。例如:ip.src==10.0.0.5,表示显示源IP地址为10.0.0.5的报文信息 |
ne或!= |
不等,判断两侧操作数是否不等。例如:ip.src!=10.0.0.5,表示显示源IP地址不是10.0.0.5的报文信息 |
gt或> |
大于,判断左侧操作数大于右侧操作数。例如: frame.len>100,表示显示捕获的帧长度大于100字节的帧信息 |
lt或< |
小于,判断左侧操作数小于右侧操作数。例如:frame.len<100,表示显示捕获的帧长度小于100字节的帧信息 |
ge 或>= |
大于等于,判断左侧操作数大于等于右侧操作数。例如:frame.len ge 0x100,表示显示捕获的帧长度大于等于256字节的帧信息 |
le或<= |
小于等于,判断左侧操作数小于等于右侧操作数。例如:frame.len le 0x100表示显示捕获的帧长度小于等于256字节的帧信息 |
显示过滤表达式由协议和报文字段、显示过滤操作符之间的多种组合而成。以下为典型的显示过滤表达式:
由关键字和逻辑运算符组合的显示过滤表达式。例如:ftp or icmp,表示显示所有ftp协议和icmp协议报文信息。
由关键字和比较运算符组合的显示过滤表达式。例如:ip.len<=28,表示显示所有IP报文的长度字段小于等于28字节的IP报文。
只由报文字段组成的显示过滤表达式,作用是显示存在某一具体字段的报文信息。例如:tcp.flags.syn,表示显示所有存在tcp.flags.syn位的报文。
由协议类型和运算操作符“[ ]“组合的显示过滤表达式,proto[…]的类型为十六进制整型,其中,proto表示协议类型、字段。括号操作符内容有以下两种表达方式:
· [n:m],n表示偏移位置,m表示指定的字节数;表示从偏移n个字节位置开始取后面m个字节数据。例如:eth.src[0:3]==00:00:83,表示源MAC地址的前三个字节分别为0x00、0x00、0x83。
· [n-m],n表示偏移起始位置,m表示偏移结束位置;表示从偏移n个字节位置取到第m个字节位置,共取m-n+1个字节数据。例如:eth.src[1-2]==00:83,表示MAC地址的第二个字节和第三个字节分别为0x00、0x83。
· [n],与[n:1]等价,表示取偏移n个字节位置的一个字节数据。例如:eth.src[2] == 83,表示MAC地址的第三个字节为0x83。
接口板LSUM1QGS12SG0和LSUM1TGS48SG0上的接口不支持Packet Capture特性。
二层接口上的大部分流量为硬件转发报文,对于硬件转发的报文,不管是本地、远程还是特性包报文捕获,均需要使用QoS策略将硬件报文镜像到CPU才能捕获;对于软件转发的报文,不需要将报文镜像到CPU,直接开启报文捕获功能即可。
表1-9 Packet Capture配置任务简介
配置本地报文捕获 |
||
配置远程报文捕获 |
||
用户可以通过本配置将接口捕获的报文保存到本地或FTP服务器上,若将捕获的报文保存到本地,则用户可以使用packet-capture read命令对保存的报文文件进行解析;若用户将捕获的报文保存到FTP服务器上,则用户可以使用第三方软件Wireshark连接到FTP服务器对文件进行解析。
表1-10 配置接口本地报文捕获并将捕获的报文保存到本地或FTP服务器
操作 |
命令 |
说明 |
配置接口本地报文捕获并将捕获的报文保存到本地或FTP服务器 |
packet-capture local interface interface-type interface-number [ capture-filter capt-expression | limit-frame-size bytes | autostop filesize kilobytes | autostop duration seconds ] * write { filepath | url url [ username username [ password { cipher | simple } string ] ] } |
配置本命令后,不会阻断当前登录终端的输入,用户可以输入其它命令对设备进行操作 若用户想退出报文捕获,则需要输入packet-capture stop命令停止报文捕获 |
远程报文捕获需要在设备上配置远程报文捕获,然后将第三方软件与设备建立连接,将捕获的报文上送到第三方软件显示。
表1-11 配置接口远程报文捕获
操作 |
命令 |
说明 |
配置接口远程报文捕获 |
packet-capture remote interface interface-type interface-number [ port port ] |
若用户希望退出报文捕获,则需要输入packet-capture stop命令停止报文捕获 |
在设备上配置远程报文捕获后,需要使用Wireshark客户端连接到开启捕获的设备上,获取捕获的报文进行分析。
第三方软件Wireshark客户端上的操作步骤如下:
(1) 打开Wireshark软件,选择“Capture > Options”。
(2) 选择“Interface > Remote”。
(3) 输入开启报文捕获的设备接口的IP地址(和Wireshark软件路由可达的接口IP地址)和绑定的RPCAP服务端口号(不输入值时表示使用缺省端口号2002)。
(4) 点击<OK>按钮,再点击<Start>按钮启动捕获。
图1-1 Wireshark操作步骤图
由于特性包报文捕获只能捕获通过CPU进行软件转发的报文,如需捕获通过硬件转发的报文,则需要配置流镜像功能,将符合条件的硬件转发报文镜像到CPU,以便进行捕获。有关流镜像的详细介绍,请参见“网络管理和控制配置指导”中的“镜像”。
配置下发后不能输入其它命令对设备进行操作,当达到命令指定的配置退出条件或者命令行输入Ctrl+C时,退出报文捕获。需要注意的是,在大流量背景下退出捕获报文,可能会有延时。
配置Packet Capture报文文件解析,能够解析pcap和pcapng格式报文文件,并将报文信息进行显示。
开启Packet Capture解析报文文件功能 |
在完成上述配置后,在任意视图下执行display命令可以显示配置后的报文捕获状态信息。
表1-14 Packet Capture显示和维护
操作 |
命令 |
显示本地或远程报文捕获状态 |
display packet-capture status |
在Switch的GigabitEthernet1/0/1接口上开启远程报文捕获功能,将捕获的报文上送到Wireshark软件上解析。
图1-2 远程报文捕获组网图
(1) 配置Switch
在接口GigabitEthernet1/0/1的入方向上应用QoS策略,用来限制只捕获去往Network(假设IP地址为20.1.1.0/16网段)的硬件转发报文。
# 创建IPv4高级ACL 3000,用来匹配目的地址为20.1.1.0/16网段的报文。
<Switch> system-view
[Switch] acl advanced 3000
[Switch-acl-ipv4-adv-3000] rule permit ip destination 20.1.1.0 255.255.0.0
[Switch-acl-ipv4-adv-3000] quit
# 定义流行为behavior1,配置流量镜向到CPU。
[Switch] traffic behavior behavior1
[Switch-behavior-behavior1] mirror-to cpu
[Switch-behavior-behavior1] quit
# 定义类classifier1,匹配ACL3000。
[Switch] traffic classifier classifier1
[Switch-classifier-class1] if-match acl 3000
[Switch-classifier-class1] quit
# 定义一个名为user1的策略,并在策略user1中为类classifier1指定采用流行为behavior1。
[Switch] qos policy user1
[Switch-qospolicy-user1] classifier classifier1 behavior behavior1
[Switch-qospolicy-user1] quit
# 将策略user1应用到接口GigabitEthernet1/0/1的入方向上。
[Switch] interface gigabitethernet 1/0/1
[Switch-GigabitEthernet1/0/1] qos apply policy user1 inbound
[Switch-GigabitEthernet1/0/1] quit
[Switch] quit
# 在GigabitEthernet1/0/1上开启远程报文捕获功能,指定RPCAP服务端口号为2014。
<Switch> packet-capture remote interface gigabitethernet 1/0/1 port 2014
(2) 配置Wireshark
a. 在PC上打开Wireshark软件,选择“Capture > Options”。
b. 选择“Interface > Remote”。
c. 输入Switch的IP地址(该地址必须和Wireshark路由可达)和绑定的RPCAP服务端口号2014。
d. 点击<OK>按钮,再点击<Start>按钮启动捕获。此时在报文捕获窗口可看到捕获到的报文。
在Switch A的Gigabitethernet1/0/1接口上开启报文捕获功能。配置捕获接口Gigabitethernet1/0/1入方向上的硬件转发与软件转发报文。
# 创建IPv4高级ACL 3000,并定制如下规则:只捕获源IP为192.168.56.1的报文。
[SwitchA] acl advanced 3000
[SwitchA-acl-ipv4-adv-3000] rule permit ip source 192.168.56.1 0
[SwitchA-acl-ipv4-adv-3000] quit
# 定义流行为behavior1,配置流量镜向到CPU。
[SwitchA] traffic behavior behavior1
[SwitchA-behavior-behavior1] mirror-to cpu
[SwitchA-behavior-behavior1] quit
# 定义类classifier1,匹配ACL3000。
[SwitchA] traffic classifier classifier1
[SwitchA-classifier-classifier1] if-match acl 3000
[SwitchA-classifier-classifier1] quit
# 定义一个名为user1的策略,并在策略user1中为类classifier1指定采用流行为behavior1。
[SwitchA-qospolicy-user1] classifier classifier1 behavior behavior1
[SwitchA-qospolicy-user1] quit
#将策略user1应用到接口GigabitEthernet1/0/1的入方向上。
[SwitchA] interface gigabitethernet 1/0/1
[SwitchA-GigabitEthernet1/0/1] qos apply policy user1 inbound
[SwitchA-GigabitEthernet1/0/1] quit
[SwitchA] quit
# 开启Gigabitethernet1/0/1接口上的报文捕获功能,捕获软硬件转发报文。
<SwitchA> packet-capture interface gigabitethernet 1/0/1
Capturing on 'Gigabitethernet1/0/1'
1 0.000000 192.168.56.1 -> 192.168.56.2 TCP 62 6325 > telnet [SYN] Seq=0 Win
=65535 Len=0 MSS=1460 SACK_PERM=1
2 0.000061 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=1 Ack
=1 Win=65535 Len=0
3 0.024370 192.168.56.1 -> 192.168.56.2 TELNET 60 Telnet Data ...
4 0.024449 192.168.56.1 -> 192.168.56.2 TELNET 78 Telnet Data ...
5 0.025766 192.168.56.1 -> 192.168.56.2 TELNET 65 Telnet Data ...
6 0.035096 192.168.56.1 -> 192.168.56.2 TELNET 60 Telnet Data ...
7 0.047317 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=434 Win=65102 Len=0
8 0.050994 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=436 Win=65100 Len=0
9 0.052401 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=438 Win=65098 Len=0
10 0.057736 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=440 Win=65096 Len=0
10 packets captured
· 在SwitchA的Gigabitethernet 1/0/1接口上开启报文捕获功能,配置捕获报文的个数为10个,配置将捕获的报文存入文件a.pcap。
· 配置捕获报文完成后,开启解析a.pcap报文文件。
图1-4 Packet Capture捕获报文并解析报文文件组网图
# 开启Gigabitethernet1/0/1接口上的报文捕获功能,指定捕获报文个数上限为10,指定捕获的报文存入文件a.pcap。
Capturing on 'Gigabitethernet1/0/1'
# 开启报文解析功能,指定解析的完整文件名为flash:/a.pcap。
<SwitchA> packet-capture read flash:/a.pcap
1 0.000000 192.168.56.1 -> 192.168.56.2 TCP 62 6325 > telnet [SYN] Seq=0 Win
=65535 Len=0 MSS=1460 SACK_PERM=1
2 0.000061 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=1 Ack
=1 Win=65535 Len=0
3 0.024370 192.168.56.1 -> 192.168.56.2 TELNET 60 Telnet Data ...
4 0.024449 192.168.56.1 -> 192.168.56.2 TELNET 78 Telnet Data ...
5 0.025766 192.168.56.1 -> 192.168.56.2 TELNET 65 Telnet Data ...
6 0.035096 192.168.56.1 -> 192.168.56.2 TELNET 60 Telnet Data ...
7 0.047317 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=434 Win=65102 Len=0
8 0.050994 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=436 Win=65100 Len=0
9 0.052401 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=438 Win=65098 Len=0
10 0.057736 192.168.56.1 -> 192.168.56.2 TCP 60 6325 > telnet [ACK] Seq=42 Ac
k=440 Win=65096 Len=0
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!