欢迎来到天天文库
浏览记录
ID:38623127
大小:142.00 KB
页数:9页
时间:2019-06-16
《基于WINPCAP的GOOSE报文捕获分析工具开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、WINPCAP网络开发包是一个免费、基于Windows平台、访问网络链路层的工具,它允许各种应用程序绕过协议栈捕捉并传送网络数据包,同时还包括一些其他功能,如包过滤、网络流量统计以及远程捕获等。基于这一开发包,可以方便地开发出面向通用对象的变电站事件(GOOSE)报文的捕捉工具,进而根据ASN.1/BER对报文进行解码并分析。文中介绍了如何基于WINPCAP开发包开发一个完整的GOOSE报文捕获工具,以及整个的设计思路和实现过程,并提出了一些可能的应用。0引言 当前,国内厂商对IEC61850的开发工作已经从以制造报文规范(MMS)为核心的客户/服务器(C/S)服务实现转到面
2、向通用对象的变电站事件(GOOSE)和IEC61850-9-1/2的实现上来。GOOSE通信及其应用是IEC61850的一个亮点,其出发点是功能的分布式实现口],GOOSE应用的建立需要多方面配合,同时也是一个较为烦琐的工程。在工程的调试过程中,对GOOSE报文的分析是一个必不可少的步骤,即检查数据发送是否正确及其时间特性。因此,如果有一个简捷的工具来捕捉与分析IEC61850报文,将会有助于工程调试的顺利进行。 WINPCAP(Windowspacketcapture)网络开发包是一个免费、基于Windows平台、访问网络链路层的工业标准工具,它允许各种应用程序绕过协议栈捕
3、捉并传送网络数据包,同时还包括一些其他功能,如包过滤、网络流量统计以及远程捕获等。基于这一开发包,可以方便地开发出GOOSE报文的捕捉工具,进而根据ASN.1/BER对报文进行解码并分析。 本文介绍了如何基于WINPCAP开发包开发一个完整的GOOSE报文捕获工具,以及整个设计思路和实现过程,并提出了一些可能的应用。希望能够为IEC61850标准在中国的推广做出一些贡献。 1WINPCAP简介 1.1内部结构 WINPCAP是一个Win32平台下用于抓包和分析的系统,其基本构成如图1所示。它包含一个运行于操作系统内核级的模块,与网络设备驱动接口直接连接,这一模块直
4、接绕过了系统的协议栈。为了让用户程序使用内核提供的功能,WINPCAP提供了多个编程接口分别封装在2个不同的动态链接库packet.d11和wpcap.d11中。packet.dll提供一个底层的应用程序接口(API),通过这个API可直接访问网络设备驱动,而独立于Microsoft操作系统;wpcap.dll是一个高层的强大捕获程序库,与Unix下的libpcap兼容,它独立于下层的网络硬件和操作系统。 1.2捕获数据包的接口与方法 WINPCAP有捕获数据包、发送数据包、统计网络流量3个主要功能。捕获数据包的基本流程如下: ⑴通过接口函数pcap_findall
5、devs_ex枚举所有可用的网络设备。 ⑵根据枚举返回的网络设备名称打开一个设备,对应接口函数为pcap_open()。 ⑶如果需要,设置数据包的过滤条件,对应接口函数为pcap_setfilter。 ⑷捕获原始的数据包,有2种方法:一种方法是以回调函数的方式由接口pcap_loop或pcap_dispatch完成,其基本方法是底层收集数据包,当满足一定的条件(timeout或者缓冲区满),就调用回调函数,把收集到的原始数据包通过数据缓存区交给用户;另一种方法是pcap_next_ex()的方法,每当一个包到达以后,接口pcap_next_ex就会返回,返回的数据缓冲
6、区中只包含一个包。 本文采用。pcap_next_ex的方法,并且设置了包过滤的条件,只捕获类型为GOOSE的数据包,即EtherType为0x88的数据包。 2程序设计与开发 2.1初始化 初始化工作包括2个部分:一是人机界面中协议数据单元(PDU)列表控件实例与GOOSE数据集列表控件实例的初始化,包括列名称、列宽度等相关属性;二是网络设备的枚举及显示,枚举可用设备的接口函数为pcap_findalldevs(),调用方法如下: If(pcap_findalldevs(&m_pAlldevs,errbuf)==-1)returnFALSE; 如果成功地
7、枚举到可用的网络设备,网络设备的相关信息将返回到列表m_pAlldevs中,网络设备的信息包括设备的唯一识别名称及其可读的描述内容,然后将其显示在一个下拉列表中供用户选择。 2.2捕获线程的建立和用户的交互 网络数据的捕获需要为其单独建立一个后台工作线程。当选定网络设备后,点击启动按钮,就启动后台工作线程。后台工作线程与界面线程的交互通过消息机制来完成。在后台工作线程中,首先通过接口函数pcap_open_live打开网络接口设备,然后调用接口函数pcap_next_ex
此文档下载收益归作者所有