鄒寧
(中國民用航空華東地區(qū)空中交通管理局浙江分局,浙江 杭州 311207)
一款基于Jpcap的網絡工具軟件的設計與實現
鄒寧
(中國民用航空華東地區(qū)空中交通管理局浙江分局,浙江 杭州 311207)
介紹了一款基于Jp c a p的網絡工具軟件的設計與實現。該軟件在W i n d o w s平臺下開發(fā),采用JA VA語言,使用Jp c a p獲得網卡信息、捕獲數據包和發(fā)送數據包。該軟件具有良好的用戶操作界面,可以選擇并顯示網卡信息、發(fā)送自定義U D P數據包、通過PING測試網絡連通性。
網絡;軟件;JA VA;Jp c a p
隨著Internet技術的發(fā)展,網絡世界對人們的生活和工作產生了越來越重要的作用,而網絡中的安全問題也越來越嚴重,因此網絡分析和監(jiān)控軟件也變得越來越重要。Jpcap是一種網絡數據包處理開發(fā)庫,它為網絡分析和監(jiān)控軟件的開發(fā)提供了支持。Jpcap是JAVA的一個中間件,它給JAVA語言提供了一個公共接口。利用Jpcap可以捕獲網絡中的數據包,實現對網絡的監(jiān)控和分析;也可以將自定義的數據包發(fā)送到網絡。本文利用Jpcap和JAVA語言實現了一款網絡工具軟件的開發(fā),軟件具有良好的用戶操作界面,通過該軟件,可以向網絡發(fā)送自定義UDP數據包、捕獲網絡中的數據包和發(fā)送ICMP數據包測試網絡連通性。
2.1 Jpcap簡介
Jpcap是一個JAVA類庫包,為發(fā)送、捕獲網絡數據包提供一個公共的JAVA接口,實現了平臺無關性。它是JAVA的一個中間件,不直接對數據鏈路層進行控制,它調用winpcap/libpcap。目前Jpcap的最新版本為Jpcap 0.7版,它支持windows、unix、linux等系統(tǒng),并且支持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 發(fā)送數據包
發(fā)送數據包用到Jpcap中的JpcapSender、JpcapCaptor類。
class jpcap.JpcapSender:這個類用來發(fā)送數據包;
發(fā)送數據包需要的方法:
jpcap.JpcapCaptor.getDeviceList():該函數用來獲得網卡列表;
jpcap.JpcapCaptor.openDevice (NetworkInterface interface,int snaplen,boolean promisc,int to_ms):這是一個重要的函數,它有四個參數:即將打開的設備名、從設備上一次讀取的最大字節(jié)數、說明是否將網卡設為混雜模式、以后調processPacket()或者loopPacket()函數時用到的超時值;
jpcap.JpcapSender.sendPacket(Packet packet):該函數用來發(fā)送定義好的數據包。
2.2.3 接收數據包
接收數據包用到Jpcap中的JpcapCaptor類。
接收數據包需要的方法:
jpcap.JpcapCaptor.getDeviceList():該函數用來獲得網卡列表;
jpcap.JpcapCaptor.openDevice (NetworkInterface intrface,int snaplen,boolean promisc,int to_ms):該函數有四個參數,分別為:即將打開的設備名、上次從設備讀取的最大字節(jié)數、是否將網卡設為混雜模式、調用processPacket()或loopPacket()函數時用到的超時值。使用時,首先要打開網絡適配器,將網卡設置為混雜工作模式,使網卡可以接收來自網絡的所有的數據包[2];
jpcap.JpcapCaptor.getPacket():捕獲單個數據包;
jpcap.JpcapCaptor.loopPacket(int count,PacketReceiver handler):持續(xù)捕獲指定數目的數據包;
jpcap.JpcapCaptor.processPacket(int count,PacketReceiver handler):持續(xù)捕獲指定數目的數據包,但不同于loopPacket(int count,PacketReceiver handler),當超時后,即使沒有捕獲到數據包,該函數也會返回。
用戶數據報協議(UDP)是一種無連接的不可靠的運輸層協議,具有進程到進程的通信功能,但無法確保數據包到達目的主機。圖1給出了用戶數據報(UDP分組)的格式。

圖1 用戶數據報的格式
PING程序通過發(fā)送ICMP回顯請求(ECHO_REQUEST)報文給目標設備,并等待ICMP回顯應答(ECHO_REPLY)報文[3]來測試網絡連通性。Internet控制報文協議(Internet Control Message Protocol)是網絡層的一個協議,ICMP報文被包裝成IP數據包。設備可以通過ICMP協議報告錯誤并交換相關的狀態(tài)信息。
5.1 軟件結構
該軟件分為五大模塊:初始化模塊、輸出網卡信息模塊、PING模塊、發(fā)送UDP數據包模塊、接收模塊。初始化模塊用來顯示軟件界面和用戶配置數據的導入,輸出網卡信息模塊用來輸出相關網卡的信息,PING模塊用來發(fā)送和接收ICMP數據包,發(fā)送UDP數據包模塊用來發(fā)送用戶自定義的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 監(jiān)聽和發(fā)送
軟件的監(jiān)聽功能通過捕獲網絡中的數據包來實現,網絡數據包捕獲代碼如下:

發(fā)送UDP數據包的代碼如下:


5.5 PING功能的實現
PING功能實現代碼詳見文獻[3]。
本文介紹了Jpcap的使用方法、UDP數據包格式和PING工作原理,并采用JAVA語言,實現了一款窗口化的簡單小程序,具備良好的用戶操作界面,能夠輸出網卡信息、發(fā)送和接收PING數據包、發(fā)送自定義UDP數據包、監(jiān)聽網絡數據包。在Winows 7系統(tǒng)下通過測試,運行良好。當然,若要對接收到的網絡數據包的信息進行說明后輸出,使得輸出信息可讀性更好,該程序還有待進一步改進。
[1]陳鵬.基于Jpcap 的TCP/IP 數據包捕獲與發(fā)送[J].吉昌學院學報,2008(2):107-109.
[2]石慧慧.基于Jpcap 的網絡流量采集監(jiān)控系統(tǒng)研究與設計[D].南京:南京林業(yè)大學,2010.
[3]岳成剛,侯整風.用Jpcap 和Java 實現圖形化的Ping 程序[J].淮北煤炭師范學院學報(自然科學版),2008,29(2):53-56.
[4]李鐘尉,陳丹丹.Java 開發(fā)實戰(zhàn)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-),男,山東冠縣人,碩士,助理工程師,研究方向為通信、計算機網絡。