
2012年7月第31卷 第7期
中国科技核心期刊
基于LabVIEW的以太网数据监听与通信
刘龙启 李 银
(中国计量学院量新学院 杭州 310018
)摘 要:为增强LabVIEW平台对以太网底层数据的访问能力,基于WinPcap函数库中的函数编写动态链接库(DLL),采用CLF调用DLL的方法实现LabVIEW平台对底层数据的获取。通过对网络数据包的捕获和对Ethernet II数据帧、IP报文、TCP报文及HTTP报文等的解析、显示与储存,实现了基于LabVIEW平台对以太网数据的监听与解析,在此基础上提出了基于LabVIEW平台实现以太网通信的新方式。
关键词:WinPcap;LabVIEW;数据包捕获;数据包解析;以太网通信中图分类号:TP393.1 文献标识码:
AData monitoring
and communication ofethernet based on
LabVIEWLiu Longq
i(China Jiliang University,Hang
Zhou 310018,China)Abstract:To enlarge the capability of acquiring network data under LabVIEW developing
workbench,a dynamic link li-brary(DLL)is written based on the WinPcap function library and the DLL can be called by CLF node.Through acquisi-tion of packet at the bottom of the network and analysis of Ethernet II data frame,IP package,TCP packag
e and HTTPpackage,data monitoring is realized by LabVIEW.At last,in the article,a new method of Ethernet communication is pres-ented.
Key
words:winpcap;LabVIEW;data packet capture;packet analysis;ethernet communication 收稿日期:2012-
70 引 言
随着计算机技术的飞速发展,参数测量已经进入了虚
拟仪器阶段[1]
。它将仪器技术和计算机技术紧密结合,利
用功能强大的PC机和显示器完成数据的分析处理和显
示功能[
2]
。高速发展的互联网也将数据共享推进了一个新的时期,现场总线作为构成网络化的、全开放、全分布的自动控制系统体系中的重要技术,
正在带来测量与自动化测控领域一场深刻的变革,由此加速了虚拟仪器的网络技术及远程计算机技术的发展,正改变着测量和发布数据的
方式[3-
4]。通过把通信网络和基于PC的虚拟仪器测量系
统相结合,能够在监控中心对远程的实验现场进行实时监
测、控制和数据分析[5]
。LabVIEW作为开发虚拟仪器的
优秀平台,它现行的网络通信方式有4种:(1)使用TCP、UDP等传输协议编程;(2)使用DataSocket技术进行网络
通信;(3
)现场实时发布测控网页,异地采用浏览器进行监控;(4
)采用无需协议的远程桌面控制[6-
7]。这些网络通信方式能让计算机之间和本地不同VI之间的通信得以轻松实现。但在方便用户的同时,由于LabVIEW提供的网络化组件高度封装化,使得它对底层网络的访问能力受到,
无法对底层网络获取的数据进行解析,更无法监控其他计算机之间传输的数据。WinPcap作为集成于W
in-dows操作系统的设备驱动程序,它可以从网卡捕获或者发送底层原始数据,
同时能够过滤并且存储数据包。这些使得LabVIEW结合WinPcap技术实现L
abVIEW平台对底层网络的访问成为可能。
基于LabVIEW的以太网数据通信和监听设计主要包括基于WinPcap实现网络数据发送、捕获与解析的DLL程序设计,LabVIEW的面板设计和数据发送与采集功能的实现,以及对采集到的网络数据的储存、解析和显示。
—
26—
2012年7月第31卷 第7期
应用天地
中国科技核心期刊
2 基于LabVIEW的以太网数据监听
基于WinPcap的以太网通信建立包括发送端发送数据包的编程和接收端捕获数据包的编程。由于WinPcap技术实现以太网数据的通信是建立在对以太网数据包监听捕获的基础上,首先对基于LabVIEW的以太网数据监听进行实现,以Ethernet数据帧、IP报文、TCP报文和HTTP报文为代表进行实例分析。2.1 基于WinPcap以太网数据包捕获
WinPcap是由UNIX下的libpcap移植到Windows下的产物,工作于网络的数据链路层。由于WinPcap提供了一套标准的数据包捕获接口,它能够从网络适配器上监听到最原始的数据帧,这包括了流经网卡的所有数据,同时它还提供了数据包的统计以及发送功能。
一个完整的基于WinPcap的网络数据捕获程序应由
两部分组成[
8]
:内核部分和用户分析部分。其中内核部分负责从网络中捕获和过滤数据,可以通过调用WinPcap
丰富的接口函数实现。用户分析部分包括显示界面的设置、数据的分析等,可以通过对协议的分析利用VC++构建DLL和LabVIEW相结合共同实现。
2.1.1 以太网数据捕获程序内核部分
在图1的流程中pcap_findalledvs()函数会自动搜索本地可用的网卡并将网卡信息以列表的方式返回给用户。当不再需要网卡列表时可以用函数pcap_freealldevs()释放空间。网卡设备的选取与设置利用函数pcap_open_live()进行,为实现监听功能应将监听模式设置为混杂模式。在WinPcap中实现数据捕获的方法有多种,
这里采用函数pcap_next_ex()捕获数据包,为完成以太网数据的时时捕获应使该函数处于循环调用的状态
。
图1 以太网数据捕获的基本流程图
2.1.2 以太网数据数据包解析
对捕获的数据包进行数据转化和显示储存,首先要完成数据包的解析。由于WinPcap工作于网络的数据链路
层,它捕获的数据结构为帧,以太网的Ethernet II帧格式如表1所示。
表1 Ethernet
II数据帧的格式名称前导符目标地址源地址类型数据
FCS
字节数
8
6
6
2 46-1500 4
根据以太网数据链路层的帧格式,网络适配器的驱动程序会自动计算校验和,
并取走帧中的前同步码和校验和字段[9]
,因此WinPcap接收的数据包仅仅是其中的帧头
和载荷部分。即捕获到的是帧结构中的“目标MAC地
址”、“源MAC地址”
、“帧类型”、“帧中数据”这4部分。以太网数据的解析即为对所获得数据包自下而上的拆分与分析。以TCP/IP协议下的HTTP报文为例,
为了获得应用数据,需将物理地址、帧类型、IP报头和TCP报头去除。对于物理地址的解析,只需将捕获的数据帧的前12个字节分别转换为十六进制数据就可以清楚地看到数据帧的目的物理地址和源物理地址;
帧类型表示高层协议的类别,例如IP协议是0800H;IP报头从第15个字节开始,结合IP报头的结构可解析出相应的目的IP,源IP等信息。由于IP头部中可能存在IP选项,所以需要对IP报头的长度进行查询。
ih=(ip
_header*)(pkt_data+14);//14为以太网首部的长度,pkt_data是捕获数据帧的指针,ip_header为定义的IP首部结构。
ip
_len=(ih->ver_ihl &0x0f)*4;//ver_ihl对应IP结构的第一个字节
依据IP长度去除相应IP报头,便可得到传输层数据。依据TCP的结构可得到相应的源端口号、目的端口号、发送序号和确认序号等信息,同时还可得到TCP的首度。
tcp_len=(*(pkt_data+14+ip_
len+12)&0xf0)*4/16;//12表示指示首度的信息前存在12个字节。
将TCP的首部解除后剩余的数据即为应用层,它的起始地址为pkt_data+14+ip_len+tcp_len。HTTP数据只有请求和响应两种类型,将帧中的二进制数据转换成字
符,便可表现出HTTP的请求和响应过程[1
0]
。值得注意的是由于互联网上主机采用的服务器多种多样,所使用的
编码和压缩类型也千差万别,对应的转化字符的方式和过程也不同,这里仅以ASCII编码方式为代表进行解析。2.2 以太网数据捕获的D
LL编写LabView中虽然缺少对网络底层数据监听的组件,但丰富的节点仍然能够使其轻松地实现与其他语言的混合
编程,进而完成相关功能。遗憾的是由于LabVIEW中缺少内存指针数据类型,无法完成对Wpcap
.dll中函数的直接调用[11
]。因此在WinPcap的安装环境下,需要调用Wpcap
.dll中的函数重写DLL,在编写时将对数据报的解析程序一并写入。用于数据捕获的DLL主要包括3部分内容:1)利用open函数调用pcap_findalldevs()函数打开网络适配器,并返回可用网卡数目供选择。2)输入选择的
—
36—
应用天地
2012年7月
第31卷 第7期
中国科技核心期刊
网卡序号,调用pcap_open_live函数对选定的网卡进行设置。
void_stdcall set(int inum){int
i=0;for(d=alldevs;i<inum-1;d=d->next,i++);//找到选定的网卡if((adhandle=pcap_open_live( d
->name,//设备名65536,//捕捉完整的数据包1,//混杂模式1000,//读入超时为1s
errbuf //错误缓冲))==NULL)pcap_freealldevs(alldevs);return;}3)编写Cap()函数,调用pcap_next_ex对数据进行捕获,捕获成功返回1,未捕获返回0,捕获失败返回-1。ip_header为定义的IP报头结构。在该函数中同时对获取的数据包进行解析,去除物理地址、帧类型、IP报头以及TCP报头。利用储存在mes[
]数组中的为解析所得的HTTP报文。DLL中Cap()函数的主体部分如下:while((rec=pcap_
next_ex(adhandle,&header,&p
kt_data))>=0){if(rec==0)return
0;ih=(ip_header*)(pkt_data+14);ip_len=(ih->ver_ihl &0x0f)*4;tcp_len=(*(pkt_data+14+ip_len+12)&0xf0)*4/16;//TCP报文报头长度for(i=0;i<12;i++)//判断捕获的数据包是否为要监听的数据
if(pkt_data[i]!=mac_head[i])return 0;tempch=(unsigned char*)(pkt_data+14+ip_len+tcp
_len);i=0;while(i<(header->caplen-(14+ip_len+tcp_len))){mes[i]=temp
ch[i];//将数据放入回调数组导出i++;
};return
1;}2.3 数据监听的LabVIEW程序实现
为了充分利用其它编程语言的优势,LabView提供了强大的外部程序接口。通过对CLF节点配置中的选项正确设置即可完成DLL的调用,
设置选项包括动态链接库路径、函数名、参数类型和返回类型等[
12-
13]。为了方便网络数据的解析,数据的处理均以字节为基本单位进行,因此首先要完成对设定监控的物理地址的判断和数据类转化。图2为判断和转化物理地址的子VI
,首先对提供的物理地址是否为12位字符(6个字节)
进行判断,然后对其中的字符是否满足16进制进行判断。对于不满足要求的设定以弹出对话框的形式提示相应错误,最终将物理地址转化为单位字节的数组以便于对捕获的数据进行筛选
。
图2 目的地址和源地址的判断与转化
数据包捕获、解析的CLF节点连接以及HTTP报文
储存显示的程序框图代码如图3所示
。
图3 数据包的捕获解析及储存
图3中的第一个CLF节点调用DLL中的open函数,检测可利用的网卡数目显示在前面板中。第二个CLF节点调用的是set函数,它在输入选择的网卡后打开对应的网卡并对网卡的模式进行设置。第三个CLF节点调用的是Cap函数,它的第一个参数是由设定的物理地址所转化的组合数组,第二个参数为一数组,1500保证了解析获得的HTTP报文数据均能被放置在数组中输出。当捕获到
目标数据包后捕获标志显示为“1”,并在解析出的HTTP报文前添加时间标记予以显示。数据捕获运行程序停止后,自动在程序的同一级文件夹下创建“data.txt”,并将该次程序运行期间捕获的HTTP报文数据全部存入。
在完成以上步骤后将监控机与被监控机的互联。图4是在被监控机打开“
百度知道”时,监控机前面板上呈现的界面。该监控机拥有两个网卡可用,
在监控中选择了“1”对应的网卡,抓获标志为“1”
表示当前成功捕获目标数据。
捕获的HTTP数据报内容包括了响应信息的状态行、首部字段以及相应的部分网页内容。状态行中显示了HTTP的版本、状态码以及解释状态码的简单短语。首部字段中Date头域表示消息发送的时间,时间的描述格式由rfc822定义,它描述的时间是世界标准时。Server:Apache表示网页服务器为Apache HTTP Server,Keep-Alive表示客户端到服务器端的连接持续有效。Transfer-Encoding
:chunked表示数据的传送方式为块传送。Con-—
46—
中国科技核心期刊
tent-Typ
e用于指明发送给接收者实体正文的类型,text/html为超文本标记语言文本即网页文档,后面的就是传输文档的内容
。
图4 监控机的前面显示
3 基于LabVIEW的以太网通信
基于LabVIEW的以太网通信终端构建包含发送端的构建和接收端的构建,通信过程如图5所示
。
图5 基于LabVIEW的通信模式
3.1 接收端的构建
对于LabVIEW的接收端的构建只需在数据监听的基础上将源地址和目的地址分别改为发送端的物理地址和本机的物理地址并根据要接收的数据类型对数据的解析和类型转化做适当调整即可。3.2 发送端的构建
数据包的简单发送可以通过调用函数pcap_send-p
acket来实现,为利用labVIEW调用它,这里设置send(unsigned char input[],int i)函数调用该函数重新编写DLL,
函数的两参数分别为待发送的数据和数据的长度。由于该函数所发送的数据不被内核协议处理,因此在发送前须依据以太帧标准填充相应的协议头,以太帧的格式如表1。数据包发送的LabVIEW实现如图6所示。
其中前两个CLF节点分别调用open函数和set函数,第三个节点调用send函数发送数据包
。
图6 数据包发送的LabVIEW实现
3.3 结果显示
在完成发送端和接收端的构建和设置后,将两机联通,两机通信的前面板显示如图7所示
。
图7 LabVIEW实现以太网通信显示
在图7中前者为发送机的前面板,后者为接收机的前面板。从图中可以看出基于LabVIEW调用DLL的方法
能够很好地完成以太网数据通信的任务。
4 结束语
利用LabVIEW强大的外部程序接口能力,通过调用DLL的方法可实现LabVIEW对底层网络数据的访问,与WinPcap技术结合使L
abVIEW拥有了对以太网传输数据监控的功能。基于监控的以太网通信不仅能得到完整
的数据包,而且为网络结构的组建及监控通信模式提供了新方案。
参考文献
[1] 张玉萍,
荣见华,付俊庆,等.基于LabView的网络通信技术研究[J].自动化仪表,2004,25(4):21-23.[2] 张霞,
宋仲康.基于LabVIEW的局域网双机通信[J].微计算机信息,2004,20(12):48-
50.[3] 李将渊,吴其俊,王文彬,等.基于LabVIEW
8.0DataSocket技术的远程监测化学虚拟仪器系统[J].计算机与应用化学,2006,23(12):1327-1330.[4] 路亚峰,
陈义军,温新岐,等.虚拟仪器技术研究现状与展望[J].国外电子测量技术,2010,29(11):35-37.[5] 李继容,
鲍芳,冯燕.网络化虚拟仪器技术及应用[J].计量技术,2003,(2):23-
25.[6] 丁硕.
基于LabVIEW的远程数据通信技术的实现[J].电子科技,2008,21(5):42-
43.(下转第69页)
—
56—
5 结束语
本文针对在役管道检测机器人续航的关键问题,实现了能将流体的动能转化为电能,并对机载的电池充电,这样机器人无限续航就成为可能。该功能实现主要由浆叶、变速装置、发电机和高能锂电池组A和电池组B等部分组成。其中锂电池组A和B实行乒乓工作,切换充电与放电,使得锂电池高效工作。该电源供电管理方案稍加改造能够用于多种其它系统之中。
参考文献
[1] 孙丽,孙茜茜,任亮等.应用光纤布喇格光栅传感器监测地下管道腐蚀的新方法研究[J].光子学报,2012,
41(1):6-11.
[2] 万正军,廖俊必,王裕康等.基于电位列阵的金属管道坑蚀监测研究[J].仪器仪表学报,2011,32(1):19-25.[3] 宋雪桦,吴和生,刘锦娟等.混合电动汽车电池管理系统设计[J].电子测量与仪器学报,2011,25(9):
787-792.
[4] 邱细亚,王仁波,满在刚等.基于MSP430F168的双电池供电设计[J],电子元器件应用,2011,13(8):24-27.[5] 林建伟,隔离PWM驱动/控制器LM3001/LM3101[J],国外电子元器件,1998,6(5):17-20
[6] 敬成林,薛方正,张华,等.双足机器人稳定步行模式的预测控制实现方法[J],仪器仪表学报,2010,31
(12):2700-2705.
[7] 周洪伟,罗建,吴英杰,等.低电压太阳能供电系统设计[J],电子测量技术,2011,34(2):18-21.
[8] 陈仁伟,朱长青,王军阵,等.基于CH372的USB虚拟交流电压表的设计与实现[J],国外电子测量技术,
2010,29(9):69-72.
作者简介
段颖妮,1976年出生,女,陕西西安人,讲师,研究方向:检测技术及其自动化、序列与编码。
E-mail:dyn2008@y
櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒櫒
eah.net
(上接第65页)
[7] 刘华.基于虚拟仪器的网络技术研究[J].国外电子测量技术,2006,26(2):17-20.
[8] 张伟,王韬,潘艳辉,等.基于WinPcap的数据包捕获及应用[J].计算机工程与设计,2008,29(7):1649-1651.
[9] 盛志伟,刘仕筠,李群.以太网数据包捕获与转发技术[J].微计算机信息,2006,22(12-1):279-282.
[10]许爱军,谢娟,张华.基于WinPcap的网络数据解析及其实现[J].科学技术与工程,2009,9(10):2797-2800.[11]王惠强,胡景春,卢小文,等.基于LabVIEW的以太网数据的传输[J].微计算机信息,2008,24(11-3):145-146.
[12]陈锡辉,张银鸿.LabVIEW8.20程序设计[M].清华大学出版社,2007.
[13]戴成梅,戴成建.基于LABVIEW网络虚拟数字电路
实验平台的研制[J].国外电子测量技术,2011,30
(9):67-71.
作者简介
刘龙启,1990年5月出生,本科生,研究方向为仪器仪表通讯技术。
E-mail:Liulongqi90@163.com
李银,1987年11月出生,研究生,研究方向为检测技术及自动化装置。
E-mail:Liyin73@126.com
谢岳,1964年3月出生,工学博士,教授,主要研究方向为电气测量技术、电力电子等。
E-mail:hzxieyue@hotmail.com
—
9
6
—
中国科技核心期刊
