Spirent TestCenter 自动化中文版教程(十)门道初探之Capture基础

文摘   科技   2024-04-12 11:44   北京  

Capture是Spirent TestCenter的常用操作,本期主要介绍Capture自动化相关内容:

  • Capture关系结构图

  • 基础抓包操作

  • 设置抓包过滤条件

  • 脚本示例


往期文章:

Spirent TestCenter 自动化使用指南


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 AttachPortsstc::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 $hCaptureafter 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为Includestc::config $hCaptureFilter -FcsError Includestc::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 SpirentTestCenterset 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 AttachPortsstc::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 $hGeneratorafter 1000stc::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为Includestc::config $hCaptureFilter -FcsError Includeputs "配置后,查看CaptureFilter对象:[stc::get $hCaptureFilter]"stc::applystc::perform CaptureStart -captureProxyId $hCapturestc::perform GeneratorStart -GeneratorList $hGeneratorafter 1000stc::perform GeneratorStop -GeneratorList $hGeneratorstc::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.1stc::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::applystc::perform CaptureStart -captureProxyId $hCapturestc::perform GeneratorStart -GeneratorList $hGeneratorafter 1000stc::perform GeneratorStop -GeneratorList $hGeneratorstc::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自动化就介绍到这里,快动手试一试吧!欢迎留言交流!


延伸阅读:
(一)书山有路之Hello World!
(二)门道初探之port基础
(三)门道初探之port技巧
(四)门道初探之调试技巧
(五)门道初探之streamBlock基础

(六)门道初探之Device和绑定流

(七)门道初探之Generator基础 

(八)门道初探之基础实践 

(九)门道初探之Result基础


联系我们:

思博伦官方网站: www.spirent.cn

技术中心热线:400-810-9529

支持邮箱:support@spirent.com

售后网站:support.spirent.com


版权归思博伦通信科技(北京)有限公司所有,思博伦技术中心(SpirentServices)原创发布,转载请联系授权。


长按识别二维码,关注思博伦技术中心


思博伦技术中心
思博伦技术中心由思博伦全球服务部的技术团队管理和维护。我们致力于提供完善的技术支持,并定期更新。通过我们的微信平台您将获取最新的产品发布信息,全面的产品使用技巧,实用的常见问题解决方案,以及完善的售后服务流程。
 最新文章