IP报文的一种简便捕获方法

2015-12-27 04:15李山松
计算机与网络 2015年2期
关键词:网卡缓冲区报文

李山松

(河北远东通信系统工程有限公司 河北 石家庄 050200)

IP报文的一种简便捕获方法

李山松

(河北远东通信系统工程有限公司 河北 石家庄 050200)

通过软件编程,将网卡置于混杂工作模式,可以方便地捕获IP层的数据报文。在数据捕获过程中,网络程序可以正常进行IP报文的收发,Socket套接字的工作不会受到影响。在此基础之上,针对具体项目编程,可以实现IP数据的高效捕获和分析,此方法已成功应用于GPS车辆管理系统的工程调试。在此项目中,此方法的运用,缩短了项目的调试周期,提高了工作效率。

IP报文 数据捕获 混杂模式 简便方法

1 引言

以太网的使用越来越广泛,众多系统开始采用以太网方式进行开发,大量的数据通过网卡进行传送。掌握网卡数据的捕获方法,可以加速相关系统的调试速度,快速解决系统之间的互联互通问题。要实现网卡数据的在线捕获功能,首先要把网卡的工作模式设定到混杂模式。

2 网卡混杂模式

混杂模式[1](Promiscuous Mode)是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序进行处理。

3 如何进入混杂模式[2]

要进入混杂模式,可以参照流程图进行编程,如图1所示。

图1 进入混杂模式流程图

在将网卡置于混杂模式的过程中,需注意每次函数调用的返回值,及时进行错误处理。当完成以上操作后,就可以通过编写代码读取网卡上传输的数据。

4 数据的捕获和处理

设置网卡为混杂模式后,就可以使用网络数据的接收函数对网卡上传输的数据进行捕获和处理,其流程如图2所示。

图2 数据捕获和处理流程图

网络数据的接收函数原型[3]为:

s是上面创建的SOCK_RAW类型的套接字。

buf是用来存放数据的缓冲区。

len是buf缓冲区的长度。

flags是函数的调用方式。

from指向存放源地址的缓冲区。

fromlen是from缓冲区的长度。

通过调用本函数,可以将接收到的数据存入预先申请好的内存缓冲区。之后捕获的数据可以在缓冲区内进行实时分析,也可以保存到数据文件内,供后续分析。

5 在实际项目中的应用

在进行某GPS车辆管理系统的调试时,为了确认GPS回送的数据是否正确,使用上述方法编写了一个数据捕获软件,将此软件运行于GPS接收服务器上,所有从GPS回传的数据都将被此程序记录。同时,捕获软件并没有影响原有系统运行,原来运行于服务器上的服务端软件也在正常处理数据。最后,通过对比服务端程序的统计结果和捕获下的原始数据,实现了对系统的修正和优化。下面是程序的一些主要代码,使用开源软件Code::Blocks进行编译。

5.1 Socket初始化[4]

本函数主要实现网络套接字Socket运行环境的建立,进行相关环境的初始化。依据函数的返回值,可以判定初始化工作是否顺利完成。

5.2 RAW套接字的创建

本操作的目的是创建一个RAW类型的套接字实例。创建实例的过程,将为套接字分配所需的内存。

5.3 本地IP的绑定

将创建的套接字与本地的网卡地址进行绑定。

5.4 将网卡置为混杂模式

通过使用SIO_RCVALL参数调用套接字的控制函数,将网卡的工作方式置为混杂模式。

5.5 数据的接收

通过recvfrom网络数据接收函数,对流经网卡的所有数据进行接收。所接收到的数据被保存在程序申请的内存缓冲区内,以方便进行处理。在原程序中,接收到的GPS数据被进行了实时处理,并转化为便于阅读的文本格式存储在计算机硬盘内。进行文本存储时,每条记录单独成行,使用逗号或者制表符分割行内的数据域。这样得到的数据可以直接导入EXCEL表格,方便进行筛选和统计。

5.6 捕获到的数据及分析方法

下面是捕获到的GPS终端发回的原始数据:

以上捕获到的数据是基于IP层的,其结构可以表示为:DATA=[IP头][IP数据]。

IP头[5]可以用下面的结构体表示:

分析这个结构,主要关心2个参数,一个是sourceIPAddress,从这个参数可以看出数据是哪个GPS终端回传的;另外一个参数是Protocol,从这个参数可以看出IP数据包里面封装了哪种业务协议。知道了协议类型后,可以对数据进行更详细的解读。分析从GPS终端返回的原始数据可以知道,Protocol=06,说明GPS终端使用TCP协议进行数据收发。通过这样一层层对数据进行剥离,可以得到GPS终端发送到服务器的所有信息。通过和服务器上服务端软件记录的信息进行对比,可以进一步确认故障点:是服务端软件BUG?还是GPS终端本身发送的数据就有问题?在工程实施过程中,快速判明责任方可以加快问题的处理速度。

6 优缺点分析

6.1 优点

这种数据捕获方式的优点是使用方便,不需要额外添加硬件,不需要在计算机上加载底层驱动,对计算机上运行的原有程序没有影响,可以方便地实现实时数据捕获和分析。同时,捕获和分析可以在一个程序上实现,制作成一个高度定制的捕获分析软件。

6.2 缺点

通过这种方式捕获到的数据只能是IP层和IP层以上的,不能实现数据链路层的数据捕获。如果有分析数据链路层的需求,可以使用WinPcap等第三方软件实现[6],这些软件一般需要在计算机上挂载自己的驱动程序,以实现底层数据的捕获功能。

7 结束语

IP报文的捕获方法有很多,这里介绍的是一种针对网络层的数据捕获程序的编写方法。其核心技术是通过软件设置,将网卡的工作模式设定为混杂模式来实现,这种IP报文的捕获方法是一种低成本、可定制和易实现的IP报文捕获方式,可以在一些没有条件使用协议分析仪的场合发挥出其小、快和省的特点。

[1]郭华.IP数据包截获原理的研究与实现[J].现代计算机(专业版),2009,4(305):94-95.

[2]尤文坚.利用RAW SOCKET捕获网络底层数据包的方法[J].广西轻工业,2007,11(108):56-56.

[3]STEVENS W R.UNIX网络编程[M].北京:人民邮电出版社,2010:187-187.

[4]QUINN B,SHUTE D.Windows Sockets网络编程[M].北京:机械工业出版社,2012:89-92.

[5]罗军舟,等.TCP/IP协议及网络编程技术[M].北京:清华大学出版社,2004:20-22.

[6]STEVENS W R.TCP/IP详解[M].北京:机械工业出版社, 2007:371-372.

A Simple Capture Method of IP Message

LI Shan-song

(Hebei Far-east Communications System Engineering Co.,Ltd,Shijiazhuang Hebei 050200,China)

The network adapter is put in promiscuous work mode by using software programming in order to easily capture the data message at the IP level.In the process of data capture,the network program can normally receive and send the IP message,the operation of Sockets are not affected.On this basis,aiming at the specific project programming,the high effective capture and analysis of IP data can be implemented.This method is successfully applied to the engineering commissioning of GPS vehicle management system.In this project,the application of this method shortens the debugging cycle of project and improves the work efficiency.

IP message;data capture;promiscuous mode;simple method

TP311

A

1008-1739(2015)02-67-3

定稿日期:2014-12-26

猜你喜欢
网卡缓冲区报文
基于J1939 协议多包报文的时序研究及应用
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
Server 2016网卡组合模式
基于网络聚类与自适应概率的数据库缓冲区替换*
嫩江重要省界缓冲区水质单因子评价法研究
ATS与列车通信报文分析
挑战Killer网卡Realtek网游专用Dragon网卡
关键链技术缓冲区的确定方法研究
读编往来