2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《計(jì)算機(jī)網(wǎng)絡(luò)》課程設(shè)計(jì)報(bào)告</p><p>  基于TCP/IP協(xié)議的網(wǎng)絡(luò)監(jiān)聽程序設(shè)計(jì)</p><p>  基于TCP/IP協(xié)議的網(wǎng)絡(luò)監(jiān)聽程序設(shè)計(jì)</p><p>  摘 要 本課程設(shè)計(jì)主要是一種利用計(jì)算機(jī)網(wǎng)絡(luò)接口監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)運(yùn)行、截獲網(wǎng)絡(luò)數(shù)據(jù)的工具,可用于網(wǎng)絡(luò)管理、網(wǎng)絡(luò)協(xié)議分析以及網(wǎng)絡(luò)安全等眾多方面。在課程設(shè)計(jì)中,系統(tǒng)開發(fā)平臺(tái)為Wind

2、ows 2000,以Java6.0為平臺(tái)設(shè)計(jì)并實(shí)現(xiàn)一款基于Windows環(huán)境下的網(wǎng)絡(luò)監(jiān)聽器。按照軟件工程的思想進(jìn)行設(shè)計(jì)、實(shí)現(xiàn)和測試。對于該網(wǎng)絡(luò)監(jiān)聽器的總體架構(gòu)設(shè)計(jì),大體上分為兩個(gè)部分:其一為構(gòu)造界面,其二為在其界面條件下編程。然后再根據(jù)所編程序進(jìn)行運(yùn)行測試。</p><p>  關(guān)鍵詞 Java語言;TCP/IP;套接字;局域網(wǎng)</p><p><b>  1 引言</b

3、></p><p><b>  1.1 課題背景</b></p><p>  隨著計(jì)算機(jī)技術(shù)的發(fā)展,網(wǎng)絡(luò)已日益成為生活中不可或缺的工具,但隨之而來的非法入侵也一直威脅著計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的安全。由于局域網(wǎng)中采用廣播方式,因此,在某個(gè)廣播域中可以監(jiān)聽到所有的信息包。而黑客通過對信息包進(jìn)行分析,就能獲取局域網(wǎng)上傳輸?shù)囊恍┲匾畔ⅰJ聦?shí)上,很多黑客入侵時(shí)都把局域網(wǎng)掃描和監(jiān)

4、聽作為其最基本的步驟和手段,原因是想用這種方法獲取想要的密碼等信息。但另一方面,我們對黑客入侵活動(dòng)和其它網(wǎng)絡(luò)犯罪進(jìn)行偵查、取證時(shí),也可以使用網(wǎng)絡(luò)監(jiān)聽技術(shù)來獲取必要的信息。因此,了解以太網(wǎng)監(jiān)聽技術(shù)的原理、實(shí)現(xiàn)方法和防范措施就顯得尤為重要[1]。</p><p>  監(jiān)聽器主要運(yùn)行在C/S模式下, 截獲其TCP應(yīng)用層的數(shù)據(jù)內(nèi)容,并把發(fā)送端所傳信息體現(xiàn)在監(jiān)聽器中,而接受端也返還一個(gè)信息給發(fā)送端,從而完成監(jiān)聽工作。<

5、;/p><p>  1.2 課程設(shè)計(jì)目的</p><p>  本課程設(shè)計(jì)的目的是基于JAVA語言實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)監(jiān)聽器程序,采用TCP/IP原理以及套字節(jié)編程原理,達(dá)到捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包并對其進(jìn)行分析的目的。在設(shè)計(jì)過程中,主要采用Eclipse編程環(huán)境,使用JAVA語言進(jìn)行程序的編寫,程序通過調(diào)試運(yùn)行并且經(jīng)過完善后,初步實(shí)現(xiàn)了設(shè)計(jì)的目標(biāo),能很好地在局域網(wǎng)環(huán)境實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽的功能。</p>

6、<p>  1.3 課程設(shè)計(jì)基本任務(wù)</p><p>  (1)熟悉TCP/IP協(xié)議以及套節(jié)字編程原理;</p><p> ?。?)熟悉Eclipse編程環(huán)境及Socket/ServerSocket編程方法;</p><p> ?。?)理解C/S工作模式;</p><p> ?。?)實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)監(jiān)聽程序。</p>

7、<p><b>  2 需求分析</b></p><p>  網(wǎng)絡(luò)監(jiān)聽是一種監(jiān)視網(wǎng)絡(luò)狀態(tài)、數(shù)據(jù)流程以及網(wǎng)絡(luò)上信息傳輸?shù)墓芾砉ぞ?,它可以將網(wǎng)絡(luò)界面設(shè)定成監(jiān)聽模式,并且可以截獲網(wǎng)絡(luò)上所傳輸?shù)男畔?。也就是說,當(dāng)黑客登錄網(wǎng)絡(luò)主機(jī)并取得超級用戶權(quán)限后,若要登錄其它主機(jī),使用網(wǎng)絡(luò)監(jiān)聽便可以有效地截獲網(wǎng)絡(luò)上的數(shù)據(jù),這是黑客使用最好的方法。但是網(wǎng)絡(luò)監(jiān)聽只能應(yīng)用于連接同一網(wǎng)段的主機(jī),通常被用來獲取用

8、戶密碼等??傮w上看,網(wǎng)絡(luò)信息安全處于被動(dòng)的封堵漏洞狀態(tài),從上到下普遍存在僥幸心理,沒有形成主動(dòng)防范、積極應(yīng)對的全民意識,更無法從根本上提高網(wǎng)絡(luò)監(jiān)測、防護(hù)、響應(yīng)、恢復(fù)和抗擊能力。近年來,國家和各級職能部門在信息安全方面已做了大量努力,但就范圍、影響和效果來講,迄今所采取的信息安全保護(hù)措施和有關(guān)計(jì)劃還不能從根本上解決目前的被動(dòng)局面,整個(gè)信息安全系統(tǒng)在迅速反應(yīng)、快速行動(dòng)和預(yù)警防范等主要方面,缺少方向感、敏感度和應(yīng)對能力。因此,監(jiān)聽器必將廣泛得

9、應(yīng)用在數(shù)據(jù)分析方面。</p><p><b>  3 相關(guān)原理分析</b></p><p>  3.1 Java背景</p><p>  Java是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言(以下簡稱Java語言)和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了

10、Java的魅力:跨平臺(tái)、動(dòng)感的Web、Internet計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一方面,Java技術(shù)也不斷更新[2]。</p><p>  作為一種程序設(shè)計(jì)語言 ,它簡單、面向?qū)ο蟆⒉灰蕾囉跈C(jī)器的結(jié)構(gòu)、具有可移植性、魯棒性、安全性、并且提供了并發(fā)的機(jī)制、具有很高的性能。其次 ,它最大限度地利用了網(wǎng)絡(luò) ,Java的小應(yīng)用程序 (apple

11、t)可在網(wǎng)絡(luò)上傳輸而不受 CPU和環(huán)境的限制。另外 ,Java還提供了豐富的類庫 ,使程序設(shè)計(jì)者可以很方便地建立自己的系統(tǒng)。</p><p>  3.2 TCP/IP協(xié)議詳解</p><p>  Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Int

12、ernet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。</p><p>  3.3 TCP傳輸原理 </p><p>  TCP協(xié)議在IP協(xié)議之上。與IP協(xié)議提供不可靠傳輸服務(wù)不同的是,TCP協(xié)議為其上的應(yīng)用層提供了

13、一種可靠傳輸服務(wù)。這種服務(wù)的特點(diǎn)是:可靠、全雙工、流式和無結(jié)構(gòu)傳輸。它是通過一下步驟來實(shí)現(xiàn)可靠傳輸?shù)模篢CP協(xié)議使用了一個(gè)叫積極確認(rèn)和重發(fā)送(positive acknowledgement with retransmission)的技術(shù)來實(shí)現(xiàn)這一點(diǎn)的。接收者在收到發(fā)送者發(fā)送的數(shù)據(jù)后,必須發(fā)送一個(gè)相應(yīng)的確認(rèn)(ACK)消息,表示它已經(jīng)收到了數(shù)據(jù)。發(fā)送者保存發(fā)送的數(shù)據(jù)的記錄,在發(fā)送下一個(gè)數(shù)據(jù)之前,等待這個(gè)數(shù)據(jù)的確認(rèn)消息。在它發(fā)送這個(gè)數(shù)據(jù)的同

14、時(shí),還啟動(dòng)了一個(gè)記時(shí)器。如果在一定時(shí)間之內(nèi),沒有接收到確認(rèn)消息,就認(rèn)為是這個(gè)數(shù)據(jù)在傳送時(shí)丟失了,接著,就會(huì)重新發(fā)送這個(gè)數(shù)據(jù)。[3]</p><p>  3.4局域網(wǎng)監(jiān)聽的基本原理 </p><p>  根據(jù)IEEE的描述,局域網(wǎng)技術(shù)是"把分散在一個(gè)建筑物或相鄰幾個(gè)建筑物中的計(jì)算機(jī)、終端、大容量存儲(chǔ)器的外圍設(shè)備、控制器、顯示器、以及為連接其它網(wǎng)絡(luò)而使用的網(wǎng)絡(luò)連接器等相互連接起來,以

15、很高的速度進(jìn)行通訊的手段"。</p><p>  局域網(wǎng)具有設(shè)備共享、信息共享、可進(jìn)行高速數(shù)據(jù)通訊和多媒體信息通信、分布式處理、具有較高的兼容性和安全性等基本功能和特點(diǎn)。目前局域網(wǎng)主要用于辦公室自動(dòng)化和校園教學(xué)及管理,一般可根據(jù)具體情況采用總線形、環(huán)形、樹形及星形的拓?fù)浣Y(jié)構(gòu)。</p><p>  3.5 在局域網(wǎng)實(shí)現(xiàn)監(jiān)聽的基本原理 </p><p>  對

16、于目前很流行的以太網(wǎng)協(xié)議,其工作方式是:將要發(fā)送的數(shù)據(jù)包發(fā)往連接在一起的所有主機(jī),包中包含著應(yīng)該接收數(shù)據(jù)包主機(jī)的正確地址,只有與數(shù)據(jù)包中目標(biāo)地址一致的那臺(tái)主機(jī)才能接收。但是,當(dāng)主機(jī)工作監(jiān)聽模式下,無論數(shù)據(jù)包中的目標(biāo)地址是什么,主機(jī)都將接收(當(dāng)然只能監(jiān)聽經(jīng)過自己網(wǎng)絡(luò)接口的那些包)。   在因特網(wǎng)上有很多使用以太網(wǎng)協(xié)議的局域網(wǎng),許多主機(jī)通過電纜、集線器連在一起。當(dāng)同一網(wǎng)絡(luò)中的兩臺(tái)主機(jī)通信的時(shí)候,源主機(jī)將寫有目的的主機(jī)地

17、址的數(shù)據(jù)包直接發(fā)向目的主機(jī)。但這種數(shù)據(jù)包不能在IP層直接發(fā)送,必須從TCP/IP協(xié)議[1]的IP層交給網(wǎng)絡(luò)接口,也就是數(shù)據(jù)鏈路層,而網(wǎng)絡(luò)接口是不會(huì)識別IP地址的,因此在網(wǎng)絡(luò)接口數(shù)據(jù)包又增加了一部分以太幀頭的信息。在幀頭中有兩個(gè)域,分別為只有網(wǎng)絡(luò)接口才能識別的源主機(jī)和目的主機(jī)的物理地址,這是一個(gè)與IP地址相對應(yīng)的48位的地址。</p><p>  傳輸數(shù)據(jù)時(shí),包含物理地址的幀從網(wǎng)絡(luò)接口(網(wǎng)卡)發(fā)送到物理的線路上,如

18、果局域網(wǎng)是由一條粗纜或細(xì)纜連接而成,則數(shù)字信號在電纜上傳輸,能夠到達(dá)線路上的每一臺(tái)主機(jī)。當(dāng)使用集線器時(shí),由集線器再發(fā)向連接在集線器上的每一條線路,數(shù)字信號也能到達(dá)連接在集線器上的每一臺(tái)主機(jī)。當(dāng)數(shù)字信號到達(dá)一臺(tái)主機(jī)的網(wǎng)絡(luò)接口時(shí),正常情況下,網(wǎng)絡(luò)接口讀入數(shù)據(jù)幀,進(jìn)行檢查,如果數(shù)據(jù)幀中攜帶的物理地址是自己的或者是廣播地址,則將數(shù)據(jù)幀交給上層協(xié)議軟件,也就是IP層軟件,否則就將這個(gè)幀丟棄。對于每一個(gè)到達(dá)網(wǎng)絡(luò)接口的數(shù)據(jù)幀,都要進(jìn)行這個(gè)過程。<

19、;/p><p>  然而,當(dāng)主機(jī)工作在監(jiān)聽模式下,所有的數(shù)據(jù)幀都將被交給上層協(xié)議軟件處理。而且,當(dāng)連接在同一條電纜或集線器上的主機(jī)被邏輯地分為幾個(gè)子網(wǎng)時(shí),如果一臺(tái)主機(jī)處于監(jiān)聽模式下,它還能接收到發(fā)向與自己不在同一子網(wǎng)(使用了不同的掩碼、IP地址和網(wǎng)關(guān))的主機(jī)的數(shù)據(jù)包。也就是說,在同一條物理信道上傳輸?shù)乃行畔⒍伎梢员唤邮盏健A硗?,現(xiàn)在網(wǎng)絡(luò)中使用的大部分協(xié)議都是很早設(shè)計(jì)的,許多協(xié)議的實(shí)現(xiàn)都是基于一種非常友好的、通信的雙

20、方充分信任的基礎(chǔ)之上,許多信息以明文發(fā)送。因此,如果用戶的賬戶名和口令等信息也以明文的方式在網(wǎng)上傳輸,而此時(shí)一個(gè)黑客或網(wǎng)絡(luò)攻擊者正在進(jìn)行網(wǎng)絡(luò)監(jiān)聽,只要具有初步的網(wǎng)絡(luò)和TCP/IP協(xié)議知識,便能輕易地從監(jiān)聽到的信息中提取出感興趣的部分。同理,正確的使用網(wǎng)絡(luò)監(jiān)聽技術(shù)也可以發(fā)現(xiàn)入侵并對入侵者進(jìn)行追蹤定位,在對網(wǎng)絡(luò)犯罪進(jìn)行偵查取證時(shí)獲取有關(guān)犯罪行為的重要信息,成為打擊網(wǎng)絡(luò)犯罪的有力手段。 </p><p>  3.6局域

21、網(wǎng)監(jiān)聽的簡單實(shí)現(xiàn) </p><p>  要使主機(jī)工作在監(jiān)聽模式下,需要向網(wǎng)絡(luò)接口發(fā)出I/O控制命令,將其設(shè)置為監(jiān)聽模式。在Unix系統(tǒng)中,發(fā)送這些命令需要超級用戶的權(quán)限。在Windows系列操作系統(tǒng)中,則沒有這個(gè)限制。要實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽,可以自己用相關(guān)的計(jì)算機(jī)語言和函數(shù)編寫出功能強(qiáng)大的網(wǎng)絡(luò)監(jiān)聽程序,也可以使用一些現(xiàn)成的監(jiān)聽軟件,在很多黑客網(wǎng)站或從事網(wǎng)絡(luò)安全管理的網(wǎng)站都有。 </p><p>&

22、lt;b>  3.7 套接字原理</b></p><p>  為了更好說明套接字編程原理,給出幾個(gè)基本的套接字。</p><p>  1.創(chuàng)建套接字——socket()</p><p>  功能:使用前創(chuàng)建一個(gè)新的套接字</p><p>  格式:SOCKET PASCAL FAR socket(int af,int typ

23、e,int procotol);</p><p>  參數(shù):af: 通信發(fā)生的區(qū)域</p><p>  type: 要建立的套接字類型</p><p>  procotol: 使用的特定協(xié)議</p><p>  2.指定本地地址——bind()</p><p>  功能:將套接字地址與所創(chuàng)建的套接字號聯(lián)系起來。<

24、/p><p>  格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);</p><p>  參數(shù):s: 是由socket()調(diào)用返回的并且未作連接的套接字描述符(套接字號)。</p><p>  其它:沒有錯(cuò)誤,bind()返回0,否則SOCKET_ERROR<

25、/p><p><b>  地址結(jié)構(gòu)說明:</b></p><p>  struct sockaddr_in</p><p><b>  {</b></p><p>  short sin_family;//AF_INET</p><p>  u_short sin_port;//

26、16位端口號,網(wǎng)絡(luò)字節(jié)順序</p><p>  struct in_addr sin_addr;//32位IP地址,網(wǎng)絡(luò)字節(jié)順序</p><p>  char sin_zero[8];//保留</p><p><b>  }</b></p><p>  3.建立套接字連接——connect()和accept()</

27、p><p>  功能:共同完成連接工作</p><p>  格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);</p><p>  SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int

28、 FAR * addrlen);</p><p><b>  參數(shù):同上</b></p><p>  4.聽連接——listen()</p><p>  功能:用于面向連接服務(wù)器,表明它愿意接收連接。</p><p>  格式:int PASCAL FAR listen(SOCKET s, int backlog);&l

29、t;/p><p>  5.數(shù)據(jù)傳輸——send()與recv()</p><p>  功能:數(shù)據(jù)的發(fā)送與接收</p><p>  格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);</p><p>  int PASCAL FAR recv(SOCKET

30、 s,const char FAR * buf,int len,int flags);</p><p>  參數(shù):buf:指向存有傳輸數(shù)據(jù)的緩沖區(qū)的指針。 </p><p>  6.多路復(fù)用——select()</p><p>  功能:用來檢測一個(gè)或多個(gè)套接字狀態(tài)。</p><p>  格式:int PASCAL FAR select(in

31、t nfds,fd_set FAR * readfds,fd_set FAR * writefds, </p><p>  fd_set FAR * exceptfds,const struct timeval FAR * timeout);</p><p>  參數(shù):readfds:指向要做讀檢測的指針</p><p>  writefds:指向要做寫檢測的指針&

32、lt;/p><p>  exceptfds:指向要檢測是否出錯(cuò)的指針</p><p>  timeout:最大等待時(shí)間</p><p>  7.關(guān)閉套接字——closesocket()</p><p><b>  功能:關(guān)閉套接字s</b></p><p>  格式:BOOL PASCAL FAR c

33、losesocket(SOCKET s);</p><p><b>  4 總體設(shè)計(jì)</b></p><p><b>  4.1界面構(gòu)造 </b></p><p>  利用Eclipse軟件,結(jié)合編程語言,實(shí)現(xiàn)界面構(gòu)造的編碼。</p><p>  (1)AdiminPanel構(gòu)造</p>

34、<p>  package comp.gui;</p><p>  import java.awt.Component;</p><p>  import java.awt.GridBagConstraints;</p><p>  import java.awt.GridBagLayout;</p><p>  import

35、java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p>  import javax.swing.*;</p><p>  import com.briup.bean.URLInfo;</p><p>  import com.br

36、iup.net.TCPMonitorServer;</p><p>  public class AdminPanel extends JPanel {</p><p>  private JLabel titleLb=new JLabel("Create a new TCP/IP Monitor...");</p><p>  private

37、JLabel listenPortLb=new JLabel("Listen Port #");</p><p>  private JLabel hostNameLb=new JLabel("Target Hostname");</p><p>  private JLabel targetPortLb=new JLabel("Targe

38、t Port # ");</p><p>  private JTextField listenPortTf=new JTextField("",15);</p><p>  private JTextField hostNameTf=new JTextField("127.0.0.1",15);</p><p> 

39、 private JTextField targetPortTf=new JTextField("8080",15);</p><p>  private JButton addBtn=new JButton("Add");</p><p>  private GridBagLayout gbl=new GridBagLayout();</p&

40、gt;<p>  private GridBagConstraints gbc=new GridBagConstraints();</p><p>  private JTabbedPane tabbedPane;</p><p>  public AdminPanel(JTabbedPane tabbedPane) {</p><p>  this.

41、tabbedPane=tabbedPane;</p><p>  initComponent();</p><p><b>  }</b></p><p>  private void initComponent(){</p><p>  //步驟一:選擇容器</p><p>  //步驟二:選擇

42、布局管理器</p><p>  setLayout(gbl);</p><p>  //步驟三:加入組件</p><p>  addComponent(titleLb, GridBagConstraints.REMAINDER);</p><p>  addComponent(listenPortLb, 1);</p><

43、p>  addComponent(listenPortTf, GridBagConstraints.REMAINDER);</p><p>  addComponent(hostNameLb, 1);</p><p>  addComponent(hostNameTf, GridBagConstraints.REMAINDER);</p><p>  addC

44、omponent(targetPortLb, 1);</p><p>  addComponent(targetPortTf, GridBagConstraints.REMAINDER);</p><p>  addComponent(addBtn, GridBagConstraints.REMAINDER);</p><p>  //步驟四:加入事件處理器<

45、/p><p>  addBtn.addActionListener(new ActionListener(){</p><p>  public void actionPerformed(ActionEvent arg0) {</p><p>  String listenPort=listenPortTf.getText();</p><p>

46、  String hostName=hostNameTf.getText();</p><p>  String targetPort=targetPortTf.getText();</p><p>  String msg="";</p><p><b>  int i=1;</b></p><p>

47、;  if(listenPort==null||listenPort.trim().length()==0) </p><p>  msg+=i++ + ". Please input valid listen port. \r\n";</p><p>  if(hostName==null||hostName.trim().length()==0) </p>

48、;<p>  msg+=i++ + ". Please input valid hostname.\r\n";</p><p>  if(targetPort==null||targetPort.trim().length()==0) </p><p>  msg+=i++ + ". Please input valid target port.

49、\r\n";</p><p>  if(msg.length()>0) {</p><p>  JOptionPane.showMessageDialog(null, msg);</p><p><b>  return;</b></p><p><b>  }</b></p

50、><p><b>  try {</b></p><p>  URLInfo urlInfo=new URLInfo(Integer.parseInt(listenPort),</p><p><b>  hostName,</b></p><p>  Integer.parseInt(targetPo

51、rt));</p><p>  MonitorPanel monitorPanel=new MonitorPanel(tabbedPane,urlInfo);</p><p>  tabbedPane.add(monitorPanel,"Port "+listenPort);</p><p>  }catch(Exception e) {<

52、/p><p>  JOptionPane.showMessageDialog(null, e.getMessage());</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  });</b></p><

53、;p><b>  }</b></p><p>  private void addComponent(Component c, int gridwidth){</p><p>  gbc.gridwidth=gridwidth;</p><p>  gbl.setConstraints(c, gbc);</p><p&

54、gt;<b>  add(c);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  其構(gòu)造出來的界面如下圖所示:</p><p><b>  圖4.1 主界面圖</b></p><

55、;p><b>  4.2 網(wǎng)絡(luò)實(shí)現(xiàn)</b></p><p>  1 執(zhí)行Class MonitorSend extends Thread {</p><p>  private Socket socket;</p><p>  該段程序?yàn)槌钟邢朐L問的Web服務(wù)器中資源的路徑,比如說: /a.html或/images/logo.gif等。&

56、lt;/p><p>  調(diào)用字符串函數(shù)并執(zhí)行循環(huán)體如下:</p><p><b>  try {</b></p><p>  cin=new BufferedReader(</p><p>  new InputStreamReader(socket.getInputStream())</p><p>

57、;<b>  );</b></p><p>  String s=cin.readLine();</p><p>  這時(shí)s的內(nèi)容類似于:GET /a.html HTTP/1.1。</p><p>  public synchronized void setFileName(String s) {</p><p>  S

58、tring[] str=s.split(" ");</p><p>  fileName=str[1];</p><p>  notifyAll();</p><p><b>  }</b></p><p><b>  }</b></p><p>  2

59、網(wǎng)絡(luò)實(shí)現(xiàn)主體函數(shù)是ServerSocket,。調(diào)用URL,對其監(jiān)聽端口,主機(jī)名,網(wǎng)絡(luò)目的地址進(jìn)行設(shè)定。</p><p>  執(zhí)行catch(Exception e) {</p><p>  JOptionPane.showMessageDialog(monitorPanel,e.getMessage());</p><p><b>  }finally{&

60、lt;/b></p><p><b>  try{</b></p><p>  if(serverSocket!=null)serverSocket.close();</p><p>  }catch(Exception e){}</p><p><b>  }</b></p>

61、<p><b>  }</b></p><p>  public void close() {</p><p><b>  try{</b></p><p>  if(serverSocket!=null)serverSocket.close();</p><p>  }catch(Exc

62、eption e){}</p><p><b>  }</b></p><p>  該段程序通過其循環(huán)語句的實(shí)現(xiàn)值來體現(xiàn)瀏覽器向web服務(wù)器提交的信息。</p><p>  3 用來顯示W(wǎng)eb服務(wù)器返回給瀏覽器的信息</p><p>  class MonitorReceive extends Thread {</

63、p><p>  private Socket socket;</p><p>  private MonitorSend send;</p><p>  public MonitorReceive(Socket socket,MonitorSend send) {</p><p>  this.socket=socket;</p>

64、<p>  this.send=send;</p><p><b>  }</b></p><p>  public void run() {</p><p>  PrintStream cout=null;// Monitor程序至瀏覽器的輸出流</p><p>  BufferedInputStre

65、am sin=null;// Web服務(wù)器至Monitor程序的輸入流</p><p>  StringBuffer sb=new StringBuffer();// Web服務(wù)器響應(yīng)內(nèi)容</p><p>  這樣從服務(wù)器到瀏覽器,從瀏覽器到服務(wù)器。在都次循環(huán)語句執(zhí)行下,監(jiān)聽器開始執(zhí)行其工作。即截獲網(wǎng)址,以及改次請求發(fā)送過程中的數(shù)據(jù)包。其中包括包頭的信息。</p>&l

66、t;p>  5 程序的實(shí)現(xiàn)與測試</p><p><b>  5.1模型</b></p><p>  圖5.1 B/S模型</p><p>  總體設(shè)計(jì)很簡單,就是當(dāng)本機(jī)想訪問某個(gè)網(wǎng)頁時(shí),其中間放置了一個(gè)監(jiān)聽器。如圖5.1所示。該監(jiān)聽器將發(fā)送端的數(shù)據(jù)包,包括其字節(jié)頭等,通過監(jiān)聽器顯示出來,而其接受網(wǎng)頁方在受到訪問后所作出的工作也將在監(jiān)聽

67、器上得以體現(xiàn)。</p><p><b>  5.2測試步驟</b></p><p>  根據(jù)以上代碼首先設(shè)計(jì)出圖形界面如圖52所示:</p><p><b>  圖5.2軟件界面</b></p><p>  如圖可以看出其需要輸出監(jiān)聽端口,目的主機(jī)名和目的端口的值。目的主機(jī)為其要訪問的網(wǎng)址的IP地址

68、,打個(gè)比方,如想訪問www.sohu.com,則需先找到其對應(yīng)的IP地址,可在運(yùn)行平臺(tái)由ping命令獲得:如圖5.3所示:</p><p>  圖5.3查找訪問頁面地址</p><p>  根據(jù)以上所提供的數(shù)據(jù),將其數(shù)值輸入到相應(yīng)的對話框,如圖5.4所示</p><p>  圖5.4 輸入IP地址后的圖</p><p>  在網(wǎng)頁中輸入htt

69、p://localhost:1542,點(diǎn)擊port1542既可得到數(shù)據(jù)輸出,如圖5.5所示:</p><p>  圖5.5 訪問網(wǎng)頁截獲其數(shù)據(jù)圖</p><p>  從圖中可以很清楚地看出其輸出的數(shù)據(jù)和其輸入的數(shù)據(jù)。而這其中不僅僅是包含了網(wǎng)址那么簡單,從數(shù)據(jù)包的頭,到一些具體的內(nèi)容都可以顯現(xiàn)到我們的監(jiān)聽器當(dāng)中。因?yàn)槠浒l(fā)送和接受的數(shù)據(jù)都被截獲[4],所以可以說這個(gè)程序是成功的。其功能得到了很

70、好的發(fā)揮。若輸入其網(wǎng)址端口后,其值不能正常顯示出來,發(fā)送和接受都沒有得到的話,那說明此次截獲是失敗的。也就是說其監(jiān)聽器的功能沒有能夠很好的體現(xiàn)。監(jiān)聽器所實(shí)現(xiàn)的功能就是網(wǎng)頁與網(wǎng)頁的互訪[5],而其中的數(shù)據(jù)和內(nèi)容將被大量的顯現(xiàn)出來。讓我們更好的看到其內(nèi)容。</p><p><b>  6 結(jié)束語</b></p><p>  時(shí)間過得真快,二周的課程設(shè)計(jì)在忙碌中結(jié)束了。Ja

71、va對于我而言是個(gè)極其生僻的詞匯,可現(xiàn)在的自己卻作出來一個(gè)東西。感覺不可思議。我做的是網(wǎng)絡(luò)監(jiān)聽器,說實(shí)話,我根本沒看到什么資料??吹狡渌耐瑢W(xué)一個(gè)個(gè)都開始慢慢的動(dòng)起來了,自己心里也有點(diǎn)著急了。我才開始慢慢的平復(fù)下自己的心情,而且也在當(dāng)真正了解網(wǎng)絡(luò)監(jiān)聽器的左右后,越來越覺得其有趣的地方。有一種很想學(xué)好的沖動(dòng),因?yàn)樗?,我很想學(xué)好Java。因?yàn)閷τ谖叶?,這感覺真是很奇妙。</p><p>  網(wǎng)絡(luò)監(jiān)聽技術(shù)作為一種工具

72、,總是扮演著正反兩方面的角色。對于入侵者來說,最喜歡的莫過于用戶的口令,通過網(wǎng)絡(luò)監(jiān)聽可以很容易地獲得這些關(guān)鍵信息。而對于入侵檢測和追蹤者來說,網(wǎng)絡(luò)監(jiān)聽技術(shù)又能夠在與入侵者的斗爭中發(fā)揮重要的作用。鑒于目前的網(wǎng)絡(luò)安全現(xiàn)狀,我們應(yīng)該進(jìn)一步挖掘網(wǎng)絡(luò)監(jiān)聽技術(shù)的細(xì)節(jié),從技術(shù)基礎(chǔ)上掌握先機(jī),才能在與入侵者的斗爭中取得勝利。 </p><p>  最后,感謝各位同學(xué)的幫助和龍老師的悉心指導(dǎo)。在以后的日子里面一定努力學(xué)習(xí),努力把J

73、ava學(xué)好。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] Stephen R.Software Engineering with Java. 北京:機(jī)械工業(yè)出版社, 2005</p><p>  [2]李雷、周曉寶等. Java網(wǎng)絡(luò)應(yīng)用編程. 北京:高等教育出版社, 2004</p><p>

74、;  [3]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第四版)[M].北京:電子工業(yè)出版社,2003</p><p>  [4] 王大雷,高志紅.網(wǎng)絡(luò)編程實(shí)用教程. 北京:人民郵電出版社,2009</p><p>  [5] 朱智賢,楊頂華等.JAVA技術(shù)[M].北京:人民郵電出版社,2000</p><p>  附錄1:設(shè)計(jì)程序清單</p><p>  //程序

75、名稱: TCP montior</p><p>  //程序功能:網(wǎng)絡(luò)監(jiān)聽,數(shù)據(jù)截獲</p><p>  //程序作者:林慧娟</p><p>  //最后修改日期: 2012/6/29</p><p>  package com.lhj.net;</p><p>  import java.net.*;</p&

76、gt;<p>  import java.io.*;</p><p>  import javax.swing.JOptionPane;</p><p>  import com.briup.bean.Record;</p><p>  import com.briup.bean.URLInfo;</p><p>  impor

77、t com.briup.gui.MonitorPanel;</p><p>  public class TCPMonitorServer extends Thread{</p><p>  private int listenPort;</p><p>  private String hostName;</p><p>  private

78、 int targetPort;</p><p>  private ServerSocket serverSocket=null;</p><p>  private MonitorPanel monitorPanel;</p><p>  public TCPMonitorServer(URLInfo urlInfo,MonitorPanel monitorP

79、anel) {</p><p>  this.listenPort=urlInfo.getListenPort();</p><p>  this.hostName=urlInfo.getHostName();</p><p>  this.targetPort=urlInfo.getTargetPort();</p><p>  this.

80、monitorPanel=monitorPanel;</p><p><b>  }</b></p><p>  public void run() {</p><p><b>  try {</b></p><p>  serverSocket=new ServerSocket(listenPor

81、t);</p><p>  while(true) {</p><p>  Socket socket=serverSocket.accept();</p><p>  MonitorSend send=new MonitorSend(socket);</p><p>  MonitorReceive receive=new MonitorR

82、eceive(socket,send);</p><p>  send.start();</p><p>  receive.start();</p><p><b>  }</b></p><p>  }catch(Exception e) {</p><p>  JOptionPane.sho

83、wMessageDialog(monitorPanel,e.getMessage());</p><p><b>  }finally{</b></p><p><b>  try{</b></p><p>  if(serverSocket!=null)serverSocket.close();</p>&

84、lt;p>  }catch(Exception e){}</p><p><b>  }</b></p><p><b>  }</b></p><p>  public void close() {</p><p><b>  try{</b></p>&

85、lt;p>  if(serverSocket!=null)serverSocket.close();</p><p>  }catch(Exception e){}</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 用來顯示瀏覽器提交給

86、Web服務(wù)器的信息</p><p>  * @author Administrator</p><p><b>  */</b></p><p>  class MonitorSend extends Thread {</p><p>  private Socket socket;</p><p&g

87、t;<b>  /**</b></p><p>  * 用來持有想訪問的Web服務(wù)器中資源的路徑,</p><p>  * 內(nèi)容示例: /a.html或/images/logo.gif</p><p><b>  */</b></p><p>  private String fileName;&

88、lt;/p><p>  public MonitorSend(Socket socket) {</p><p>  this.socket=socket;</p><p><b>  }</b></p><p>  public void run() {</p><p>  BufferedReade

89、r cin=null;</p><p>  StringBuffer sb=new StringBuffer();</p><p>  Record record=new Record();</p><p><b>  try {</b></p><p>  cin=new BufferedReader(</p&g

90、t;<p>  new InputStreamReader(socket.getInputStream())</p><p>  );</p><p>  String s=cin.readLine();//這時(shí)s的內(nèi)容類似于:GET /a.html HTTP/1.1</p><p>  record.setRequest(s);<

91、;/p><p>  record.setTargetHost(hostName);</p><p>  record.setRequestHost(socket.getInetAddress().getHostAddress());</p><p>  setFileName(s);</p><p>  sb.append(s+"\r\

92、n");</p><p>  while((s=cin.readLine())!=null){</p><p>  sb.append(s+"\r\n");</p><p><b>  }</b></p><p>  } catch(Exception e) {</p>

93、<p>  //JOptionPane.showMessageDialog(null, e.getMessage());</p><p>  } finally {</p><p>  monitorPanel.addSendContent(sb.toString(), record);</p><p><b>  try{</b&g

94、t;</p><p>  if(cin!=null)cin.close();</p><p>  if(socket!=null)socket.close();</p><p>  }catch(Exception e){}</p><p><b>  }</b></p><p><b>

95、;  }</b></p><p>  public synchronized String getFileName() {</p><p>  String temp=null;</p><p>  while((temp=fileName)==null) {</p><p><b>  try{</b>&l

96、t;/p><p><b>  wait();</b></p><p>  }catch(Exception e){}</p><p><b>  }</b></p><p>  fileName=null;</p><p>  return temp;</p>&l

97、t;p><b>  }</b></p><p>  //從類似于GET /a.html HTTP/1.1 的內(nèi)容中截獲出/a.html </p><p>  //傳遞給實(shí)例變量fileName</p><p>  public synchronized void setFileName(String s) {</p><

98、;p>  String[] str=s.split(" ");</p><p>  fileName=str[1];</p><p>  notifyAll();</p><p><b>  }</b></p><p><b>  }</b></p><

99、;p><b>  /**</b></p><p>  * 用來顯示W(wǎng)eb服務(wù)器返回給瀏覽器的信息</p><p>  * @author Administrator</p><p><b>  */</b></p><p>  class MonitorReceive extends Thr

100、ead {</p><p>  private Socket socket;</p><p>  private MonitorSend send;</p><p>  public MonitorReceive(Socket socket,MonitorSend send) {</p><p>  this.socket=socket;&l

101、t;/p><p>  this.send=send;</p><p><b>  }</b></p><p>  public void run() {</p><p>  PrintStream cout=null;// Monitor程序至瀏覽器的輸出流</p><p>  Buffere

102、dInputStream sin=null;// Web服務(wù)器至Monitor程序的輸入流</p><p>  StringBuffer sb=new StringBuffer();// Web服務(wù)器響應(yīng)內(nèi)容</p><p><b>  try {</b></p><p>  cout=new PrintStream(socket.get

103、OutputStream());</p><p>  URL url=new URL("http",hostName,targetPort,send.getFileName());</p><p>  URLConnection conn=url.openConnection();</p><p>  conn.connect();<

104、;/p><p>  sin=new BufferedInputStream(conn.getInputStream());</p><p>  byte[] buffer=new byte[Integer.parseInt(conn.getHeaderField("Content-Length"))];</p><p>  sin.read(buff

105、er);</p><p>  cout.write(buffer,0,buffer.length);</p><p>  sb.append(conn.getHeaderField(null)+"\r\n");</p><p>  sb.append("Server: "+conn.getHeaderField("S

106、erver")+"\r\n");</p><p>  sb.append("ETag: "+conn.getHeaderField("ETag")+"\r\n");</p><p>  sb.append("Last-Modified: "+conn.getHeaderField(

107、"Last-Modified")+"\r\n");</p><p>  sb.append("Content-Type: "+conn.getHeaderField("Content-Type")+"\r\n");</p><p>  sb.append("Content-Leng

108、th: "+conn.getHeaderField("Content-Length")+"\r\n");</p><p>  sb.append("Date: "+conn.getHeaderField("Date")+"\r\n");</p><p>  sb.append(&q

109、uot;\r\n");</p><p>  sb.append(new String(buffer));</p><p>  } catch(Exception e) {</p><p>  //JOptionPane.showMessageDialog(null, e.getMessage());</p><p>  } fina

110、lly {</p><p>  monitorPanel.addReceiveContent(sb.toString());</p><p><b>  try{</b></p><p>  if(cout!=null)cout.close();</p><p>  if(sin!=null)sin.close();&l

111、t;/p><p>  if(socket!=null)socket.close();</p><p>  }catch(Exception e){}</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

112、/b></p><p><b>  }</b></p><p>  附錄2:設(shè)計(jì)程序清單</p><p>  //程序名稱: 網(wǎng)絡(luò)連接建立</p><p>  //程序功能:實(shí)現(xiàn)監(jiān)聽器網(wǎng)絡(luò)監(jiān)聽</p><p>  //程序作者:林慧娟</p><p>  //最后修改

113、日期: 2012/6/29</p><p>  package com.lhj.net;</p><p>  import java.net.*;</p><p>  import java.io.*;</p><p>  import javax.swing.JOptionPane;</p><p>  import

114、 com.jyh.bean.Record;</p><p>  import com.jyh.bean.URLInfo;</p><p>  import com.jyh.gui.MonitorPanel;</p><p>  public class TCPMonitorServer extends Thread{</p><p>  pr

115、ivate int listenPort;</p><p>  private String hostName;</p><p>  private int targetPort;</p><p>  private ServerSocket serverSocket=null;</p><p>  private MonitorPanel

116、monitorPanel;</p><p>  public TCPMonitorServer(URLInfo urlInfo,MonitorPanel monitorPanel) {</p><p>  this.listenPort=urlInfo.getListenPort();</p><p>  this.hostName=urlInfo.getHostN

117、ame();</p><p>  this.targetPort=urlInfo.getTargetPort();</p><p>  this.monitorPanel=monitorPanel;</p><p><b>  }</b></p><p>  public void run() {</p>

118、<p><b>  try {</b></p><p>  serverSocket=new ServerSocket(listenPort);</p><p>  while(true) {</p><p>  Socket socket=serverSocket.accept();</p><p>  Mo

119、nitorSend send=new MonitorSend(socket);</p><p>  MonitorReceive receive=new MonitorReceive(socket,send);</p><p>  send.start();</p><p>  receive.start();</p><p><b&g

120、t;  }</b></p><p>  }catch(Exception e) {</p><p>  JOptionPane.showMessageDialog(monitorPanel,e.getMessage());</p><p><b>  }finally{</b></p><p><b&g

121、t;  try{</b></p><p>  if(serverSocket!=null)serverSocket.close();</p><p>  }catch(Exception e){}</p><p><b>  }</b></p><p><b>  }</b></p

122、><p>  public void close() {</p><p><b>  try{</b></p><p>  if(serverSocket!=null)serverSocket.close();</p><p>  }catch(Exception e){}</p><p><b

123、>  }</b></p><p>  //用來顯示瀏覽器提交給Web服務(wù)器的信息,@author Administrator</p><p>  class MonitorSend extends Thread {</p><p>  private Socket socket;</p><p>  用來持有想訪問的Web服

溫馨提示

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

最新文檔

評論

0/150

提交評論