編程實現(xiàn)簡單的流量統(tǒng)計器_第1頁
編程實現(xiàn)簡單的流量統(tǒng)計器_第2頁
編程實現(xiàn)簡單的流量統(tǒng)計器_第3頁
編程實現(xiàn)簡單的流量統(tǒng)計器_第4頁
編程實現(xiàn)簡單的流量統(tǒng)計器_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

.z.目錄目錄1摘要21引言21.1課程設計目的21.2課程設計內(nèi)容31.3課程設計要求32設計原理32.1流量統(tǒng)計器的工作原理42.2JAVAJPCAP原理43設計步驟53.1相關必須程序包的安裝和解壓53.2Myeclipse下的運行74出現(xiàn)的問題及解決方法105結(jié)束語11參考文獻12程序附錄:13編程實現(xiàn)簡單的流量統(tǒng)計器學生**:指導老師:摘要:它是一個可以記錄訪客來源地址(包括ip、轉(zhuǎn)入地址、搜索引擎地址、關鍵詞、ie瀏覽器型號等),被訪問頁面地址(受訪頁面,停留時間、轉(zhuǎn)出地址等)的數(shù)字遞增的源代碼程序。通過使用JAVA中的JPCAP包設計并實現(xiàn)了一個流量統(tǒng)計系統(tǒng).關鍵詞:JAVA;JPCAP;編程;流量統(tǒng)計器。1引言計算機網(wǎng)絡是這個時代的基石,整個信息的流動和交換全部依托于這個龐大的網(wǎng)絡系統(tǒng)。如果這個信息網(wǎng)絡出現(xiàn)問題和故障,則會給社會、團體、個人等帶來很大的損失。有效的網(wǎng)絡管理不僅能夠保證網(wǎng)絡的正常運行,而且能夠有效地避免網(wǎng)絡故障給我們帶來的損失。在網(wǎng)絡管理過程中,網(wǎng)絡流量監(jiān)控是整個網(wǎng)絡管理的一個重要部分。對于一個網(wǎng)絡管理員,有效的網(wǎng)絡流量監(jiān)控不僅能夠讓網(wǎng)絡管理人員能夠及時了解網(wǎng)絡的運行狀態(tài),并且能夠?qū)W(wǎng)絡出現(xiàn)的問題作出及時調(diào)整和排除。1.1課程設計目的以基礎技能訓練和能力培養(yǎng)為主線,從培養(yǎng)學生動手能力,培養(yǎng)工程技術實際應用型人才入手,強化綜合性、實際性。目的是通過實習使學生掌握計算機網(wǎng)絡的實際開發(fā)所要掌握技術,培養(yǎng)其動手能力,觀察能力,分析和解決實際問題的能力,鞏固、加深理論課知識,增加感性認識,進一步加深對計算機網(wǎng)絡的理解,提高對網(wǎng)絡中所于奧實現(xiàn)的功能的系統(tǒng)設計能力和調(diào)試能力。1.2課程設計內(nèi)容1.利用原始套接字實現(xiàn)簡單的流量統(tǒng)計器。2.系統(tǒng)功能包括:2.1原始套接字與網(wǎng)卡邦定,并接收流經(jīng)網(wǎng)卡的所有數(shù)據(jù)包;2.2對數(shù)據(jù)包進行分析以獲得源IP地址和目的IP地址;2.3對數(shù)據(jù)包進行分析以獲得運輸層協(xié)議類型;2.4對數(shù)據(jù)包進行分析以獲得數(shù)據(jù)包的長度;2.5對本機發(fā)送、接收的各運輸層協(xié)議的數(shù)據(jù)流量進行統(tǒng)計,并顯示統(tǒng)計結(jié)果。1.3課程設計要求(1)按要求編寫課程設計報告書,能正確闡述設計結(jié)果。(2)通過課程設計培養(yǎng)學生嚴謹?shù)目茖W態(tài)度,認真的工作作風和團隊協(xié)作精神。(3)學會文獻檢索的基本方法和綜合運用文獻的能力。(4)在老師的指導下,要求每個學生獨立完成課程設計的全部內(nèi)容。2設計原理圖2-1流量統(tǒng)計器工作原理圖2.1流量統(tǒng)計器的工作原理源代碼放置在網(wǎng)頁中,每次有用戶瀏覽到這個網(wǎng)頁時就會觸發(fā)這個源代碼程序工作,然后以全程記錄所有信息,并以數(shù)字遞增的方式把結(jié)果統(tǒng)計出來傳到服務器,再到程序的服務器后臺進行具體分析并實時保存,這就是流量統(tǒng)計器的原理了。2.2JAVAJPCAP原理Java語言雖然在TCP/UDP傳輸方面給予了良好的定義,但對于網(wǎng)絡層以下的控制,卻是無能為力的。JPCAP擴展包彌補了這一點。JPCAP實際上并非一個真正去實現(xiàn)對數(shù)據(jù)鏈路層的控制,而是一個中間件,JPCAP調(diào)用wincap/libpcap,而給Java語言提供一個公共的接口,從而實現(xiàn)了平臺無關性。局域網(wǎng)監(jiān)聽利用的是所謂的“ARP欺騙”技術。在以前曾經(jīng)一段階段,局域網(wǎng)的布局是使用總線式(或集線式)結(jié)構(gòu),要到達監(jiān)聽只需要將網(wǎng)卡設定為混雜模式即可,但現(xiàn)在的局域網(wǎng)絡普遍采用的是交換式網(wǎng)絡,所以單純靠混雜模式來達到監(jiān)聽的方法已經(jīng)不可行了。所以為了達到監(jiān)聽的目的,我們需要“欺騙”路由器、“欺騙”交換機,即“ARP欺騙”技術。假設本機為A,監(jiān)聽目標為B。首先,偽造一個ARPREPLY包,數(shù)據(jù)鏈路層頭及ARP內(nèi)容部分的源MAC地址填入A的MAC地址,而源IP部分填入網(wǎng)關IP,目的地址填入B的MAC、IP,然后將這個包發(fā)送給B,而B接收到這個偽造的ARPREPLY包后,由于源IP為網(wǎng)關IP,于是在它的ARP緩存表里刷新了一項,將(網(wǎng)關IP,網(wǎng)關MAC)刷新成(網(wǎng)關IP,A的MAC)。而B要訪問外部的網(wǎng)都需要經(jīng)過網(wǎng)關,這時候這些要經(jīng)過網(wǎng)關的包就通通流到A的機器上來了。接著,再偽造一個ARPREPLY包,數(shù)據(jù)鏈路層頭及ARP內(nèi)容部分的源MAC地址填入A的MAC地址,而源IP部分填入B的IP,目的地址填入網(wǎng)關MAC、IP,然后將這個包發(fā)給網(wǎng)關,網(wǎng)關接收到這個偽造的ARPREPLY包后,由于源IP為B的IP,于是在它的ARP緩存表里刷新了一項,將(B的IP,B的MAC)刷新成(B的IP,A的MAC)。這時候外部傳給B的數(shù)據(jù)包經(jīng)過網(wǎng)關時,就通通轉(zhuǎn)發(fā)給A。這樣還只是攔截了B的數(shù)據(jù)包而已,B并不能上網(wǎng)——解決方法是將接收到的包,除了目的地址部分稍做修改,其它原封不動的再轉(zhuǎn)發(fā)出去,這樣就達到了監(jiān)聽的目的——在B不知不覺中瀏覽了B所有的對外數(shù)據(jù)包。3設計步驟3.1相關必須程序包的安裝和解壓1.JpcapSetup-0.7.e*e的安裝,雙擊即可。圖3-1JPCAP包的安裝2.WinPcap4.0.e*e的安裝,雙擊即可。圖3-2JPCAP包的安裝3.JpcapDumper-src.zip,解壓。圖3-3JPCAP包的安裝3.2Myeclipse下的運行1.運輸層TCP協(xié)議包this.packetCount++;

//如果截獲的包為TCP包

if(packetinstanceofjpcap.packet.TCPPacket){

this.tcpPacketCount++;

TCPPackettcp=(TCPPacket)packet;

this.tcppPacketLength+=tcp.len;

System.out

.println("================================================================================");

System.out.println("TCPPacket");

System.out.println("|——*此數(shù)據(jù)包的源IP地址:"+tcp.src_ip);

System.out.println("|——*此數(shù)據(jù)包的目的IP地址:"+tcp.dst_ip);

System.out.println("|——*此數(shù)據(jù)包的傳輸層協(xié)議類型:"+tocol+"(TCP)");

System.out.println("|——*此數(shù)據(jù)包的長度:"+tcp.len);圖3-2-1TCP協(xié)議包的統(tǒng)計結(jié)果圖3-2-2TCP協(xié)議包的統(tǒng)計結(jié)果2.運輸層UDP協(xié)議包{//如果截獲的包為UDP包

this.udpPacketCount++;

UDPPacketudp=(UDPPacket)packet;

this.udpPacketLength+=udp.len;

System.out

.println("================================================================================");

System.out.println("UDPPacket");

System.out.println("|——*此數(shù)據(jù)包的源IP地址:"+udp.src_ip);

System.out.println("|——*此數(shù)據(jù)包的目的IP地址:"+udp.dst_ip);

System.out.println("|——*此數(shù)據(jù)包的傳輸層協(xié)議類型:"+tocol+"(UDP)");

System.out.println("|——*此數(shù)據(jù)包的長度:"+udp.len);圖3-2-3UDP協(xié)議包的統(tǒng)計結(jié)果3.協(xié)議包總統(tǒng)計("截止到目前:");

("|捕獲到的運輸層協(xié)議包的總數(shù)為:"+this.packetCount);

("|——*捕獲到TCPPacket包的總數(shù)為:"+this.tcpPacketCount+",總數(shù)據(jù)包長度為"+this.tcppPacketLength);

("|——*捕獲到UDPPacket包的總數(shù)為:"+this.udpPacketCount+",總數(shù)據(jù)包長度為"+this.udpPacketLength);}圖3-2-4JPCAP下流量統(tǒng)計器的統(tǒng)計結(jié)果4出現(xiàn)的問題及解決方法本次課程設計由于自己對知識的掌握不足夠,所以出現(xiàn)了一些問題,不過在老師和同學的幫助下順利克服了這個難題。例如對JAVA語言不熟悉,和JPCAP包的不了解,導致程序運行不成功。在調(diào)試的過程中,對myeclipse軟件不夠熟練,以至于調(diào)試了很長時間才得出結(jié)果。因此,掌握好相關的知識,做課程設計的時候才能得心應手。5結(jié)束語課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。隨著科學技術發(fā)展的日新月異,計算機網(wǎng)絡技術已經(jīng)成為當今計算機應用中空前活躍的領域,在生活中可以說是無處不在。因此作為二十一世紀的大學生來說掌握計算機網(wǎng)絡技術是十分重要的。對于計算機網(wǎng)絡課程設計來說,我們大多數(shù)同學還都是一*白紙,同樣對于JAVA以及C++語言對于我們來說同樣比較陌生,但是通過大家不懈的努力,從不知道變?yōu)橹?,從簡單操作到熟練運用,大家都付出了相應的心血。雖然,在計算機網(wǎng)絡這塊領域上面我們還只是入門級別,但是我相信通過此次計算機網(wǎng)絡課程設計的學習,大大增加了同學們的動手能力和思考能力,為我們今后步入社會打下了堅實的基礎。通過理論學習到實際應用,這次的計算機網(wǎng)絡課程設計讓我們切身體會到了什么才是學以致用。由于是第一次做計算機網(wǎng)絡課程設計,在設計之中也不免遇到了種種問題和困難,這樣才能讓我自己發(fā)現(xiàn)自己的不足之處,才能激發(fā)自己學習的樂趣,才能讓自己在更遠的學習道路上處于不敗之地。參考文獻[1]周明天,汪文勇.TCP/IP網(wǎng)絡技術原理與技術[M].:清華大學出社版社.[2][美]RogersCadenhead.Java編程入門經(jīng)典.梅興文譯.第4版.:人民郵電,2007[3]陳軼.姚曉昆編著.Java程序設計實驗指導.:清華大學,2006[4]計算機網(wǎng)絡技術,*明新莫林主編,**大學.程序附錄:TrafficStatictics.javapackage.socket.lzf;importjava.io.IOE*ception;importjpcap.JpcapCaptor;

importjpcap.NetworkInterface;publicclassTrafficStatictics{

privatestaticTrafficStaticticsts;

publicstaticvoidmain(String[]args){

//啟動統(tǒng)計線程

TrafficStatictics.ins();

}

publicsynchronizedstaticTrafficStaticticsins(){

if(null==ts){

TrafficStaticticsts=newTrafficStatictics();

ts.init();

}

returnts;

}

publicvoidinit(){

//獲取本機上的網(wǎng)絡接口對象

finalNetworkInterface[]devices=JpcapCaptor.getDeviceList();

for(inti=0;i<devices.length;i++){

NetworkInterfaceni=devices[i];

//大于零時為有效地址;不抓本機地址

if(ni.addresses.length>0){

//一個網(wǎng)卡可能有多個地址,只獲取第一個

Stringaddr=ni.addresses[0].address.toString();

try{

//創(chuàng)建卡口上的抓取對象

JpcapCaptorjpcap=JpcapCaptor.openDevice(ni,2000,true,

20);

//創(chuàng)建對應的抓取線程并啟動

LoopPacketThreadlpt=newLoopPacketThread(jpcap,addr);

lpt.start();

System.out.println(addr+"上的采集線程已啟動?。。?);

}catch(IOE*ceptione){

e.printStackTrace();

System.out.println("抓取數(shù)據(jù)包時出現(xiàn)異常!!!");

}

}

}

}}

==============================================================================================·LoopPacketThread.javapackage.socket.lzf;importjpcap.JpcapCaptor;publicclassLoopPacketThreade*tendsThread{

privateJpcapCaptorjpcap=null;

privateStringipAddr="";

publicLoopPacketThread(JpcapCaptorjpcap,StringipAddr){

this.jpcap=jpcap;

this.ipAddr=ipAddr;

}

//-1表示永久抓包

publicvoidrun(){

this.jpcap.loopPacket(-1,newReceivePacket(this.ipAddr));

}

}

==============================================================================================·ReceivePacket.javapackage.socket.lzf;importjava.te*t.SimpleDateFormat;

importjava.util.Date;importjpcap.PacketReceiver;

importjpcap.packet.Packet;

importjpcap.packet.TCPPacket;

importjpcap.packet.UDPPacket;publicclassReceivePacketimplementsPacketReceiver{

privateStringipAddr="";

privatestaticintpacketCount=0;

privatestaticinttcpPacketCount=0;

privatestaticintudpPacketCount=0;

privatestaticinttcppPacketLength=0;

privatestaticintudpPacketLength=0;

publicReceivePacket(StringipAddr){

this.ipAddr=ipAddr;

}

publicvoidreceivePacket(Packetpacket){

this.packetCount++;

//如果截獲的包為TCP包

if(packetinstanceofjpcap.packet.TCPPacket){

this.tcpPacketCount++;

TCPPackettcp=(TCPPacket)packet;

this.tcppPacketLength+=tcp.len;

System.out

.println("================================================================================");

System.out.println("TCPPacket");

System.out.println("|——*此數(shù)據(jù)包的源IP地址:"+tcp.src_ip);

System.out.println("|——*此數(shù)據(jù)包的目的IP地址:"+tcp.dst_ip);

System.out.println("|——*此數(shù)據(jù)包的傳輸層協(xié)議類型:"+tocol+"(TCP)");

System.out.println("|——*此數(shù)據(jù)包的長度:"+tcp.len);

}elseif(packetinstanceofjpcap.packet.UDPPacket){//如果截獲的包為UDP包

this.udpPacketCount++;

UDPPacketudp=(UDPPacket)packet;

this.udpPacketLength+=udp.len;

System.out

.println("================================================================================");

System.out.println("UDPPacket");

System.ou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論