常孟佳
(江西科技学院,江西南昌 330108)
近年来互联网技术得到了蓬勃的发展,而网络作为信息交换的重要载体也被广泛应用在各个领域。随着网络的接入,各种各样的业务随之产生,为了保证良好的网络环境,社会对网络监管有了更高的要求。通过网络监听来分析网络环境,及时改进网络环境并保证网络环境的安全是目前研究的一大热点。本文通过使用Jpcap[1,2]和Winpcap[3,4]技术设计一种网络数据包的监听与分析方法,使其可以在数据链路层中进行对数据包的监听、捕获、分析,实时监测网络状态。
数据帧是数据链路层中的协议数据单元,它包含帧头、数据部分、帧尾三个部分。其中帧头是数据帧的开始部分它包含三个字段,前两个字段包含了物理地址,各有6个字节,第三个字段包含了16位以太网帧类型,例如IP数据包、ARP请求/应答等。帧头后面紧接着数据部分,最后是帧尾。
数据包是TCP/IP协议通信的数据单元。TCP/IP协议通信采用了4层架构模式,分别是应用层、传输层、网络层、数据链路层。数据包主要工作在网络层中,主要由目的IP地址、源IP地址以及数据部分等构成,其中目的IP地址和源IP地址主要在包头部分,数据部分在包体中。此外数据包中还包括MAC地址、协议类型端口号等细节。
计算都是通过网卡在网络世界中进行收发数据的。因为以太网共享传输介质,在同一个冲突域中都可以接收到网络传输中的数据帧,这个时候就需要网卡对数据帧进行相应的过滤,通过数据帧的目的MAC地址和网卡驱动程序相应的设置进行数据帧的过滤,选择需要接收的数据帧接收。网卡的接收主要有四种模式:
(1)广播模式:网络中所有的广播信息都能够接收。
(2)组播模式:网卡能够接收组播数据,在一个组播组中,通过组内广播的形式进行发送,只要在这个组播组中,都能接收到数据。若网卡为多播传送模式,则可以接收所有的包含组内成员以外的多播传送帧。
(3)单播模式:只接收目的MAC地址是自己的数据帧。
(4)混杂模式:能够接收所有通过网卡的数据帧。网卡的缺省有广播和单播两种工作模式,只接收广播帧和发送给自己的数据帧。网络数据包的监听捕获需要将网卡的工作模式设置为混杂模式,这样网卡就可以接收到同一网络中的所有数据包。
数据包捕获技术[5-6]的应用十分广泛。以太网从逻辑上分析是一种总线型的网络拓扑结构,各个站点通过相应的硬件接口和电缆接入共享的总线。以太网中传输介质具有共享的特性,同时各个站点采用广播信道争用的方式监听系统并与正常通信的网络保持并联连接,从而捕获在同一冲突域中的所有数据包,因此各个站点可以较为容易地获得其他站点发送的数据。网络数据包的捕获需要将网卡设置为混杂模式的工作模式。
在TCP/IP四层架构中,一般数据包从底层的数据链路层逐层向上传递,依次经过网络层和传输层,最终到应用层中相应的应用软件。网络数据包的捕获是在数据包通过数据链路层时,将数据帧进行拷贝并将拷贝出的数据帧传送给相应的程序进行处理。
网络数据包的监听主要依靠Winpcap和Jpcap实现。由于核心的Java API不能访问底层的网络数据,但Jpcap可以给Java语言提供在Windows或Unix系统上进行这种访问。同时,Jpcap只是一个类库,需要依赖本地系统库的使用。所以在Windows系统上使用Jpcap时,需要先安装Winpcap。
Winpcap是一个基于win32平台提供win32应用程序访问网络底层能力的开源库。Winpcap是免费的,提供了强大的编程接口,具有良好的可移植性。Winpcap用途十分广泛,可以用于网络分析、故障排除、网络扫描等多个方面。
Winpcap中包括:内核级的包过滤器、底层的动态链路层、高层与系统无关的库。数据包捕获系统通过Winpcap提供的解决方案直接与网络接口的驱动进行交互,用户通过程序接口进行数据包的捕获。
Jpcap是一个Java类库包,为发送、捕获网络数据包提供了一个公共的Java接口,实现了平台的无关性。Jpcap是一个类集合,本身并不能直接对数据链路层进行控制,它提供的只是接口和系统支持,因此需要基于Libpcap/Winpcap和原始套字节接口。Libpcap用于Unix系统,Winpcap用于Windows系统,本次实验环境基于Windows系统,所以在使用Jpcap之前需要先安装Winpcap。
Jpcap提供以下的功能:(1)捕获原始的数据包;(2)可以将捕获到数据包存入本地文件;(3)根据自身提供的packet类集合中识别出相应的数据包类型,比如:TCP,UDP,ICMP等;(4)可以根据程序代码指定过滤规则对数据包的进行过滤;(5)向网络发送各类型的数据包。
Jpcap作为捕获数据包的一种工具,不但对于各种操作平台具有一定的通用性,而且对各种数据包的解析也十分方便。Jpcap类集合中有16个类,1个接口。其中关于数据包的类有 9个,分别是:ARPPacket、DtatlinkPacket、Ethernet-Packet、ICMPPacket、IPPacket、IPv6Packet、TCPPacket、UDPPacket、Packet,这也是Jpcap对网络数据包支持的数据包类型。Jpcap还定义了大量的常量,为获取和分析理解数据包带来很大的便利,同时对数据包中的内部信息的理解也具有很大的帮助。Jpcap对数据包的捕获和分析可以采用独立的线程进行,这也对程序的优化带来了优势。
网络数据包的监听[7]是通过使用Winpcap和Jpcap对网络数据包的捕获,使用Jpcap进行数据包的捕获,具体如图1所示。
图1 网络数据包的捕获流程图
开始使用JpcapCaptor类中的getDeviceList()获取网卡列表,并将网卡列表存入networkinterface类提供的数组中,然后JpcapCaptor类中的openDevice()将网卡以混杂模式进行工作,获得一个捕获器,并进行数据包的捕获。其中openDevice()中有四个重要的参数,NetworkInterface interface,int snaplen,boolean promisc,int to_m。
NetworkInterface interface指的是需要打开连接的网卡实例;snaplen是指一次接收到的数据包,只提取该数据包中前多少个字节;promisc判断是否将网卡设置为混杂模式;to_m指定超时的时间。最后捕获数据包,Jpcap中提供捕获数据包的方法有四种,分别是getPacket()、LookPacket()、processPacket()和dispatchPacket()。getPacket()捕捉一个数据包;LookPacket()捕捉指定书目的数据包,并交由Packet-Receiver接口的类的实例进行处理;processPacket()跟loop-Packet()功能一样,但是时限不同,前者超时后会自动返回捕捉到数据包的数目;dispatchPacket()跟processPacket()功能一样,区别是这个方法可以处于“non-blocking”模式工作。
本实验环境在Windows10操作系统中,开发环境是在JDK1.7下进行,具体实现结果如图2和图3所示。其中图2中监听捕获到的是UDP和TCP的网络数据包,图3中监听捕获到的是ICMP网络数据包。
根据图2和图3的结果,可以发现数据包显示的信息并不多,如果想要获取数据包更多相关的信息,就需要将捕获到的数据包进行解码分析。因为捕获到的网络数据都是经过层层封装的,所以需要对网络数据包进行解析,才能判断网络数据包的类型。对网络数据包的分析主要是协议分析和流量分析。
图2 TCP和UDP网络数据包监听捕获结果图
图3 ICMP网络数据包监听捕获结果图
5.1.1 网络协议分析设计
首先将网络数据包解码,然后分析网络数据包的网络协议,最后根据不同的网络协议对网路数据做进一步的分析,获取更多有用的信息,具体实现过程如图4。网络数据包是根据协议相关规则进行封装的,因此提取数据包中的相关字节可以分析出对应的相关协议。根据提取出的字节对照表1中的相关协议号便可以找出数据包相关的协议。
表1 协议号--协议对照表
图4 网络数据报协议分析流程图
首先得到网络数据包中的相关协议,然后依照相关协议将数据包放入相关处理模块,获得更加详细的信息,如数据包中的目的IP地址、源IP地址、数据包的大小等信息参数。具体设计中只选取了常用的ARP数据包、TCP数据包、UDP数据包、ICMP数据包进行处理。
5.1.2 数据包的流量分析设计
数据包的流量分析[8-10]是根据传输过程中数据包的来源和目标进行分析归类,记录网络数据包中的重要参数信息。从根本上看,网络数据包的数据流量分析功能依赖于网络数据包捕获技术和网络数据包的解析功能。在实际的生活当中,可以利用网络数据包流量对实时传输的数据包进行侦探检测,分析其传输行为,从而了解网络环境。
网络数据包的归类统计需要依靠网络协议的分析结果,通过得到网络数据包中的相关协议进行分类统计,同时根据协议对各种数据流量进行更深层次的统计计算,以便进一步分析所处的网络环境。数据包的流量分析是对数据包进行实时连续的统计,通过统计得到的数值分析网络状态和网络流量的变化趋势,从而找出影响网络的关键因素。
网络数据包的流量分析设计首先要实时统计所经过网络设备的网络数据包总数,再根据网络协议分析的结果,对TCP、UDP、ICMP的数据包进行统计,计算出网络环境中各种协议数据包所占比例。根据监听捕获到的网络数据包,选择IP数据包判断其中的源IP地址和目的IP地址,并对源IP地址和目的IP地址对向外发送的网络数据包和接收的数据包进行统计,这样就可以得到网络数据包的进出流量值。还可以进一步地进行计算得出发送最多数据的目的地址和接收最多的源网络IP地址,从而帮助分析网络入侵检测。
根据网络数据的设计分析对TCP数据包的实现结果如图5所示。图6,图7,图8分别是UDP,ICMP和ARP网络协议数据包的分析结果。另外同时对捕获到IGMP协议的网络数据包进行分析,结果如图9所示。
图5 TCP数据包分析结果
图6 UDP数据包分析结果
图7 ICMP数据包分析结果
图8 ARP数据包分析结果
图9 IGMP数据包分析结果
根据以上对数据包的分析结果,通过将数据包进行归类统计和实时的流量分析,得到如图10所示结果。由结果图可知统计了300个数据包,进行流量分析得到TCP占所有数据包的82%,UDP数据包占所有数据包的18%,设备发送的数据包占51%,设备接收的数据包占49%。
图10 数据包流量分析
本文介绍了网络数据包的监听原理以及网络数据包的相关技术Winpcap和Jpcap,并采用Java语言进行开发设计。使用Jpcap对数据包进行监听捕获,将捕获到的数据包进行解码分析,其中重点对网络数据包进行协议分析和流量分析。通过对网络数据包的分析可以帮助我们了解网络状况,改善网络环境。在未来的工作中,通过结合机器学习相关方法对网络数据包进行入侵检测分析,更好地保障网络环境安全。