一款基于Jpcap的网络工具软件的设计与实现
2017-05-19邹宁
邹宁
(中国民用航空华东地区空中交通管理局浙江分局,浙江 杭州 311207)
一款基于Jpcap的网络工具软件的设计与实现
邹宁
(中国民用航空华东地区空中交通管理局浙江分局,浙江 杭州 311207)
介绍了一款基于Jp c a p的网络工具软件的设计与实现。该软件在W i n d o w s平台下开发,采用JA VA语言,使用Jp c a p获得网卡信息、捕获数据包和发送数据包。该软件具有良好的用户操作界面,可以选择并显示网卡信息、发送自定义U D P数据包、通过PING测试网络连通性。
网络;软件;JA VA;Jp c a p
1 引言
随着Internet技术的发展,网络世界对人们的生活和工作产生了越来越重要的作用,而网络中的安全问题也越来越严重,因此网络分析和监控软件也变得越来越重要。Jpcap是一种网络数据包处理开发库,它为网络分析和监控软件的开发提供了支持。Jpcap是JAVA的一个中间件,它给JAVA语言提供了一个公共接口。利用Jpcap可以捕获网络中的数据包,实现对网络的监控和分析;也可以将自定义的数据包发送到网络。本文利用Jpcap和JAVA语言实现了一款网络工具软件的开发,软件具有良好的用户操作界面,通过该软件,可以向网络发送自定义UDP数据包、捕获网络中的数据包和发送ICMP数据包测试网络连通性。
2 网络数据包捕获工具Jpcap
2.1 Jpcap简介
Jpcap是一个JAVA类库包,为发送、捕获网络数据包提供一个公共的JAVA接口,实现了平台无关性。它是JAVA的一个中间件,不直接对数据链路层进行控制,它调用winpcap/libpcap。目前Jpcap的最新版本为Jpcap 0.7版,它支持windows、unix、linux等系统,并且支持TCP、UDP、IPv4、IPv6、Ethernet、ARP/RARP等协议[1]。
2.2 JPcap类介绍
Jpcap类库共有13个类,以及一个包处理接口,JAVA应用程序通过调用这些Jpcap类库和接口,就能实现对IP数据包的捕获、过滤和保存的功能[1]。它们分别为 Jpcap、JpcapSender、JpcapWriter、Packet、TCPPacket、UDPPacket、IPPacket、IPv6Option、IPAddress、ARPPacket、ICMPPacket、EthernetPacket、DatalinkPacket类以及JpcapHandler接口。
2.2.1 查看网卡属性
查看网卡属性用到Jpcap中的NetworkInterface、Jpcap-Captor类。
class jpcap.NetworkInterface:这个类中包含了一些网络接口信息;
class jpcap.JpcapCaptor:这个类用来从网络中捕获或读取文件中的数据包。
2.2.2 发送数据包
发送数据包用到Jpcap中的JpcapSender、JpcapCaptor类。
class jpcap.JpcapSender:这个类用来发送数据包;
发送数据包需要的方法:
jpcap.JpcapCaptor.getDeviceList():该函数用来获得网卡列表;
jpcap.JpcapCaptor.openDevice (NetworkInterface interface,int snaplen,boolean promisc,int to_ms):这是一个重要的函数,它有四个参数:即将打开的设备名、从设备上一次读取的最大字节数、说明是否将网卡设为混杂模式、以后调processPacket()或者loopPacket()函数时用到的超时值;
jpcap.JpcapSender.sendPacket(Packet packet):该函数用来发送定义好的数据包。
2.2.3 接收数据包
接收数据包用到Jpcap中的JpcapCaptor类。
接收数据包需要的方法:
jpcap.JpcapCaptor.getDeviceList():该函数用来获得网卡列表;
jpcap.JpcapCaptor.openDevice (NetworkInterface intrface,int snaplen,boolean promisc,int to_ms):该函数有四个参数,分别为:即将打开的设备名、上次从设备读取的最大字节数、是否将网卡设为混杂模式、调用processPacket()或loopPacket()函数时用到的超时值。使用时,首先要打开网络适配器,将网卡设置为混杂工作模式,使网卡可以接收来自网络的所有的数据包[2];
jpcap.JpcapCaptor.getPacket():捕获单个数据包;
jpcap.JpcapCaptor.loopPacket(int count,PacketReceiver handler):持续捕获指定数目的数据包;
jpcap.JpcapCaptor.processPacket(int count,PacketReceiver handler):持续捕获指定数目的数据包,但不同于loopPacket(int count,PacketReceiver handler),当超时后,即使没有捕获到数据包,该函数也会返回。
3 UDP数据报格式
用户数据报协议(UDP)是一种无连接的不可靠的运输层协议,具有进程到进程的通信功能,但无法确保数据包到达目的主机。图1给出了用户数据报(UDP分组)的格式。
图1 用户数据报的格式
4 PING功能的原理
PING程序通过发送ICMP回显请求(ECHO_REQUEST)报文给目标设备,并等待ICMP回显应答(ECHO_REPLY)报文[3]来测试网络连通性。Internet控制报文协议(Internet Control Message Protocol)是网络层的一个协议,ICMP报文被包装成IP数据包。设备可以通过ICMP协议报告错误并交换相关的状态信息。
5 软件的实现
5.1 软件结构
该软件分为五大模块:初始化模块、输出网卡信息模块、PING模块、发送UDP数据包模块、接收模块。初始化模块用来显示软件界面和用户配置数据的导入,输出网卡信息模块用来输出相关网卡的信息,PING模块用来发送和接收ICMP数据包,发送UDP数据包模块用来发送用户自定义的UDP数据包,接收模块用来接收网络数据包并输出数据包信息(图2)。
图2 软件结构
5.2 程序流程图
首先对程序进行初始化,显示用户界面,用户选择相应网卡,并输入自定义数据信息,若初始化失败则返回并输出出错信息。若初始化成功,用户选择相应功能模块,实现相应功能并返回(图3)。
图3 程序流程图
5.3 UDP数据包的设置
UDP数据包设置代码如下:
public UDPPacket proUDPPacket(int sourPort,int dest-Port,InetAddress sourIP,InetAddress destIP,String contents){
//构造UDP数据包
UDPPacket p=new UDPPacket(sourPort,destPort);
p.setIPv4Parameter(0,false,false,false,0,false,false,false,0, 1010101,100,IPPacket.IPPROTO_UDP,sourIP,destIP);
p.data=contents.getBytes();
EthernetPacket ether=new EthernetPacket();
ether.frametype=EthernetPacket.ETHERTYPE_IP;
NetworkInterface[]devices=JpcapCaptor.getDeviceList
5.4 监听和发送
软件的监听功能通过捕获网络中的数据包来实现,网络数据包捕获代码如下:
发送UDP数据包的代码如下:
5.5 PING功能的实现
PING功能实现代码详见文献[3]。
6 结束语
本文介绍了Jpcap的使用方法、UDP数据包格式和PING工作原理,并采用JAVA语言,实现了一款窗口化的简单小程序,具备良好的用户操作界面,能够输出网卡信息、发送和接收PING数据包、发送自定义UDP数据包、监听网络数据包。在Winows 7系统下通过测试,运行良好。当然,若要对接收到的网络数据包的信息进行说明后输出,使得输出信息可读性更好,该程序还有待进一步改进。
[1]陈鹏.基于Jpcap 的TCP/IP 数据包捕获与发送[J].吉昌学院学报,2008(2):107-109.
[2]石慧慧.基于Jpcap 的网络流量采集监控系统研究与设计[D].南京:南京林业大学,2010.
[3]岳成刚,侯整风.用Jpcap 和Java 实现图形化的Ping 程序[J].淮北煤炭师范学院学报(自然科学版),2008,29(2):53-56.
[4]李钟尉,陈丹丹.Java 开发实战1200 例(第1 卷)[M].北京:清华大学出版社,2011.
Design and Realization of a Kind of Network Tool Software Based on Jpcap
Zou Ning
(Zhejiang Sub-bureau of East China RegionalAir Traffic Management Bureau of CAAC,Hangzhou 311207,Zhejiang)
tract】 This paper mainly introduces the designing procedure and realization of the network tool software based on Jpcap. The software is developed using JAVA language under the Windows system.Using this software,we can get the information of network card,capture and send packets.The Graphical User Interface(GUI)of the software is friendly.The information of the network card that we choose can be seen.The UDP packets that we defined can be sent.Moreover,the network connectivity can be tested through the method of PING.
words】 network;software;JAVA;Jpcap
TP393.08
A
1008-6609(2017)04-0047-03
邹宁(1987-),男,山东冠县人,硕士,助理工程师,研究方向为通信、计算机网络。