Capture是Spirent TestCenter的常用操作,本期主要介绍Capture自动化相关内容:
Capture关系结构图
基础抓包操作
设置抓包过滤条件
脚本示例
01
Capture关系结构图
首先看下客户端界面,如下图所示,在每个端口下面都有一个Capture,包含Start、Stop、Save等功能。
自动化跟客户端界面类似,每个Port对象都有自己的Capture子对象,如下图所示,其中红色字体是自动创建的对象:
Capture对象,管理端口的Capture操作,可以设置不同的抓包模式,对应图形界面的General标签页。
CaptureFilter对象,用于预定义抓包过滤条件,适用于协议头级别的过滤,以及使用各种不同大小的限制,对应图形界面的Qualify Events标签页。如果需要更精细的粒度,需要使用CaptureAnalyzerFilter对象,对应图形界面的Pattern Definition标签页。
CaptureFilterStartEvent对象,定义开始抓包事件,对应图形界面的Start Events标签页。
CaptureFilterStopEvent对象,定义停止抓包事件,对应图形界面的Stop Events标签页。
02
基础抓包操作
自动化抓包操作和手工测试的步骤基本一致:
首先需要获取Capture对象句柄。Spirent TestCenter会在创建Port对象时自动创建对应的Capture对象。通常使用默认的抓包配置参数就行,无需额外配置。
执行CaptureStart命令启动抓包,参数-CaptureProxyId的值为Capture对象句柄。相当于点击图形界面的Start按钮。
执行CaptureStop命令停止抓包,相当于点击图形界面的Stop按钮。
执行CaptureDataSave命令将抓到的报文保存为PCAP文件。
#创建工程,占用端口
source { C:\Program Files\Spirent Communications\Spirent TestCenter 5.39\Spirent TestCenter Application\SpirentTestCenter.tcl}
set hProject [stc::create project]
set hPortTx [stc::create port -under $hProject -location //10.61.32.98/3/1 -name PortTx]
set hPortRx [stc::create port -under $hProject -location //10.61.32.98/3/2 -name PortRx ]
stc::perform AttachPorts
stc::apply
#获取Capture对象句柄
set hCapture [stc::get $hPortRx -children-capture]
#通过查询-CaptureState来判断抓包状态,READY表示空闲状态。
stc::get $hCapture -CaptureState
#根据需要设置抓包参数
#REGULAR_MODE表示抓完整的报文
#TX_RX_MODE表示抓发送和接收方向的报文
stc::config $hCapture -mode REGULAR_MODE -srcMode TX_RX_MODE
#开始抓包
stc::perform CaptureStart -captureProxyId $hCapture
after 1000
#再次查询,返回RUNNING,表示正在抓包。
stc::get $hCapture -CaptureState
#停止抓包
stc::perform CaptureStop -captureProxyId $hCapture
#保存报文
stc::perform CaptureDataSave -captureProxyId $hCapture -FileName "C:/test/xml/capture.pcap"
#查看抓包数量
puts "Captured frames:\t[stc::get $hCapture -PktCount]"
代码中设置抓包参数的步骤,对应的图形界面如下:
03
设置抓包过滤条件
Qualify Events
报文过滤可以通过配置Qualify Events页面实现。比如只需要抓CRC错帧时,可以把Qualify Events标签页下的 FCS Errors配置为Include选项:
这个标签页对应的是CaptureFilter对象,对应的配置代码如下:
set hCaptureFilter [stc::get $hCapture -children-capturefilter]
#查看CaptureFilter对象的默认参数配置
stc::get $hCaptureFilter
#修改FCS为Include
stc::config $hCaptureFilter -FcsError Include
stc::apply
Pattern Definition
如果需要在大量数据流中抓取某个特定协议的报文或者是某个特定目的地址的数据包,可以通过配置Pattern Definition来实现。
图形界面的配置方法如下图所示,在Capture的Pattern Definition标签页,点击左上角的Add,选择Add Filter(s) with template…,找到目的地址填写期望的地址比如1.1.1.1,点击OK。
确认后会在Pattern Definition下生成一条过滤条件。
这个标签页对应CaptureAnalyzerFilter对象,通过-FrameConfig属性配置需要过滤的协议头字段。-FrameConfig属性使用XML格式,怎么获取这个字段的内容呢?首先在Spirent TestCenter客户端界面创建抓包过滤条件,然后可以save as script的方式保存成脚本,在对应的_logic.tcl文件中查看方法;或者是保存成XML文件,复制对应的配置即可。
配置代码示例:
stc::create CaptureAnalyzerFilter -under $hCaptureFilter -IsSelected true -FilterDescription {IPv4 Header:Destination} -ValueToBeMatched {1.1.1.1} -FrameConfig {<frame><config><pdus><pdu name="eth1" pdu="ethernet:EthernetII"></pdu><pdu name="ip_1" pdu="ipv4:IPv4"><destAddr>1.1.1.1</destAddr></pdu></pdus></config></frame>}
04
脚本示例
最后附上完整的TCL测试脚本,在发送端口创建了两条流量,一条流量的目的地址跳变5次,另一条流量插入了CRC错误。端口每次发送30个报文,即每条流量各15个报文。测试了三种情况:
1) 在没有设置抓包过滤条件时,能够抓到所有的30个报文。
2) 设置只抓CRC错帧后,只抓到了符合条件的第二条流的15个报文。
3) 设置只抓目的地址1.1.1.1的报文后,抓到了符合条件的3个报文。
执行效果如下图所示:
#创建工程,占用端口
source {C:\Program Files\Spirent Communications\Spirent TestCenter 5.42\Spirent TestCenter Application\SpirentTestCenter.tcl}
#package require SpirentTestCenter
set hProject [stc::create project]
set hPortTx [stc::create port -under $hProject -location //10.61.32.98/7/13 -name PortTx]
set hPortRx [stc::create port -under $hProject -location //10.61.32.98/7/14 -name PortRx ]
stc::perform AttachPorts
stc::apply
#构造流量
set hStream1 [stc::create streamblock -under $hPortTx -Name crc_error -EnableFcsErrorInsertion true]
set hStream2 [stc::create streamblock -under $hPortTx -Name traffic_noerror -EnableFcsErrorInsertion false ]
set hIP [stc::get $hStream2 -children-ipv4:ipv4]
set ipname [stc::get $hIP -name ]
stc::create rangemodifier -under $hStream2 -ModifierMode INCR -Mask 255.255.255.255 -StepValue 0.0.0.1 -RecycleCount 5 -Data 1.1.1.1 -OffsetReference $ipname.destAddr -Active true
set hGenerator [stc::get $hPortTx -children-generator]
set hgenCfg [stc::get $hGenerator -children-generatorconfig]
stc::config $hgenCfg -SchedulingMode PORT_BASED -DurationMode BURSTS -Duration 30 -BurstSize 1
#获取Capture对象句柄
set hCapture [stc::get $hPortRx -children-capture]
#通过查询-CaptureState来判断抓包状态,READY表示空闲状态。
puts "开始抓包前,查看抓包状态:[stc::get $hCapture -CaptureState]"
#根据需要设置抓包参数
stc::config $hCapture -mode REGULAR_MODE -srcMode TX_RX_MODE
#开始抓包
stc::perform CaptureStart -captureProxyId $hCapture
#after 1000
#再次查询,返回RUNNING,表示正在抓包。
puts "启动抓包后,查看抓包状态:[stc::get $hCapture -CaptureState]"
stc::perform GeneratorStart -GeneratorList $hGenerator
after 1000
stc::perform GeneratorStop -GeneratorList $hGenerator
#停止抓包
stc::perform CaptureStop -captureProxyId $hCapture
#保存报文
stc::perform CaptureDataSave -captureProxyId $hCapture -FileName "C:/test/xml/capture1.pcap"
#查看抓包数量
puts "未设置过滤条件,抓到的报文个数:[stc::get $hCapture -PktCount] \t报文存放路径C:/test/xml/capture1.pcap \n"
set hCaptureFilter [stc::get $hCapture -children-capturefilter]
#查看CaptureFilter对象的默认参数配置
puts "配置前,查看CaptureFilter对象:[stc::get $hCaptureFilter]"
#修改FCS为Include
stc::config $hCaptureFilter -FcsError Include
puts "配置后,查看CaptureFilter对象:[stc::get $hCaptureFilter]"
stc::apply
stc::perform CaptureStart -captureProxyId $hCapture
stc::perform GeneratorStart -GeneratorList $hGenerator
after 1000
stc::perform GeneratorStop -GeneratorList $hGenerator
stc::perform CaptureStop -captureProxyId $hCapture
#保存报文
stc::perform CaptureDataSave -captureProxyId $hCapture -FileName "C:/test/xml/capture2.pcap"
#查看抓包数量
puts "设置过滤条件,匹配CRC错帧,抓到的报文个数:[stc::get $hCapture -PktCount] \t报文存放路径C:/test/xml/capture2.pcap \n"
stc::config $hCaptureFilter -FcsError Ignore
#匹配目的地址1.1.1.1
stc::create CaptureAnalyzerFilter -under $hCaptureFilter -IsSelected true -FilterDescription {IPv4 Header:Destination} -ValueToBeMatched {1.1.1.1} -FrameConfig {<frame><config><pdus><pdu name="eth1" pdu="ethernet:EthernetII"></pdu><pdu name="ip_1" pdu="ipv4:IPv4"><destAddr>1.1.1.1</destAddr></pdu></pdus></config></frame>}
stc::apply
stc::perform CaptureStart -captureProxyId $hCapture
stc::perform GeneratorStart -GeneratorList $hGenerator
after 1000
stc::perform GeneratorStop -GeneratorList $hGenerator
stc::perform CaptureStop -captureProxyId $hCapture
#保存报文
stc::perform CaptureDataSave -captureProxyId $hCapture -FileName "C:/test/xml/capture3.pcap"
#查看抓包数量
puts "设置过滤条件,匹配目的地址为1.1.1.1的报文,抓到的报文个数:[stc::get $hCapture -PktCount] \t报文存放路径C:/test/xml/capture3.pcap"
stc::perform SaveAsXml -filename "C:/test/xml/capture_cfg.xml"
END
好啦,Capture自动化就介绍到这里,快动手试一试吧!欢迎留言交流!
联系我们:
思博伦官方网站: www.spirent.cn
技术中心热线:400-810-9529
支持邮箱:support@spirent.com
售后网站:support.spirent.com
版权归思博伦通信科技(北京)有限公司所有,思博伦技术中心(SpirentServices)原创发布,转载请联系授权。
长按识别二维码,关注思博伦技术中心