时间:2024-09-03
◆陶德志 王 佳
(1.第七一五研究所 浙江 310023;2.杭州谱声电子有限公司 浙江 311121)
以太网数据测试监控方法设计与实现
◆陶德志 王 佳
(1.第七一五研究所 浙江 310023;2.杭州谱声电子有限公司 浙江 311121)
本文所述的以太网数据监控方法无需购置价格昂贵的网络数据分析仪,采用VC软件编程实现网络数据包的截获和分析,具有编程灵活方便、功能全面、性能稳定的特点。本文介绍的方法有两个关键点,一是配置交换机端口镜像即通过配置交换机将被监控的网络数据通过交换机的某一指定端口拷贝发送给监控设备;二是将接收监控数据的计算机网卡设置为混杂模式以使网卡接收所有发送来的网络数据包。
以太网;TCP/IP协议;原始套接字;交换机镜像;网络数据监控
现代工业已步入物联网时代,设备间的实时通讯和互联互通极大的提高了工业领域的自动化和信息化程度,物联网已经渗透到现代工业从生产、装配、调试、运输、仓储、监控、管理直到销售的各个环节。可以说基于以太网技术的物联网等信息化技术是现代工业的鲜明标签,对生产率的提高不亚于前几次工业技术革命。设备的互联互通和信息化一方面提高了效率另一方面也对设备间的以太网信息的交换和通讯提出了更高的要求,涉及到设备间数量庞大的以太网专用和通用通讯协议。通讯数据和命令的调试工作不但复杂度高而且工作量大,本文所述的以太网通讯数据测试监控方法应用面广、实用性强、易于实现并且应用灵活便捷。
TCP/IP协议通常被认为是一个四层协议系统,由下到上依次为链路层、网络层、运输层和应用层。
链路层,也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路,该层提供快速的网络传输服务。运输层主要为两台主机上的应用程序提供端到端的通信,该层提供可靠的网络传输服务。运输层包含两个重要的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。应用层则属于人机交互的层面负责处理特定的应用程序细节,如FTP、telnet和email等均属于应用层。
对于普通的网络应用程序是在运输层进行数据包的接收和发送,即采用连接型的TCP协议和非连接型的UDP协议,而监控网络数据需要截取更底层的数据包即网络层的IP数据包。
网络数据监控的实质是通过技术手段直接截获或间接获取网络上传输的所有数据包,并实现数据包的解析和过滤,以达到监控特定网络数据的传输来判断是否满足系统网络通讯的设计要求。实现网络数据监控有如下两个必要条件:
第一,需要将被监控的网络数据发送到监控设备的网卡端口。一般来说通过网络通讯的各种设备都是通过网线连接在交换机上,交换机通过查询路由表将指定地址的网络数据包发送到该地址对应的端口上,连接在交换机上的其他设备则无法收到该网络数据包。如果要把该数据包发送到监控设备的网卡端口,则需要对交换机进行端口镜像配置,即将被监控的一个或多个端口数据进行镜像拷贝并发送到指定的监控端口。
第二,需要监控设备的网卡接口接收所有发送到该网卡的数据包。windows系统的网络编程通常是使用套接字方式来实现的,普通的套接字程序只能响应与自身硬件地址相匹配或是以广播形式发出的数据帧。对于不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说上层应用程序将无法收到该数据包。如果希望网卡接收发送到网卡接口的所有数据包,需要对网卡进行特别的设置,即设置网卡为混杂模式。
所谓网卡混杂模式的设置是通过原始套接字来实现的,不同于网络应用编程通常使用的数据流套接字(TCP)和数据报套接字(UDP)。原始套接字获取的数据包含IP头、 TCP头和UDP头等信息头,这些信息保留了它在网络传输时的完整信息。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息,这些数据经过了网络层(IP)和传输层(TCP/UDP)的打包,对帧头数据包进行的分析需要依据“TCP/IP协议”进行解析。以太网数据帧封装如图1所示。
图1 以太网数据帧封装示意图
首先,需要对交换机进行端口镜像配置,以使被监控的网络数据包全部发送到监控设备的网卡端口。下面以思科20口的千兆网络交换机为例详细说明交换机端口镜像的配置方法和步骤:
建立计算机和交换机之间的网络连接。一般交换机的控制IP默认地址是 192.168.1.1,在计算机的命令提示符窗口输入 telnet 192.168.1.1字符串并回车建立连接。连接成功窗口显示Switch#,此时交换机为查看模式不能进行配置,需要输入configure terminal字符串并回车进入交换机配置模式。窗口显示Switch(config)#表示已进入配置模式,此时便可以对交换机配置进行更改了。网络数据包镜像源端口配置:在命令窗口输入 monitor session 1 source interface eth-0-1并回车设置网络端口1为镜像1的数据包源端口,如果有多个连接在交换机上的设备需要监控网络数据包可以将连接多个设备的多个端口设为镜像的数据源端口。网络数据包镜像目的端口配置:在命令窗口输入monitor session 1 destination interface eth-0-20并回车设置网络端口20为镜像1的数据包目的端口。配置完成所有通过交换机镜像源端口的数据包都将被拷贝并转发到镜像目的端口。
另外还需要设置网卡为混杂模式,以使网卡接收到达端口的全部数据包。下面以windows系统下VC编程实现为例说明网卡混杂模式的设置方法和步骤:
VC下采用创建原始套接字的方式设置网卡为混杂模式。添加代码 sockraw = socket(AF_INET, SOCK_RAW, IPPROTO_IP),其中AF_INET表示TCP/IP协议簇、SOCK_RAW表示创建套接字类型为原始socket。
将原始套接字绑定到本地地址,填充 sockaddr_in结构体并绑定到原始套接字。设置该套接字为接收所有数据的模式,添加代码 WSAIoctl(sockraw, SIO_RCVALL , &dwBufferLen,sizeof(dwBufferLen),NULL,0,&dwBytesReturn,NULL,NULL ),其中标志字SIO_RCVALL表示接收所有数据包。
至此网卡已经可以工作在混杂模式,只需要调用 recv()函数便能够接收到发送到网卡端口的所有数据包了。因为通过这种方式截获的数据包里包含了IP帧头、TCP和UDP帧头等信息,可以依据TCP/IP协议解析出源IP地址目的IP地址及源端口号和目的端口号以及数据包的协议类型等信息有助于网络数据的监控分析。在接收处理程序中添加信息过滤代码便可实现 IP地址过滤、端口号过滤、协议类型过滤以及数据包中任意特征数据值过滤,便于观察和分析数据包内容达到快速定位异常网络数据的目的。
本文所述的以太网数据包监控方法只需要一通用台计算机,无需添加任何硬件。并且通过编程可以方便灵活的实现数据包过滤、数据协议的分析以及数据通讯故障的快速定位。基于此方法编写的VC数据包监控分析软件已应用于多个设备间的网络数据的监控和分析,高速数据通讯下数据包截获稳定无遗漏、分析过滤数据包快捷直观,工作性能稳定可靠。在信息化高度发展及物联网技术日渐成熟的现代工业背景下,网络数据的监控分析是以太网数据通讯监控和问题分析定位的重要方法。
[1] 史蒂文斯(W.Richard Stevens).TCP/IP 详解(卷 1:协议)[M].机械工业出版社,2007.
[2] 孙鑫.VC++深入详解(修订版)[M].电子工业出版社,2012.
[3] 唐文超.VC++网络编程[M].清华大学出版社,2013.
[4] 韦朴,陈泰生.Visual C++通用范例开发金典[M].电子工业出版社,2008.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!