計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中南大學(xué)課程設(shè)計(jì)報(bào)告課程:計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)題目: 基于 Winpcap 的網(wǎng)絡(luò)流量統(tǒng)計(jì)分析指導(dǎo)教師:張偉目錄第一章 總體設(shè)計(jì)一、實(shí)體類設(shè)計(jì) P3二、功能類設(shè)計(jì) P3三、界面設(shè)計(jì) P3第二章 詳細(xì)設(shè)計(jì)一、實(shí)體類實(shí)現(xiàn) P4二、功能類實(shí)現(xiàn) P4三、界面實(shí)現(xiàn) P5第三章 源代碼清單及說明一、P7二、P9三、P9四、P13第四章 運(yùn)行結(jié)果 P19第五章 心得體會(huì) P21第一章 總體設(shè)計(jì)一、實(shí)體類設(shè)計(jì)TCP UPD ICMP、ARP廣播數(shù)據(jù)包五個(gè)包的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)二 功能類設(shè)計(jì)(1)網(wǎng)卡獲取(2)包的抓捕(3)包的處理三 界面設(shè)計(jì)(1)布局(2)按鈕功能連接第二章 第二章 詳細(xì)設(shè)計(jì)實(shí)體類實(shí)現(xiàn)TCP UPD

2、 ICMP、ARP廣播數(shù)據(jù)包五個(gè)包的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。本程序采用Java編寫,基于win 10pcap。WinlOpcap是winpcap在win 10系統(tǒng)上的適用版本。Java 對(duì)于winpcap使用jnetpcap 進(jìn)行支持。對(duì)于 TCP UPD ICMP ARP廣播數(shù)據(jù)包五種類型的包,在 jnetpcap的jar包中大部分已經(jīng)封裝好了相關(guān)的實(shí)體類型。對(duì)應(yīng)如下:ARP實(shí)體類:UPD實(shí)體類:IP實(shí)體類:TCP實(shí)體類:UDP實(shí)體類:而對(duì)于其中的廣播數(shù)據(jù)包,其判斷我利用捕獲到的IP包的目的地址進(jìn)行判斷,若其目的地址為,則認(rèn)為其為廣播數(shù)據(jù)包。|二、功能類實(shí)現(xiàn)(1 )網(wǎng)卡獲取電腦上的包的發(fā)送與接受都得通

3、過網(wǎng)卡來進(jìn)行,所以為了完成局域網(wǎng)數(shù)據(jù)包的捕獲和統(tǒng)計(jì), 我首先要做的是獲取到電腦上的網(wǎng)卡列表,然后選擇一個(gè)網(wǎng)卡進(jìn)行包的捕獲。而相關(guān)代碼在jn etpcap的官網(wǎng)的示例代碼1中可以找到,從中可以學(xué)習(xí)到的是 jn etpcap的各種使用方法。在我電腦上可以捕獲到三個(gè)網(wǎng)卡,一個(gè)是本機(jī)自身的物理網(wǎng)卡,另外兩個(gè)是虛擬機(jī)模擬出的虛擬網(wǎng)卡。(2 )包的抓捕Jn etpcap中包的抓捕也是有著固定的格式的,這在官網(wǎng)的示例代碼中也是可以找到的,只要設(shè)置好相關(guān)的參數(shù),就可以進(jìn)行抓捕具體方法如下,利用Pcap對(duì)象的loop方法。就是實(shí)例化一個(gè) Pcap對(duì)象,然后調(diào)用其loop方法。 第一個(gè)參數(shù)arg0代表循環(huán)次數(shù),第

4、二個(gè)參數(shù)就是傳入一個(gè)PcapPaketHandler或其子類的對(duì)象,這個(gè)對(duì)象類型是要由我們自己編寫的對(duì)包處理的方法。(3 )包的處理在這里對(duì)捕獲的包的處理我是編寫了一個(gè)PcapPacketHa ndler的子類,然后重寫了nextPacket()方法。在這個(gè)方法里我把捕獲到的包當(dāng)作參數(shù)傳遞個(gè)具體的處理方法(packet )。(packet )方法是由我自己編寫的。handlePacket 是packetMatch的一個(gè)靜態(tài)方法,可以直接調(diào)用。在這個(gè)方法里面,它會(huì)把捕獲到的包的包頭和TCP UPD ICMR ARR廣播數(shù)據(jù)包五種類型的包的包頭進(jìn)行一一比較,以確認(rèn)是否抓到了了相對(duì)應(yīng)的包。這兒還用到

5、的就是 jnetpcap 的內(nèi)部的一個(gè)方法,就是 (arg0),通過在 arg0傳入已在jnetpcap 里封裝好的包的類型的實(shí)例,可以很好的判斷該包是屬于什么包類型的,是TCP UPD ICMP ARP還是廣播數(shù)據(jù)包。然后內(nèi)部對(duì)于各種包的信息的輸出也有很好的支持,可以直接使用相應(yīng)的toString 方法,就可以輸出各種相關(guān)信息。(4)網(wǎng)絡(luò)流量統(tǒng)計(jì)對(duì)于各個(gè)捕獲到的包,分別針對(duì)各種類型的包設(shè)計(jì)了一個(gè)Double變量用于統(tǒng)計(jì)其傳送過來相應(yīng)包頭的大小,并在停止抓包后將統(tǒng)計(jì)的數(shù)據(jù)輸出在最下方的TextArea里面。三、界面實(shí)現(xiàn)本程序在設(shè)計(jì) GUI時(shí)使用了 Java的一個(gè)很好的插件 WindowBuil

6、der 。(1)布局一開始使用Border Layout布局,安排好各個(gè)按鈕位置, 文本框位置。后來采用Absolute layout , 并將窗口大小固定化。在布局的最上方是一個(gè) JToolBar 的實(shí)例對(duì)象,其中放置有選擇網(wǎng)卡、開始抓包、停止抓包、清 空記錄等四個(gè)選項(xiàng),中間是兩個(gè)帶滾動(dòng)條的多行文本框,左邊的用于顯示捕獲的包的列表,右邊用于 顯示左邊的我們選中的包的具體信息。最下方會(huì)在停止抓包按鈕生效后輸出總的抓包情況。 (2)按鈕功能連接在布局的最上方是一個(gè) JToolBar 的實(shí)例對(duì)象,其中放置有選擇網(wǎng)卡、開始抓包、停止抓包、清 空記錄等四個(gè)選項(xiàng),其中選擇網(wǎng)卡的功能具體由JComboBo

7、x(多文本選擇框)上的選項(xiàng)決定,這個(gè)多文本選擇框監(jiān)聽著 網(wǎng)卡獲取的方法,它會(huì)從該方法獲得一個(gè)網(wǎng)卡列表,然后將其文本輸出。開始抓包的方法所對(duì)應(yīng)的事件是抓包的事件, 并且該抓包事件是個(gè)并發(fā)的進(jìn)程。 因?yàn)槿绻粚⑵?設(shè)置為并發(fā)進(jìn)程,其會(huì)使其它事件一直阻塞,甚至連停止抓包都做不到。停止抓包的事件其實(shí)是改變 了開始抓包中的一個(gè)標(biāo)志位,讓其為假。該標(biāo)志為為真,抓包程序會(huì)一直進(jìn)行,該標(biāo)志為為假,抓包 停止。下方兩個(gè)文本框,左邊的文本框監(jiān)聽的是開始抓包這個(gè)事件,當(dāng)這個(gè)事件開始,這個(gè)事件會(huì)向文 本框傳輸捕獲到的包的列表, 然后讓其顯示。 而右邊的文本框監(jiān)聽的是左邊文本框我們選中的內(nèi)容的 相應(yīng)事件。因?yàn)閷?duì)于我們捕

8、獲到的包我進(jìn)行了編號(hào),當(dāng)我們?cè)谧筮叺奈谋究蜻x中了一個(gè)包之后,左邊 的文本框?qū)?yīng)的包的序號(hào)會(huì)被右邊的文本框獲取, 用于在一個(gè)列表中根據(jù)序號(hào)查找到相對(duì)應(yīng)的包的詳 細(xì)內(nèi)容,然后將其輸出。統(tǒng)計(jì)功能的實(shí)現(xiàn)是在每個(gè)包的具體處理時(shí), 在處理包的方法類中已經(jīng)有定義好幾個(gè)靜態(tài)變量用于 計(jì)數(shù),每個(gè)包具體處理時(shí), 將相對(duì)應(yīng)的包類型數(shù)量加一即可。 還定義了其它的變量用于統(tǒng)計(jì)流量大小, 也是在每個(gè)包具體處理時(shí),將相對(duì)應(yīng)的包的大小加到相對(duì)應(yīng)的靜態(tài)變量上即可。第三章 源代碼清單及說明etDescription();*/ppend(ipInt24)&0xff).append(.).append(ipInt16)&0xff).

9、append(.).append(ipInt8)&0xff).append(.).append(ipInt&0xff).toString();*/public static void main(String args) (new Runnable() public void run() try Windows frame = new Windows(); (true); catch (Exception e) (););* Create the frame.*/public Windows() setTitle(u6293u5305); setDefaultCloseOperation; se

10、tBounds(100, 100, 692, 477); contentPane = new JPanel(); (new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); (null);(false);JToolBar toolBar = new JToolBar();(5, 5, 666, 23);(toolBar);JButton button = new JButton(u9009u62E9u7F51u5361); (button);final JComboBox comboBox = new JComboBox();(new

11、ActionListener() public void actionPerformed(ActionEvent e) String net=(String)(); ArrayList alldevs=(); int i=0;for (PcapIf device : alldevs) if()=i; (); i+;);(new ItemListener() public void itemStateChanged(ItemEvent arg0) );(comboBox);JButton button_1 = new JButton(u5F00u59CBu6293u5305); (action_

12、1);(button_1);JButton button_2 = new JButton(停止抓包 );(action_2);(new ActionListener() public void actionPerformed(ActionEvent arg0) );(button_2);JButton button_3 = new JButton(u6E05u7A7Au8BB0u5F55);(new ActionListener() public void actionPerformed(ActionEvent e) );(action_3);(button_3);Border brd=(1,

13、 1, 2, 2, ;(brd);(new ListSelectionListener()public void valueChanged(ListSelectionEvent arg0) etDescription();private class SwingAction_1 extends AbstractAction public SwingAction_1() putValue(NAME, 開始抓包 ); putValue(SHORT_DESCRIPTION, Some short description);public void actionPerformed(ActionEvent

14、e) tart();private class SwingAction_2 extends AbstractAction public SwingAction_2() putValue(NAME, 停止抓包 ); putValue(SHORT_DESCRIPTION, Some short description);public void actionPerformed(ActionEvent e) ();();String message=Tcp:+包 +KB +Udp:+ 包 +KB +n+ Icmp:+ 包 +KB + Arp:+ 包 +KB +n+ 廣播數(shù)據(jù)包 + 包+ +KB + 總

15、流量: +MB;(message);private class SwingAction_3 extends AbstractAction public SwingAction_3() putValue(NAME, 清空記錄 ); putValue(SHORT_DESCRIPTION, Some short description);public void actionPerformed(ActionEvent e) ();第四章 運(yùn)行結(jié)果第五章 心得體會(huì)通過這次實(shí)驗(yàn)我對(duì)于 TCP UPD ICMP ARR廣播數(shù)據(jù)包等包的結(jié)構(gòu)有了更好的認(rèn)識(shí)。對(duì)于電腦 上底層的發(fā)包與抓包也有了一定的認(rèn)識(shí)。 然后就

16、是對(duì)用 Eclipse 進(jìn)行編寫 Java 程序有了更深的體會(huì)。Java 是一個(gè)成熟的語言, Eclipse 是一個(gè)比較完善的工具, 對(duì)于各個(gè)方面知識(shí)的應(yīng)用編寫都有一 定的基礎(chǔ)支持。例如這次編寫, Eclips 就通過 jnetpcap 很好的銜接了 winpcap 的借口功能。另外, 在界面編寫上, windowbuilder 也非常好用。這是一種可視化的編程,可以直接拖拉各種部件,在容 器內(nèi)進(jìn)行布局。然后對(duì)于各個(gè)部件事件的添加也是很方便,這加快了程序的開發(fā)過程。嗯,這次的實(shí)驗(yàn)對(duì)于我來說不是很難,感覺這主要是前人種樹,后人乘涼。很多東西都已經(jīng)有了 很完善的工具和結(jié)構(gòu)。 而現(xiàn)階段我所能學(xué)習(xí)的感覺無非是對(duì)于各種語言工具各種插件 框架的使用,對(duì)于這些前人們編寫的東西掌握到一定的程度,以方便以后自行開發(fā)自己的一些工具。覺得課設(shè)就是一個(gè)學(xué)習(xí)過程。我在前人走過的路上學(xué)習(xí)著,避免走太多的彎路。在另一方面,也 在路上不斷積累,好在以后可以厚

溫馨提示

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

評(píng)論

0/150

提交評(píng)論