鄒寧
(中國民用航空華東地區(qū)空中交通管理局浙江分局,浙江 杭州 311207)
一款基于Jpcap的網(wǎng)絡(luò)工具軟件的設(shè)計(jì)與實(shí)現(xiàn)
鄒寧
(中國民用航空華東地區(qū)空中交通管理局浙江分局,浙江 杭州 311207)
介紹了一款基于Jp c a p的網(wǎng)絡(luò)工具軟件的設(shè)計(jì)與實(shí)現(xiàn)。該軟件在W i n d o w s平臺(tái)下開發(fā),采用JA VA語言,使用Jp c a p獲得網(wǎng)卡信息、捕獲數(shù)據(jù)包和發(fā)送數(shù)據(jù)包。該軟件具有良好的用戶操作界面,可以選擇并顯示網(wǎng)卡信息、發(fā)送自定義U D P數(shù)據(jù)包、通過PING測(cè)試網(wǎng)絡(luò)連通性。
網(wǎng)絡(luò);軟件;JA VA;Jp c a p
隨著Internet技術(shù)的發(fā)展,網(wǎng)絡(luò)世界對(duì)人們的生活和工作產(chǎn)生了越來越重要的作用,而網(wǎng)絡(luò)中的安全問題也越來越嚴(yán)重,因此網(wǎng)絡(luò)分析和監(jiān)控軟件也變得越來越重要。Jpcap是一種網(wǎng)絡(luò)數(shù)據(jù)包處理開發(fā)庫,它為網(wǎng)絡(luò)分析和監(jiān)控軟件的開發(fā)提供了支持。Jpcap是JAVA的一個(gè)中間件,它給JAVA語言提供了一個(gè)公共接口。利用Jpcap可以捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)的監(jiān)控和分析;也可以將自定義的數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)。本文利用Jpcap和JAVA語言實(shí)現(xiàn)了一款網(wǎng)絡(luò)工具軟件的開發(fā),軟件具有良好的用戶操作界面,通過該軟件,可以向網(wǎng)絡(luò)發(fā)送自定義UDP數(shù)據(jù)包、捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包和發(fā)送ICMP數(shù)據(jù)包測(cè)試網(wǎng)絡(luò)連通性。
2.1 Jpcap簡(jiǎn)介
Jpcap是一個(gè)JAVA類庫包,為發(fā)送、捕獲網(wǎng)絡(luò)數(shù)據(jù)包提供一個(gè)公共的JAVA接口,實(shí)現(xiàn)了平臺(tái)無關(guān)性。它是JAVA的一個(gè)中間件,不直接對(duì)數(shù)據(jù)鏈路層進(jìn)行控制,它調(diào)用winpcap/libpcap。目前Jpcap的最新版本為Jpcap 0.7版,它支持windows、unix、linux等系統(tǒng),并且支持TCP、UDP、IPv4、IPv6、Ethernet、ARP/RARP等協(xié)議[1]。
2.2 JPcap類介紹
Jpcap類庫共有13個(gè)類,以及一個(gè)包處理接口,JAVA應(yīng)用程序通過調(diào)用這些Jpcap類庫和接口,就能實(shí)現(xiàn)對(duì)IP數(shù)據(jù)包的捕獲、過濾和保存的功能[1]。它們分別為 Jpcap、JpcapSender、JpcapWriter、Packet、TCPPacket、UDPPacket、IPPacket、IPv6Option、IPAddress、ARPPacket、ICMPPacket、EthernetPacket、DatalinkPacket類以及JpcapHandler接口。
2.2.1 查看網(wǎng)卡屬性
查看網(wǎng)卡屬性用到Jpcap中的NetworkInterface、Jpcap-Captor類。
class jpcap.NetworkInterface:這個(gè)類中包含了一些網(wǎng)絡(luò)接口信息;
class jpcap.JpcapCaptor:這個(gè)類用來從網(wǎng)絡(luò)中捕獲或讀取文件中的數(shù)據(jù)包。
2.2.2 發(fā)送數(shù)據(jù)包
發(fā)送數(shù)據(jù)包用到Jpcap中的JpcapSender、JpcapCaptor類。
class jpcap.JpcapSender:這個(gè)類用來發(fā)送數(shù)據(jù)包;
發(fā)送數(shù)據(jù)包需要的方法:
jpcap.JpcapCaptor.getDeviceList():該函數(shù)用來獲得網(wǎng)卡列表;
jpcap.JpcapCaptor.openDevice (NetworkInterface interface,int snaplen,boolean promisc,int to_ms):這是一個(gè)重要的函數(shù),它有四個(gè)參數(shù):即將打開的設(shè)備名、從設(shè)備上一次讀取的最大字節(jié)數(shù)、說明是否將網(wǎng)卡設(shè)為混雜模式、以后調(diào)processPacket()或者loopPacket()函數(shù)時(shí)用到的超時(shí)值;
jpcap.JpcapSender.sendPacket(Packet packet):該函數(shù)用來發(fā)送定義好的數(shù)據(jù)包。
2.2.3 接收數(shù)據(jù)包
接收數(shù)據(jù)包用到Jpcap中的JpcapCaptor類。
接收數(shù)據(jù)包需要的方法:
jpcap.JpcapCaptor.getDeviceList():該函數(shù)用來獲得網(wǎng)卡列表;
jpcap.JpcapCaptor.openDevice (NetworkInterface intrface,int snaplen,boolean promisc,int to_ms):該函數(shù)有四個(gè)參數(shù),分別為:即將打開的設(shè)備名、上次從設(shè)備讀取的最大字節(jié)數(shù)、是否將網(wǎng)卡設(shè)為混雜模式、調(diào)用processPacket()或loopPacket()函數(shù)時(shí)用到的超時(shí)值。使用時(shí),首先要打開網(wǎng)絡(luò)適配器,將網(wǎng)卡設(shè)置為混雜工作模式,使網(wǎng)卡可以接收來自網(wǎng)絡(luò)的所有的數(shù)據(jù)包[2];
jpcap.JpcapCaptor.getPacket():捕獲單個(gè)數(shù)據(jù)包;
jpcap.JpcapCaptor.loopPacket(int count,PacketReceiver handler):持續(xù)捕獲指定數(shù)目的數(shù)據(jù)包;
jpcap.JpcapCaptor.processPacket(int count,PacketReceiver handler):持續(xù)捕獲指定數(shù)目的數(shù)據(jù)包,但不同于loopPacket(int count,PacketReceiver handler),當(dāng)超時(shí)后,即使沒有捕獲到數(shù)據(jù)包,該函數(shù)也會(huì)返回。
用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是一種無連接的不可靠的運(yùn)輸層協(xié)議,具有進(jìn)程到進(jìn)程的通信功能,但無法確保數(shù)據(jù)包到達(dá)目的主機(jī)。圖1給出了用戶數(shù)據(jù)報(bào)(UDP分組)的格式。
圖1 用戶數(shù)據(jù)報(bào)的格式
PING程序通過發(fā)送ICMP回顯請(qǐng)求(ECHO_REQUEST)報(bào)文給目標(biāo)設(shè)備,并等待ICMP回顯應(yīng)答(ECHO_REPLY)報(bào)文[3]來測(cè)試網(wǎng)絡(luò)連通性。Internet控制報(bào)文協(xié)議(Internet Control Message Protocol)是網(wǎng)絡(luò)層的一個(gè)協(xié)議,ICMP報(bào)文被包裝成IP數(shù)據(jù)包。設(shè)備可以通過ICMP協(xié)議報(bào)告錯(cuò)誤并交換相關(guān)的狀態(tài)信息。
5.1 軟件結(jié)構(gòu)
該軟件分為五大模塊:初始化模塊、輸出網(wǎng)卡信息模塊、PING模塊、發(fā)送UDP數(shù)據(jù)包模塊、接收模塊。初始化模塊用來顯示軟件界面和用戶配置數(shù)據(jù)的導(dǎo)入,輸出網(wǎng)卡信息模塊用來輸出相關(guān)網(wǎng)卡的信息,PING模塊用來發(fā)送和接收ICMP數(shù)據(jù)包,發(fā)送UDP數(shù)據(jù)包模塊用來發(fā)送用戶自定義的UDP數(shù)據(jù)包,接收模塊用來接收網(wǎng)絡(luò)數(shù)據(jù)包并輸出數(shù)據(jù)包信息(圖2)。
圖2 軟件結(jié)構(gòu)
5.2 程序流程圖
首先對(duì)程序進(jìn)行初始化,顯示用戶界面,用戶選擇相應(yīng)網(wǎng)卡,并輸入自定義數(shù)據(jù)信息,若初始化失敗則返回并輸出出錯(cuò)信息。若初始化成功,用戶選擇相應(yīng)功能模塊,實(shí)現(xiàn)相應(yīng)功能并返回(圖3)。
圖3 程序流程圖
5.3 UDP數(shù)據(jù)包的設(shè)置
UDP數(shù)據(jù)包設(shè)置代碼如下:
public UDPPacket proUDPPacket(int sourPort,int dest-Port,InetAddress sourIP,InetAddress destIP,String contents){
//構(gòu)造UDP數(shù)據(jù)包
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 監(jiān)聽和發(fā)送
軟件的監(jiān)聽功能通過捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包來實(shí)現(xiàn),網(wǎng)絡(luò)數(shù)據(jù)包捕獲代碼如下:
發(fā)送UDP數(shù)據(jù)包的代碼如下:
5.5 PING功能的實(shí)現(xiàn)
PING功能實(shí)現(xiàn)代碼詳見文獻(xiàn)[3]。
本文介紹了Jpcap的使用方法、UDP數(shù)據(jù)包格式和PING工作原理,并采用JAVA語言,實(shí)現(xiàn)了一款窗口化的簡(jiǎn)單小程序,具備良好的用戶操作界面,能夠輸出網(wǎng)卡信息、發(fā)送和接收PING數(shù)據(jù)包、發(fā)送自定義UDP數(shù)據(jù)包、監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)包。在Winows 7系統(tǒng)下通過測(cè)試,運(yùn)行良好。當(dāng)然,若要對(duì)接收到的網(wǎng)絡(luò)數(shù)據(jù)包的信息進(jìn)行說明后輸出,使得輸出信息可讀性更好,該程序還有待進(jìn)一步改進(jìn)。
[1]陳鵬.基于Jpcap 的TCP/IP 數(shù)據(jù)包捕獲與發(fā)送[J].吉昌學(xué)院學(xué)報(bào),2008(2):107-109.
[2]石慧慧.基于Jpcap 的網(wǎng)絡(luò)流量采集監(jiān)控系統(tǒng)研究與設(shè)計(jì)[D].南京:南京林業(yè)大學(xué),2010.
[3]岳成剛,侯整風(fēng).用Jpcap 和Java 實(shí)現(xiàn)圖形化的Ping 程序[J].淮北煤炭師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2008,29(2):53-56.
[4]李鐘尉,陳丹丹.Java 開發(fā)實(shí)戰(zhàn)1200 例(第1 卷)[M].北京:清華大學(xué)出版社,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-),男,山東冠縣人,碩士,助理工程師,研究方向?yàn)橥ㄐ?、?jì)算機(jī)網(wǎng)絡(luò)。