局域網(wǎng)抓包軟件_第1頁
局域網(wǎng)抓包軟件_第2頁
局域網(wǎng)抓包軟件_第3頁
局域網(wǎng)抓包軟件_第4頁
局域網(wǎng)抓包軟件_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、-作者xxxx-日期xxxx局域網(wǎng)抓包軟件【精品文檔】此程序是利用JPcap包,抓取通過本地網(wǎng)卡的數(shù)據(jù)幀,并分析各字段的程序。這是我的一個網(wǎng)絡(luò)課程設(shè)計,具體介紹在下面的實習(xí)報告中詳細(xì)講述,并附有源代碼不知道怎么上傳文件,所以直接粘貼過來了。 目錄第一章 設(shè)計目的、任務(wù)與要求 1.1設(shè)計的目的-31.2設(shè)計的任務(wù)與要求-3第二章 系統(tǒng)分析設(shè)計 2.1 系統(tǒng)分析-32.2 系統(tǒng)設(shè)計-8第三章 系統(tǒng)實現(xiàn) 3.1 實現(xiàn)過程-10 3.2 采用技術(shù)-11 3.3 結(jié)果界面-11 3.4 結(jié)果分析-16第四章 心得體會- 18參考文獻(xiàn)-19附錄-20第一章 設(shè)計目的、任務(wù)與要求1.1:設(shè)計的目的 計算機網(wǎng)

2、絡(luò)原理課程是計算機科學(xué)與技術(shù)專業(yè)的重要專業(yè)課程之一。隨著計算機網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和在當(dāng)今信息社會中的廣泛應(yīng)用,給計算機網(wǎng)絡(luò)課程的教學(xué)提出了新的更高的要求。計 算機網(wǎng)絡(luò)原理課程設(shè)計的目的與任務(wù)是為了使學(xué)生在課程學(xué)習(xí)的同時,通過在一個計算機網(wǎng)絡(luò)環(huán)境中的實際操作,鞏固計算機網(wǎng)絡(luò)原理課堂教學(xué)所講授網(wǎng)絡(luò)的基 本理論、基本概念和方法技術(shù),對現(xiàn)代計算機網(wǎng)絡(luò)的基本功能有一個初步的了解。為學(xué)生今后使用計算機網(wǎng)絡(luò)的理論和方法,開發(fā)大型、復(fù)雜的集成系統(tǒng),打下一個 堅實的基礎(chǔ)。 1.2:設(shè)計的任務(wù)與要求 本次實驗的要求在網(wǎng)絡(luò)環(huán)境,使用編程語言實現(xiàn)捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時

3、寫入日志文件。程序的具體要求如下: :在標(biāo)準(zhǔn)輸出和日志文件中寫入捕獲的IP包的版本、頭長度、服務(wù)類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標(biāo)識、分段標(biāo)志、分段偏移值、生存時間、上層協(xié)議類型、頭校驗和、源IP地址和目的IP地址等內(nèi)容。 :可擴展分析其他協(xié)議包。第二章 系統(tǒng)分析設(shè)計2.1:系統(tǒng)分析實現(xiàn)網(wǎng)絡(luò)抓包的方法有很多,下面介紹四種: :原始套接字 套接字是網(wǎng)絡(luò)應(yīng)用編程接口。應(yīng)用程序可以使用它進(jìn)行網(wǎng)絡(luò)通信而不需要知道底層發(fā)生的細(xì)節(jié)。有時需要自己生成一些定制的數(shù)據(jù)包或者功能并希望繞開Socket 提供的功能,原始套接字( Raw Socket) 滿足了這樣的要求。原始套接字能夠生成自己的數(shù)據(jù)報文, 包括報頭和數(shù)據(jù)

4、報本身的內(nèi)容。通過原始套接字, 可以更加自如地控制Windows 下的多種協(xié)議, 而且能夠?qū)W(wǎng)絡(luò)底層的傳輸機制進(jìn)行控制??梢杂迷继捉幼謥戆l(fā)送和接收IP 層以上的原始數(shù)據(jù)包, 如ICMP, TCP, UDP, 而且能夠?qū)W(wǎng)絡(luò)底層的傳輸機制進(jìn)行控制。Raw Socket 的作用主要有三個方面: ( 1) 接收發(fā)向本機的ICMP, IGMP 協(xié)議包, 或者發(fā)送這些協(xié)議包; ( 2) 接收發(fā)向本機的IP 包; ( 3) 發(fā)送自定義的IP 包。 :LibPca p 可以從http: / / ee. lbl. gov/ 找到并下載LibPcap, 它是一個廣泛應(yīng)用的系統(tǒng)抓包庫。LibPcap 是一種與系

5、統(tǒng)無關(guān), 采用分組捕獲機制的分組捕獲函數(shù)庫, 用于訪問數(shù)據(jù)鏈路層, 它在不同的平臺上采用統(tǒng)一的編程接口, 使用LibPcap 編寫的程序可自由的跨平臺使用。同時LibPcap 是一個獨立于系統(tǒng)接口的用戶級的抓包庫, 它為底層網(wǎng)絡(luò)監(jiān)聽提供了可移植框架。它的應(yīng)用包括網(wǎng)絡(luò)統(tǒng)計集合、安全監(jiān)聽、網(wǎng)絡(luò)調(diào)試等。 :WinPca p 可以從http: / /winPcap. polito. it / 找到WinPcap。WinPcap是LibPcap 的Windows 版本, 它是一個基于Win32 的捕獲數(shù)據(jù)包和網(wǎng)絡(luò)分析的體系結(jié)構(gòu), 它包括一個內(nèi)核級的包過濾器, 一個底層的動態(tài)鏈接庫( Packet. dl

6、l) , 一個高層并且與系統(tǒng)無關(guān)的庫( WPcap. dll, 基于LibPcap0. 6. 2 版本) 。WinPcap 是集成于Windows95, 98, ME, NT, 2000 和XP 操作系統(tǒng)的設(shè)備驅(qū)動程序, 它可以從網(wǎng)卡捕獲或者發(fā)送原始數(shù)據(jù), 同時能夠過濾并且存儲數(shù)據(jù)包。開發(fā)WinPcap 這個項目的目的在于為Win32 應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力。它提供了以下四項功能:( 1) 捕獲原始數(shù)據(jù)報, 包括共享網(wǎng)絡(luò)上各主機發(fā)送/ 接收的以及相互之間交換的數(shù)據(jù)報;( 2) 在數(shù)據(jù)報發(fā)往應(yīng)用程序之前, 按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報過濾掉;( 3) 在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報;(

7、4) 收集網(wǎng)絡(luò)通信過程中的統(tǒng)計信息。 :JP ca p可以從http: / / netresearch. ics. uci. edu / kfujii / jpcap / doc /index. html 找到JPcap。JPcap 是一個能夠捕獲、發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包的Java 類庫包。這個包用到了LibPcap 和原始套接字API。目前JPcap 在FreeBSD 3. x, Linux RedHat 6. 1, Solaris 和MicrosoftWindows 2000 /XP 系統(tǒng)上已經(jīng)做過測試, 并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP,

8、ICMPv4 協(xié)議。JPcap是一個Java 類集合, 它為網(wǎng)絡(luò)數(shù)據(jù)包的捕獲提供接口和系統(tǒng)支持。其最初版本是2000 年6 月發(fā)布的JPcap0. 01 版, 此后幾經(jīng)修改, 到2003 年4 月發(fā)布了最新的JPcap0.4 版。由于本程序采用Java編程語言,所以使用第四種方法,即JPca p來實現(xiàn)抓包?,F(xiàn)在選定了抓包工具,我們還得分析一下所獲包的結(jié)構(gòu),只有弄清楚結(jié)構(gòu),才能很好的分析捕獲包。我們知道,網(wǎng)絡(luò)軟件是由多個協(xié)議層次組成的,在每一層里面都有自己的數(shù)據(jù)封裝,以便實現(xiàn)每個層的功能。OSI參考模型中定義了7層,從低到高分別是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。TCP

9、/IP參考模型中定義得比較少:互聯(lián)網(wǎng)層(網(wǎng)絡(luò)層)、傳輸層、應(yīng)用層、主機至網(wǎng)絡(luò)層(空白,可以理解為跟OSI模型一致)。而且我們知道,高層協(xié)議整個協(xié)議包是封裝到低層協(xié)議的數(shù)據(jù)段中的,所以整體是一個嵌套的結(jié)構(gòu),如下圖所示:數(shù)據(jù)鏈路幀格式如下(以太幀):網(wǎng)絡(luò)層協(xié)議有IP、ICMP、ARP等:IP分為IPv4和IPv6,這里介紹IPv4IPv4協(xié)議格式如下:ICMP用于控制,每一種控制有獨特的格式,由于格式太多,這里不介紹,詳情可參考RFC792 - Internet Control Message Protocol。ARP協(xié)議格式如下:傳輸層協(xié)議有TCP、UDP:TCP協(xié)議格式如下:UDP協(xié)議格式如下

10、:基于TCP的應(yīng)用層協(xié)議主要有HTTP:HTTP協(xié)議格式如下(具體數(shù)據(jù)會不同,這里供參考):HTTP請求:GET 請求:POST請求:HTTP響應(yīng):基于UDP的應(yīng)用層協(xié)議主要有DNS:DNS協(xié)議格式如下:以上這些協(xié)議是本程序所能分析出來的,由于網(wǎng)絡(luò)協(xié)議有上千種,不可能都去分析,所以其他的協(xié)議在此忽略。既然找到抓包工具,弄清協(xié)議格式,現(xiàn)在就開始系統(tǒng)設(shè)計吧。2.2:系統(tǒng)設(shè)計環(huán)境搭建:設(shè)計少不了的一項工作就是環(huán)境搭建,以下是環(huán)境搭建的步驟:jre安裝(最好是最新版本jre6):Myeclipse或者Eclipse安裝:下載并安裝winpcap(可以下載最新版本)。:配置Jpcap路徑:這一步也是最重

11、要的一步。具體路徑為,把Jpcap文件夾下lib文件夾里的Jpcap.dll復(fù)制到"C:/Program Files/Java/jre1.6.0_07/bin"文件夾里面(復(fù)制到你機器JRE文件夾放到bin文件夾里面就可以了,其中JRE的版本一定要與Eclipse配置的版本一致),再把Jpcap文件夾下lib文件夾里的Jpcap.jar復(fù)制到"C:/Program Files/Java/jre1.6.0_07/lib/ext"文件夾里面(復(fù)制到你機器JRE文件夾->lib->ext放到ext文件夾里面就可以了)。:配置Eclipse的JRE環(huán)

12、境,(一定需要),選擇Window->preferences->Java->Installed JREs,在Installed JREs選擇框中選擇相應(yīng)的JRE版本,點Edit,選擇Add External JARs,選擇你的Jpcap.jar包("C:/Program Files/Java/jre1.6.0_07/lib/ext"文件夾里),在Finish就配置全部完成了。 在本程序中,采用圖形化界面,根據(jù)用戶的相關(guān)配置進(jìn)行抓包,具體過程參考下面實現(xiàn)過程。第三章 系統(tǒng)實現(xiàn)3.1:實現(xiàn)過程當(dāng)環(huán)境搭建好后,一起都會顯得很簡單了,這里說一下原理,在安裝winp

13、cap時,其實就是利用第三方編寫好的程序,他們已經(jīng)實現(xiàn)了底層和網(wǎng)卡的交互,數(shù)據(jù)捕獲,并把數(shù)據(jù)封裝好,然后對上層用戶提供API,現(xiàn)在我們就利用他們提供的API,即JPca p來處理他們封裝好的數(shù)據(jù)。所以在環(huán)境搭建中,必須安裝winpcap和導(dǎo)入JPca p庫函數(shù)。下面是獲取包的幾個關(guān)鍵步驟:獲得網(wǎng)卡接口通過調(diào)用JPca p庫中JpcapCaptor的靜態(tài)方法getDeviceList()得到網(wǎng)卡接口數(shù)組。 :獲得某個網(wǎng)卡接口的連接通過調(diào)用JPca p庫中JpcapCaptor的靜態(tài)方法openDevice()得到某個網(wǎng)卡接口的連接實例。 :調(diào)用實例的processPacket()開始抓包。:將抓

14、獲的包交給實例的receivePacket()方法進(jìn)行分析處理。以上就是整個抓包過程。當(dāng)然,在上面的那些方法中,都有一些特定的參數(shù),上面沒有給出,這些參數(shù)都是用于配置抓包的,程序采用圖形化界面,所以這些參數(shù)可以在界面上根據(jù)用戶的選擇,然后傳入相應(yīng)方法中,最終獲得用戶所需的信息。采用圖形化界面,要解決的一個問題就是界面的刷新,通常是后臺程序運行,產(chǎn)生結(jié)果,界面中要及時顯現(xiàn)變化,即界面內(nèi)容因后臺結(jié)果而變。在這個前臺(界面)和后臺都要兼顧的前提下,必須使用線程來解決這個問題,界面是根據(jù)后臺而變的,所以可以為界面分配較高優(yōu)先級,當(dāng)界面顯示內(nèi)容不再變化,程序才會去執(zhí)行較低優(yōu)先級的后臺抓包程序,而當(dāng)抓包結(jié)

15、果產(chǎn)生時,程序馬上又能調(diào)用較高優(yōu)先級的前臺程序顯示出來。 至此,前臺和后臺都能兼顧運行。這里要說明的一點是,由于采用線程抓包,所以所抓獲的包不是連續(xù)通過網(wǎng)卡的包,我們獲得的,只是某些時刻的包。3.2:采用技術(shù):JPca p庫函數(shù)運用:Swing組件運用:線程技術(shù)運用:托盤技術(shù)運用(托盤圖標(biāo),用于圖形化界面,沒有抓包方面的知識):文件操作技術(shù)運用(分析結(jié)果保存于文件和文件打開)3.3:結(jié)果界面 :開始界面(歡迎界面):菜單選項File菜單: Capture菜單: Tool菜單: Help菜單: :網(wǎng)卡信息:配置抓包:開始抓包:保存文件(自定義后綴為 .sto):打開以前保存的文件點擊打開后,會在

16、界面上顯示保存的結(jié)果:相關(guān)鏈接Wireshake 鏈接(本程序就是參考此程序的)注:要鏈接此程序,必須安裝wireshake于本地機器上,目錄為安裝默認(rèn)目錄。Check network card factory(網(wǎng)卡廠商查詢)鏈接注:通過此鏈接,可跳轉(zhuǎn)到國外的一個查詢網(wǎng)站,輸入前3位16進(jìn)制(即前24位二進(jìn)制)網(wǎng)卡地址查詢。:Help菜單注:點擊鏈接到JPCAP 的API,要想鏈接,必須把API的doc文檔放于E:/目錄下。:托盤注:當(dāng)點擊窗口最小化時,在電腦右下角顯示托盤圖標(biāo),雙擊圖標(biāo)恢復(fù)界面QQ圖標(biāo)左邊第一個為本程序的托盤圖標(biāo) 3.4:結(jié)果分析下面以一個以太幀的結(jié)果來分析產(chǎn)生結(jié)果-包分析-

17、Captured Length:805 byteLength of this Packet:805 byteHeader:Bdea768Length of Header:54 byteData:B1c0cd80Length of Data:751 byte-Ethernet頭部信息-src_mac:0:e0:b0:f8:65:8edst_mac:d8:5d:4c:1d:52:7aframetype:0x800-IP版本: 4 -Type of service:0Priprity:0Packet Length:791Identification:5730Don't Frag? false

18、More Frag? falseFrag Offset:0Time to Live:64Protocol:6 (TCP = 6; UDP = 17)Source address:/00Destination address:/46Options:null-TCP-Source Port:2434Destination Port:80Sequence Number:2037813051Acknowledge Number:2047245128URG:falseACK:truePSH:trueRST:falseSYN:falseFIN:falseWin

19、dow Size:46537Urgent Pointer:0Option:null-HTTP-GET / HTTP/1.1Accept: */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; 360SE)Host: Connection: Keep-AliveCookie: ALLYESSESSION1=4c201e0f6e31e; _ntes_nnid=d8379

20、38ce6aa32c1e7bd8b6b8ea9b518,0; _ntes_nuid=d837938ce6aa32c1e7bd8b6b8ea9b518; ntes_ucc=; NTES_UFC=5101000000000001101000000000000000000000000000000000000000000000; USERTRACK=83.1276908764822367; vjuids=96e8a39f.12205a57bb7.0.c45bac10feb66; vjlast=1245635247.1245635247.30; Province=0730; C

21、ity=0731; ALLYESID4=00100622094821301258115; _ntes_test_cookies=1245637579343; NTES_adText=2; locOfCh=south; theCity=57679; movnum=1; kksp2009622channeleventcookies=1 這是一個比較完整的以太幀,從上到下為低層包含高層的嵌套結(jié)構(gòu),每個協(xié)議都用分割線隔開,最初是整個包(以太幀)的信息。然后就是幀頭信息,幀頭里面按照幀的格式顯示,之后進(jìn)入IP頭部格式分析,各個字段也是按照IP格式給出,IP下面是TCP,TCP下面是HTTP等。結(jié)果一目了

22、然。第四章 心得體會在 獲得題目之初,我最初是想做網(wǎng)卡驅(qū)動的,因為我覺得假如能實現(xiàn)底層的驅(qū)動的話,能讓我更好的掌握相關(guān)網(wǎng)絡(luò)知識,而且對我以后的求職也會有所幫助,然而當(dāng)我 在網(wǎng)上找了相關(guān)資料一看的時候,所有的編程語言都是底層語言,比如C語言、匯編語言、C+之類,而我的C和匯編都僅僅是入門而已,C+更是沒有學(xué)過, 所以做不了網(wǎng)卡驅(qū)動了。剩下的網(wǎng)站編寫,我自己也寫過一些,覺得那個把相關(guān)網(wǎng)絡(luò)知識都封裝了,幾乎不會網(wǎng)絡(luò)知識的人也能完成。最終我選擇了IP抓包課題, 因為這個幾乎貫穿了我們所學(xué)的知識。開始我也不知道,做了之后我才發(fā)現(xiàn),要實現(xiàn)簡單的捕獲包,通過相關(guān)配置之后,只要不到百行代碼,然后我詢問了其他也

23、是做這個課題但是不是用Java的同學(xué),他們也說好簡單。我知道他們的簡單是什么意思,就是得到包而已。我覺得還是不簡單的,因為重頭戲在分析包的結(jié)構(gòu)中,所以我開始構(gòu)想,我能不能把常用的包都分析出來,而不僅僅是題目要求的IP分析,經(jīng)過相關(guān)的查詢之后,得到結(jié)論:可以。要分析包,肯定的了解包的構(gòu)造,不同層有不同層的構(gòu)造,不同協(xié)議也有不同協(xié)議的構(gòu)造,我得去查看各個常用協(xié)議的構(gòu)造,教材已不再滿足要求,因為好多都沒有整體構(gòu)造,僅僅是一些字段說明,所以得充分利用網(wǎng)絡(luò)資源,而這其中,Request For Comments(RFC)是最有力的工具,這里面有各個協(xié)議的標(biāo)準(zhǔn),整體構(gòu)造,字段說明等,看了RFC之后,我終于

24、知道看原版的好處了。通過查看相關(guān)RFC之后,我歸納了上面給出的那些協(xié)議格式,那些協(xié)議也是我想要在程序里面分析的。還有在一些博客里面,樓主都把自己的經(jīng)驗分享了,在本課程設(shè)計中,我覺得其中最重要的就是有人把環(huán)境配置的經(jīng)驗分享了,不然要我去摸索過程,我覺得會是很難的。通過這次實驗,我收獲還是很多,雖然我也想要有他們做網(wǎng)站、做文件傳輸?shù)氖斋@,但是魚和熊掌不可兼得,他們也沒有我的收獲啊,嘿嘿.以下是所得:首先,就是鞏固了網(wǎng)絡(luò)知識,對于這些常用協(xié)議,我現(xiàn)在真的是有自己的認(rèn)識了。其次,掌握了網(wǎng)絡(luò)抓包的原理,以及基于Java的抓包程序的編寫。再者,加深Swing組件應(yīng)用,掌握托盤技術(shù),學(xué)會使用線程。最后,也是

25、最重要的一點體驗,就是覺得網(wǎng)絡(luò)真的是一個寶庫,只要你知道你的問題,你都能在其中找到你要的答案。其他的話,就是感謝老師先給我們上了理論知識,最后又提供課題讓我們自己去深刻感受理論知識的運用。參考文獻(xiàn)以下皆來自網(wǎng)絡(luò)1 RFC826 - Ethernet Address Resolution Protocol (ARP)2 RFC792 - Internet Control Message Protocol (ICMP)3 RFC791 - Internet Protocol (IP)4 RFC793 - Transmission Control Protocol (TCP)5 RFC768 - U

26、ser Datagram Protocol (UDP)6RFC2616 - Hypertext Transfer Protocol - HTTP/1.1 (HTTP)以下是教材7計算機網(wǎng)絡(luò)(第四版),清華大學(xué)出版社,2004年8月出版附錄 源代碼如下:MainFrame類package .wwc;import java.awt.AWTException;import java.awt.Color;import java.awt.Container;import java.awt.Frame;import java.awt.MenuItem;import java.awt.PopupMenu;i

27、mport java.awt.SystemTray;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.io.BufferedReader;import ja

28、va.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import javax.swing.ImageIcon;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMen

29、uBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.UIManager;import org.jvnet.substance.SubstanceLookAndFeel;public class MainFrame extends JFrame implements ActionListener,WindowLi

30、stener,Runnableprivate static final long serialVersionUID = 1L;private JMenuBar mBar = new JMenuBar();private JMenu M_file = new JMenu("File"); private JMenu M_capture = new JMenu("Capture");private JMenu M_tool = new JMenu("Tool");private JMenu M_help = new JMenu("

31、;Help");private JMenuItem F_open = new JMenuItem("Open File");private JMenuItem F_save = new JMenuItem("Save File");private JMenuItem F_exit = new JMenuItem("Exit");private JMenuItem C_show = new JMenuItem("Network Card information");private JMenuItem C_C

32、onfigure = new JMenuItem("Configure");private JMenuItem C_start = new JMenuItem("Start");private JMenuItem C_stop = new JMenuItem("Stop");private JMenuItem T_wireshake = new JMenuItem("Wireshake");private JMenuItem T_factory = new JMenuItem("Check network

33、 card factory");private JMenuItem H_api = new JMenuItem("API for JPCAP");private JMenuItem H_author = new JMenuItem("About Author");public JPanel mainPanel1;public JScrollPane mainPanel2;public Container con;public JTextArea area = new JTextArea();public CatchPacket cPacket

34、;Thread thread = new Thread(cPacket);public Configure configure;public static boolean isWorking = false;private SystemTray sTray;private TrayIcon tIcon; / 布局頁面public void init()/ file菜單M_file.add(F_open);M_file.add(F_save);M_file.add(F_exit);/ capture菜單M_capture.add(C_show);M_capture.add(C_Configure

35、);M_capture.add(C_start);M_capture.add(C_stop);/ tool菜單M_tool.add(T_wireshake);M_tool.add(T_factory);/ help菜單M_help.add(H_api);M_help.add(H_author); / 組裝菜單mBar.add(M_file);mBar.add(M_capture);mBar.add(M_tool);mBar.add(M_help);setJMenuBar(mBar);setLayout(null); mainPanel1 = welPanel(); mainPanel2 = w

36、orkPanel();mainPanel1.setBounds(50, 10, 900,700); mainPanel2.setBounds(50, 10, 900,700); add(mainPanel1);add(mainPanel2); mainPanel1.setVisible(!isWorking);mainPanel2.setVisible(isWorking); setTitle("PacketCatcher-WWC(World-Wide-Catch)");setSize(1000, 800);setResizable(false);setVisible(tr

37、ue); F_open.addActionListener(this);F_save.addActionListener(this);F_exit.addActionListener(this);C_show.addActionListener(this);C_Configure.addActionListener(this);C_start.addActionListener(this);C_stop.addActionListener(this);T_wireshake.addActionListener(this);T_factory.addActionListener(this);H_

38、api.addActionListener(this);H_author.addActionListener(this);this.addWindowListener(this);/ 設(shè)置托盤public void setTray()sTray = SystemTray.getSystemTray();ImageIcon icon = new ImageIcon("./././images/tray.jpg");PopupMenu menu = new PopupMenu();MenuItem show = new MenuItem("顯示窗體");Me

39、nuItem exit = new MenuItem("退出窗體");tIcon = new TrayIcon(icon.getImage(),"World-Wide-Catch",menu);tIcon.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) if (e.getClickCount() = 2) / 鼠標(biāo)雙擊 sTray.remove(tIcon); setVisible(true); / 設(shè)置窗口全屏 /setExtendedState(JF

40、rame.MAXIMIZED_BOTH); );/ 初始化界面public MainFrame() / 初始化一個CacthPacket對象,以后都是在操作此對象cPacket = new CatchPacket();con = this.getContentPane();init();setTray(); / 添加welcome界面public JPanel welPanel()JPanel jPanel = new JPanel();JLabel label = new JLabel();ImageIcon icon = new ImageIcon("./././images/f

41、inal.jpg");label.setIcon(icon);jPanel.add(label);return jPanel;/ 運行時界面public JScrollPane workPanel() area.setBackground(Color.yellow);area.setText(CatchPacket.sb.toString();area.setEditable(false);JScrollPane sPane = new JScrollPane(area);sPane.setSize(800,600); sPane.setVisible(isWorking);retu

42、rn sPane;/ 菜單欄listenerpublic void actionPerformed(ActionEvent e) if(e.getSource()=F_open)if(isWorking=false)isWorking = true;JFileChooser chooser = new JFileChooser();int returnType = chooser.showOpenDialog(null);if(returnType=JFileChooser.APPROVE_OPTION)File file = chooser.getSelectedFile(); String

43、 fileName = file.getAbsolutePath();CatchPacket.sb.delete(0, CatchPacket.sb.length();cPacket.openFile(fileName);else if(e.getSource()=F_save)JFileChooser chooser = new JFileChooser();int returnType = chooser.showSaveDialog(null);if(returnType=JFileChooser.APPROVE_OPTION)File file = chooser.getSelecte

44、dFile(); String fileName = file.getAbsolutePath(); cPacket.saveFile(fileName); else if(e.getSource()=F_exit)int show = JOptionPane.showConfirmDialog(null, "是否關(guān)閉?", "確認(rèn)關(guān)閉系統(tǒng)",JOptionPane.YES_NO_OPTION);if (show = JOptionPane.YES_OPTION) System.exit(0);else this.setDefaultCloseOpera

45、tion(JFrame.DO_NOTHING_ON_CLOSE);else if(e.getSource()=C_show)isWorking = true;cPacket.devices = cPacket.getDevices();CatchPacket.sb.delete(0, CatchPacket.sb.length();cPacket.desNetworkInterface();area.setText(CatchPacket.sb.toString(); else if(e.getSource()=C_Configure)configure = new Configure();c

46、onfigure.init(cPacket);else if(e.getSource()=C_start) if(configure=null)JOptionPane.showMessageDialog(null, "Configure first!","INFORMATION",JOptionPane.INFORMATION_MESSAGE);elseisWorking = true; cPacket.getCap(CatchPacket.chooseDevice, CatchPacket.chooseMode, "");threa

47、d = new Thread(cPacket);CatchPacket.sb.delete(0, CatchPacket.sb.length();thread.start(); else if(e.getSource()=C_stop) if(thread.isAlive()thread.stop(); else if(e.getSource()=T_wireshake)String cmd ="rundll32 url.dll,FileProtocolHandler C:/Program Files/Wireshark/wireshark.exe"try Runtime.

48、getRuntime().exec(cmd); catch (IOException e1) e1.printStackTrace(); else if(e.getSource()=T_factory)String cmd ="rundll32 url.dll,FileProtocolHandler /regauth/oui/index.shtml"try Runtime.getRuntime().exec(cmd); catch (IOException e1) e1.printStackTrace(); else if(e

49、.getSource()=H_api)String cmd ="rundll32 url.dll,FileProtocolHandler E:/doc/javadoc/index.html"try Runtime.getRuntime().exec(cmd); catch (IOException e1) e1.printStackTrace(); else if(e.getSource()=H_author)/查看空間String cmd ="rundll32 url.dll,FileProtocolHandler try Runtime.getRuntime(

50、).exec(cmd); catch (IOException e1) e1.printStackTrace(); / 窗口listener public void windowActivated(WindowEvent arg0) public void windowClosed(WindowEvent arg0) public void windowDeactivated(WindowEvent arg0) public void windowDeiconified(WindowEvent arg0) public void windowOpened(WindowEvent arg0) p

51、ublic void windowClosing(WindowEvent e) int show = JOptionPane.showConfirmDialog(null, "是否關(guān)閉?", "確認(rèn)關(guān)閉系統(tǒng)",JOptionPane.YES_NO_OPTION);if (show = JOptionPane.YES_OPTION) System.exit(0);else this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);/ 最小化public void windowIconified(Wi

52、ndowEvent arg0) if (getState() = Frame.ICONIFIED) try sTray = SystemTray.getSystemTray();sTray.add(tIcon); catch (AWTException e1) e1.printStackTrace(); setVisible(false); public static void main(String args) try UIManager.setLookAndFeel(new SubstanceLookAndFeel();catch(Exception e)MainFrame mFrame

53、= new MainFrame();Thread mThread = new Thread(mFrame);mThread.setPriority(Thread.MAX_PRIORITY);mThread.start(); public void run() while(true)try Thread.sleep(800); this.mainPanel1.setVisible(!isWorking);this.mainPanel2.setVisible(isWorking); area.setText(CatchPacket.sb.toString();con.validate(); con

54、.repaint(); catch (InterruptedException e) e.printStackTrace(); :Configure類package .wwc;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import java

溫馨提示

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

評論

0/150

提交評論