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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  課程名稱(chēng):操作系統(tǒng)</b></p><p>  題目:基于TCP端口掃描程序</p><p>  院 系: </p><p><b>  班 級(jí): </b></p>

2、<p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)老師: </p><p><b>  目 錄</b></p><p><b>  1 需求分析1</b></p><p>  

3、1.1 課題背景1</p><p>  1.2 本課題研究意義1</p><p>  1.3 安全掃描技術(shù)的產(chǎn)生及其發(fā)展趨勢(shì)1</p><p>  1.4 安全掃描技術(shù)的分類(lèi)2</p><p>  2 端口掃描的相關(guān)知識(shí)3</p><p>  2.1 網(wǎng)絡(luò)端口掃描原理3</p><p&g

4、t;<b>  2.2 端口4</b></p><p>  2.3 相關(guān)協(xié)議4</p><p>  2.4 掃描的定義6</p><p>  2.5 多線(xiàn)程技術(shù)6</p><p>  2.6 網(wǎng)絡(luò)套接字編程7</p><p><b>  3 概要設(shè)計(jì)8</b>&l

5、t;/p><p>  3.1 整體設(shè)計(jì)框架8</p><p>  3.2 流程圖描述9</p><p><b>  4 詳細(xì)設(shè)計(jì)11</b></p><p>  4.1 開(kāi)法環(huán)境11</p><p>  4.2 界面設(shè)計(jì)11</p><p>  4.3 主要類(lèi)說(shuō)明1

6、2</p><p>  4.4 代碼描述12</p><p>  4.4.1 基本信息檢測(cè)模塊12</p><p>  4.4.2 參數(shù)設(shè)計(jì)模塊12</p><p>  4.4.3 端口掃描模塊15</p><p>  4.4.4 結(jié)果輸出模塊16</p><p><b> 

7、 5 調(diào)試分析18</b></p><p>  5.1 編譯及運(yùn)行程序18</p><p>  5.2 系統(tǒng)主界面18</p><p>  5.3 子系統(tǒng)功能測(cè)試18</p><p><b>  6 總結(jié)21</b></p><p>  參 考 文 獻(xiàn)22</p>

8、;<p><b>  1 需求分析</b></p><p><b>  1.1 課題背景</b></p><p>  在21世紀(jì)的今天,計(jì)算機(jī)發(fā)展日新月異,伴隨著網(wǎng)絡(luò)技術(shù)的飛速更新,網(wǎng)絡(luò)規(guī)模迅速增長(zhǎng)和計(jì)算機(jī)系統(tǒng)的日益復(fù)雜,導(dǎo)致新的系統(tǒng)漏洞層出不窮,一些別有用心的人或者木馬程序要想順利的滲透一臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī),無(wú)論使用何種技術(shù),首先必然

9、要尋找計(jì)算機(jī)的漏洞來(lái)為自己的入侵打開(kāi)大門(mén)。端口掃描器是一把雙刃劍,端口掃描器的產(chǎn)生可以使網(wǎng)絡(luò)中的計(jì)算機(jī)及時(shí)的發(fā)現(xiàn)主機(jī)的開(kāi)放與未開(kāi)放的端口狀態(tài)。計(jì)算機(jī)的端口掃描技術(shù)是一種基于主動(dòng)防御型的策略的重要技術(shù)手段。本課題通過(guò)對(duì)計(jì)算機(jī)端口掃描器的研究來(lái)提高對(duì)網(wǎng)絡(luò)中計(jì)算機(jī)的安全的認(rèn)識(shí)。本端口掃描器采用Java語(yǔ)言和Java Socket 編程原理開(kāi)發(fā),在Ubuntu操作系統(tǒng)下通過(guò)測(cè)試。掃描主機(jī)通過(guò)TCP/IP協(xié)議的三次握手與目標(biāo)主機(jī)的指定端口建立一次

10、完整的連接,如果目標(biāo)主機(jī)的此端口在規(guī)定時(shí)間內(nèi)有回復(fù),則說(shuō)明該端口是開(kāi)放的。利用多線(xiàn)程技術(shù)實(shí)現(xiàn)了對(duì)一目標(biāo)IP進(jìn)行設(shè)定數(shù)目的端口掃描。這種掃描器可以在輸入IP的情況下,對(duì)指定的端口范圍進(jìn)行掃描。</p><p>  1.2 本課題研究意義</p><p>  現(xiàn)代社會(huì)是信息化網(wǎng)絡(luò)化的社會(huì),信息是社會(huì)發(fā)展的重要資源。信息安全的保障能力是一個(gè)國(guó)家的綜合國(guó)力經(jīng)濟(jì)競(jìng)爭(zhēng)實(shí)力和生存能力的重要組成部分,是世

11、界各國(guó)在奮力攀登的制高點(diǎn)。網(wǎng)絡(luò)安全是指網(wǎng)絡(luò)系統(tǒng)的硬件軟件及其系統(tǒng)中的數(shù)據(jù)受到保護(hù),不會(huì)因?yàn)榕既坏幕蛘邜阂獾脑蚨獾狡茐?、更改、泄漏,系統(tǒng)連續(xù)可靠的正常的運(yùn)行。網(wǎng)絡(luò)安全包括技術(shù)領(lǐng)域和非技術(shù)領(lǐng)域兩大部分:非技術(shù)領(lǐng)域包括一些制度政策管理安全意識(shí)是填權(quán)等方面的內(nèi)容;技術(shù)領(lǐng)域包括:隱患掃描、防火墻、入侵檢測(cè)、訪(fǎng)問(wèn)控制、虛擬專(zhuān)用網(wǎng)、CA認(rèn)證、操作系統(tǒng)等方面的內(nèi)容。這些技術(shù)的目標(biāo)是保證信息的可控性、可用性、保密性、完整性和不可抵賴(lài)性。</p&

12、gt;<p>  1.3 安全掃描技術(shù)的產(chǎn)生及其發(fā)展趨勢(shì)</p><p>  隨著Internet的不斷發(fā)展,信息安全技術(shù)已經(jīng)成為促進(jìn)經(jīng)濟(jì)發(fā)展、社會(huì)進(jìn)步的巨大推動(dòng)了。端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)的一個(gè)重要的網(wǎng)絡(luò)安全技術(shù),與防火墻、入侵檢測(cè)系統(tǒng)相互配合,能夠有效地提高網(wǎng)絡(luò)安全性。安全掃描是安全技術(shù)領(lǐng)域中的重要的一類(lèi)。通過(guò)掃描能自動(dòng)檢測(cè)遠(yuǎn)程或者本地的主機(jī)系統(tǒng)的信息,包括主機(jī)的基本信息(如計(jì)算機(jī)名、域名

13、、組名、操作系統(tǒng)類(lèi)型號(hào)等)、服務(wù)信息、用戶(hù)信息以及漏洞信息,它的重要性在于能夠?qū)W(wǎng)絡(luò)進(jìn)行安全評(píng)估,及時(shí)發(fā)現(xiàn)安全隱患,防患于未然。任何技術(shù)的誕生都有深刻的思想基礎(chǔ),人們?cè)趯?duì)“安全”認(rèn)識(shí)逐步深化的過(guò)程中,不斷地提出新的安全理論并付諸實(shí)踐。在這個(gè)認(rèn)識(shí)的過(guò)程中有兩次重大的飛躍:第一次飛躍式早在二十世紀(jì)八十年代,人們認(rèn)為信息安全就是信息的保密性,相應(yīng)的采取保障措施就是利用加密機(jī)制和基于計(jì)算機(jī)規(guī)則的訪(fǎng)問(wèn)控制。這個(gè)時(shí)期防火墻和入侵檢測(cè)系統(tǒng)(IDS)進(jìn)

14、一步發(fā)展起來(lái),并在保護(hù)內(nèi)部網(wǎng)絡(luò)中起到了積極作用。Dan Fame和WeitseVenema提出了劃時(shí)代的隱患掃描思想,既然黑客可以查找系統(tǒng)的漏洞,并且針對(duì)這些漏洞對(duì)系統(tǒng)進(jìn)行攻擊,那么隱患掃描程序就可以采取與黑客相同的方法找到系統(tǒng)漏洞,并</p><p>  1.4 安全掃描技術(shù)的分類(lèi)</p><p>  安全掃描技術(shù)工具是一把雙刃劍,既可以被網(wǎng)絡(luò)管理員利用就,又可以被黑客利用。端口掃描技術(shù)

15、和漏洞檢測(cè)技術(shù)是就安全掃描技術(shù)中的關(guān)鍵技術(shù)。下面專(zhuān)門(mén)介紹本軟件的側(cè)重點(diǎn)端口掃描技術(shù)。端口掃描屬于安全探測(cè)技術(shù)范疇,對(duì)應(yīng)于網(wǎng)絡(luò)攻擊技術(shù)中的網(wǎng)絡(luò)信息收集技術(shù)。黑客能否進(jìn)入“房間”,關(guān)鍵在于他是否發(fā)現(xiàn)了打開(kāi)了“門(mén)窗”。也就是說(shuō),關(guān)鍵是能否準(zhǔn)確的收集系統(tǒng)信息。黑客要做的就是構(gòu)造目標(biāo)網(wǎng)絡(luò)中的所有系統(tǒng)地圖,包括操作系統(tǒng)的類(lèi)型,版本號(hào)以及可以在其上運(yùn)行的服務(wù)等。</p><p>  黑客手工收集信息一般遵循以下步驟:</

16、p><p>  (1)獲取主機(jī)名與IP地址:可以通過(guò)使用whois與nslookup等工具。</p><p>  (2)獲得操作系統(tǒng)類(lèi)型信息:標(biāo)識(shí)的最快方法就是試圖telnet至該系統(tǒng),從標(biāo)識(shí)來(lái)判斷。</p><p>  (3) FTP信息:黑客將測(cè)試是否開(kāi)放FTP服務(wù),匿名FTP是否可用,若可用,則試圖發(fā)掘更多的潛在問(wèn)題。</p><p>  

17、(4) TCP/UDP掃描:對(duì)于TCP, telnet可以用來(lái)試圖與某一特定端口連接,這也是手工掃描的基本方法。從返回的標(biāo)識(shí)可以得到更多的信息。從中再分析系統(tǒng)是否開(kāi)放RPC服務(wù)、FINGER, RUSERS和RWHO等比較危險(xiǎn)的服務(wù)。</p><p>  這樣,到這里為止,黑客完成了對(duì)遠(yuǎn)程系統(tǒng)信息的手工掃描。端口掃描軟件就是要盡可能的自動(dòng)地模擬黑客的掃描手段。</p><p>  根據(jù)端口

18、掃描的方法的不同,端口掃描技術(shù)分為五大類(lèi):</p><p>  全開(kāi)掃描:通過(guò)完整的TCP連接探查端口。主要有TCP connect,反向ident.</p><p>  半開(kāi)掃描:通過(guò)不完整的TCP連接探查端口。主要有SYN flag,IP ID header "dumb scan".</p><p>  隱蔽掃描(stealth scanni

19、ng):利用FIN字段來(lái)探查端口。不包含標(biāo)準(zhǔn)三次握手的任一部分。主要有SMACK flag, ACK flags, NULL flags,ALL flags (XMAS).</p><p>  IP段掃描((sweeps scanning):同時(shí)對(duì)一個(gè)網(wǎng)段進(jìn)行掃描。主要有TCP echo, UDP echo, TCP SYN, ICMP echo.</p><p>  2 端口掃描的相關(guān)知

20、識(shí)</p><p>  2.1 網(wǎng)絡(luò)端口掃描原理</p><p>  一個(gè)端口就是一個(gè)潛在的通信信道,也就是一個(gè)入侵通道。對(duì)目標(biāo)計(jì)算機(jī)進(jìn)行端口掃描,能得到許多有用的信息。進(jìn)行掃描的方法很多,可以使手工進(jìn)行掃描,也可以是端口掃描軟件進(jìn)行。在手工進(jìn)行掃描時(shí),需要熟悉各種命令。命令執(zhí)行后的輸出進(jìn)行分析。用掃描軟件進(jìn)行掃描時(shí),許多掃描軟件都有分析數(shù)據(jù)功能。通過(guò)端口掃描,可以得到許多有用的信息,從而

21、發(fā)現(xiàn)系統(tǒng)的安全漏洞。掃描器是一種自動(dòng)檢測(cè)遠(yuǎn)程或本地主機(jī)安全性軟弱點(diǎn)的程序,通過(guò)使用掃描器你可以留痕跡的發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的各種TCP端口的分配及提供的服務(wù)和他們的軟件版本,這就能讓我們間接的或直觀的了解到遠(yuǎn)程主機(jī)所存在的安全問(wèn)題。掃描器通過(guò)選用遠(yuǎn)程TCP/IP不同的端口的服務(wù),并記錄目標(biāo)給予的回答,通過(guò)這種方法,可以搜集到很多關(guān)于目標(biāo)主機(jī)的各種有用的信息(比如:是否能用匿名登陸、是否有可寫(xiě)的FTP目錄、是否能用TELNET,HTTPD是用R

22、OOT還是nobady在跑?。呙璨⒉皇且粋€(gè)直接的攻擊網(wǎng)絡(luò)漏洞的程序,它僅僅能幫助我們發(fā)現(xiàn)目標(biāo)機(jī)的某些內(nèi)在的弱點(diǎn)。一個(gè)好的掃描器能對(duì)它得到的數(shù)據(jù)進(jìn)行分析,幫助我們查找目標(biāo)主機(jī)的漏洞。但它不會(huì)提供進(jìn)入一個(gè)系統(tǒng)的詳細(xì)步驟。</p><p><b>  2.2 端口</b></p><p>  協(xié)議端口是一種抽象,其行為類(lèi)似于TCP/IP連接的邏輯端點(diǎn)。在TCP協(xié)議中,僅

23、僅用連接雙方的IP地址來(lái)標(biāo)識(shí)一條連接顯然是不夠的。在多任務(wù)操作系統(tǒng)中,系統(tǒng)允許多個(gè)進(jìn)程同時(shí)使用TCP協(xié)議進(jìn)行通信,因此必須能夠區(qū)分這些不同的進(jìn)程所對(duì)應(yīng)的不同連接。端口可以區(qū)分這些不同的通信進(jìn)程。每個(gè)端口由一個(gè)正整數(shù)識(shí)別,稱(chēng)為端口號(hào)。信息傳送中每個(gè)信息都載有一個(gè)用來(lái)接收目的端口號(hào)和回復(fù)應(yīng)該發(fā)往的源端口號(hào)?!肮_(kāi)端口” 是由Internet Assigned Numbers Authority(IANA)分配的,并且只能被系統(tǒng)(或root)

24、進(jìn)程或者被授予權(quán)利的用戶(hù)執(zhí)行的程序使用。根據(jù)提供服務(wù)類(lèi)型的不同,端口分為兩種,一種是TCP端口,一種是UDP端口。計(jì)算機(jī)之間相互通信的時(shí)候,分為兩種方式:一種是發(fā)送信息以后,可以確認(rèn)信息是否到達(dá),也就是有應(yīng)答的方式,這種方式大多采用TCP協(xié)議;一種是發(fā)送以后不去確認(rèn)信息是否到達(dá),這種方式大多采用UDP協(xié)議。對(duì)應(yīng)這兩種協(xié)議的服務(wù)提供的端口,也就分為T(mén)CP端口和UDP端口。當(dāng)可能時(shí),對(duì)應(yīng)的TCP和UDP服務(wù)被分配給相同的編號(hào)。</p&

25、gt;<p>  ●公開(kāi)端口:0--1023</p><p>  ●注冊(cè)端口:1024--49151</p><p>  ●動(dòng)態(tài)或私有端口:49152—65535</p><p><b>  2.3 相關(guān)協(xié)議</b></p><p>  TCP/IP協(xié)議棧是網(wǎng)絡(luò)掃描技術(shù)的基礎(chǔ),最基本的掃描方式TCP Con

26、nect()就是利用了TCP協(xié)議;而當(dāng)前流行的端口掃描技術(shù)如SYN掃描(半打開(kāi)掃描)、FIN掃描和NULL掃描等等,都是利用了TCP的三次握手來(lái)完成的。</p><p>  Ⅰ.TCP數(shù)據(jù)包結(jié)構(gòu)</p><p>  一個(gè)TCP數(shù)據(jù)包包括一個(gè)TCP頭,后面是選項(xiàng)和數(shù)據(jù)。它的格式如圖1。</p><p>  圖1 TCP報(bào)頭格式</p><p>

27、  Ⅱ.TCP/IP遵循的原則</p><p>  1.當(dāng)一個(gè)SYN或者FIN數(shù)據(jù)包到達(dá)一個(gè)關(guān)閉的端口,TCP丟棄數(shù)據(jù)包,同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。</p><p>  2.當(dāng)一個(gè)RST數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口,RST被丟棄。</p><p>  3.當(dāng)一個(gè)RST數(shù)據(jù)包到達(dá)一個(gè)關(guān)閉的端口,RST被丟棄。</p><p>  4.當(dāng)一個(gè)不包含AC

28、K的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄,同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。</p><p>  5.當(dāng)一個(gè)SYN關(guān)閉的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄。</p><p>  6.當(dāng)一個(gè)SYN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),正常的三次握手繼續(xù),回答一個(gè)SYN|ACK數(shù)據(jù)包。</p><p>  7.當(dāng)一個(gè)FIN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄。“FIN行為”(關(guān)閉的

29、端口返回RST,監(jiān)聽(tīng)端口丟棄包),所有的URG、PSH和FIN,或者沒(méi)有任何標(biāo)記的TCP數(shù)據(jù)包都會(huì)引起“FIN行為”。</p><p> ?、?TCP三次握手過(guò)程</p><p>  圖2 TCP連接建立過(guò)程</p><p><b>  2.4 掃描的定義</b></p><p>  掃描程序(Scanner)是自動(dòng)檢測(cè)

30、遠(yuǎn)端主機(jī)或者本地主機(jī)安全脆弱性的程序。通過(guò)使用掃描程序一個(gè)用戶(hù)可以發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的安全弱點(diǎn)。目前,絕大多數(shù)操作系統(tǒng)都支持TCP/IP協(xié)議簇,掃描程序查詢(xún)TCP/IP端口并記錄目標(biāo)機(jī)器的響應(yīng)。掃描程序通過(guò)確定下列項(xiàng)目收集目標(biāo)主機(jī)的有用信息:</p><p>  ●當(dāng)前主機(jī)正在進(jìn)行什么服務(wù)?</p><p>  ●哪些用戶(hù)擁有這些服務(wù)?</p><p>  ●是否支持匿

31、名登錄?</p><p>  ●是否有某些網(wǎng)絡(luò)服務(wù)需要鑒別?</p><p><b>  2.5 多線(xiàn)程技術(shù)</b></p><p>  每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線(xiàn)程。進(jìn)程也可能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線(xiàn)程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文

32、。所以線(xiàn)程基本上是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線(xiàn)程的調(diào)度和執(zhí)行。</p><p> ?。?)什么是多線(xiàn)程?</p><p>  多線(xiàn)程是為了使得多個(gè)線(xiàn)程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線(xiàn)程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。</p><p> ?。?)使用線(xiàn)程的好處有以下幾點(diǎn):</p><

33、p>  ●使用線(xiàn)程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理</p><p>  ●用戶(hù)界面可以更加吸引人,這樣比如用戶(hù)點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來(lái)顯示處理的進(jìn)度</p><p>  ●程序的運(yùn)行速度可能加快</p><p>  ●在一些等待的任務(wù)實(shí)現(xiàn)上如用戶(hù)輸入、文件讀寫(xiě)和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線(xiàn)程就比較有用了。在這種情況下我們可以釋

34、放一些珍貴的資源如內(nèi)存占用等等。</p><p>  2.6 網(wǎng)絡(luò)套接字編程</p><p> ?。?)套接字基本概念</p><p>  套接字是應(yīng)用程序通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用的基本操作單元。可以將套接字看作是不同主機(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn):網(wǎng)絡(luò)中兩臺(tái)通信的主機(jī)各自在自己機(jī)器上建立通信的端點(diǎn)──套接字,然后使用套接字進(jìn)行數(shù)據(jù)通信。&l

35、t;/p><p>  一個(gè)套接字是如下描述的一個(gè)結(jié)構(gòu):</p><p>  {協(xié)議,本地地址,本地端口,遠(yuǎn)程地址,遠(yuǎn)程端口}</p><p>  操作系統(tǒng)會(huì)為本地建立的套接字分配一個(gè)唯一的套接字標(biāo)識(shí)號(hào),應(yīng)用程序按該標(biāo)識(shí)號(hào)來(lái)使用套接字進(jìn)行網(wǎng)絡(luò)通信。</p><p>  根據(jù)網(wǎng)絡(luò)通信的特征,套接字主要分為兩類(lèi):流套接字(SOCK_STREAM)和數(shù)據(jù)

36、報(bào)套接字(SOCK_DGRAM)。</p><p>  流套接字是面向連接的,它提供雙向的、有序的、無(wú)差錯(cuò)、無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù),適用于處理大量數(shù)據(jù),提供可靠的服務(wù)。</p><p>  數(shù)據(jù)報(bào)套接字是無(wú)連接的,它支持雙向的數(shù)據(jù)傳輸,具有開(kāi)銷(xiāo)小、數(shù)據(jù)傳輸效率高的特點(diǎn),但不保證數(shù)據(jù)傳輸?shù)目煽啃?、有序性和無(wú)重復(fù)性,適合少量數(shù)據(jù)傳輸、以及時(shí)間敏感的音視頻多媒體數(shù)據(jù)傳輸。</p&

37、gt;<p>  此外,還有一種較少使用的套接字叫原始套接字(SOCK_RAW),可以使用它對(duì)底層協(xié)議如IP或ICMP直接訪(fǎng)問(wèn),在通信與協(xié)議開(kāi)發(fā)時(shí)有時(shí)會(huì)用到。</p><p>  (2)Java Socket 編程原理</p><p>  以J2SDK-1.3為例,Socket和ServerSocket類(lèi)庫(kù)位于java.net包中。ServerSocket用于服務(wù)器端,Soc

38、ket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話(huà)。對(duì)于一個(gè)網(wǎng)絡(luò)連接來(lái)說(shuō),套接字是平等的,并沒(méi)有差別,不因?yàn)樵诜?wù)器端或在客戶(hù)端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過(guò)SocketImpl類(lèi)及其子類(lèi)完成的。   </p><p>  重要的Socket API: </p><p>  j

39、ava.net.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見(jiàn)JDK-1.3文檔。   </p><p>  Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶(hù)端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話(huà)

40、產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。   .</p><p>  getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)InputStream對(duì)象實(shí)例。  </p><p>  getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。   </p><p>  注意:其中g(shù)etI

41、nputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。</p><p><b>  3 概要設(shè)計(jì)</b></p><p>  3.1 整體設(shè)計(jì)框架</p><p>  經(jīng)過(guò)大量的分析與調(diào)研,進(jìn)而設(shè)計(jì)出由以下幾個(gè)模塊組成的簡(jiǎn)單網(wǎng)絡(luò)掃描器。整個(gè)端口

42、掃描器的核心部分是掃描模塊,它是由很多子模塊組成的,其結(jié)構(gòu)如下圖所示</p><p>  圖3 掃描模塊的結(jié)構(gòu)圖</p><p><b>  3.2 流程圖描述</b></p><p><b>  圖4 程序流程圖</b></p><p><b>  4 詳細(xì)設(shè)計(jì)</b><

43、;/p><p><b>  4.1 開(kāi)法環(huán)境</b></p><p>  本掃描器在Ubuntu操作系統(tǒng)下,使用系統(tǒng)自帶的VI編輯器用Java語(yǔ)言編寫(xiě)的,并且所有測(cè)試也在此環(huán)境下進(jìn)行。</p><p><b>  4.2 界面設(shè)計(jì)</b></p><p>  AWT是Swing的基礎(chǔ)。AWT設(shè)計(jì)的初衷是

44、支持開(kāi)發(fā)小應(yīng)用程序的簡(jiǎn)單用戶(hù)界面。但是AWT缺少剪貼板、打印支持、鍵盤(pán)導(dǎo)航等特性,而且原來(lái)的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本元素。Swing的產(chǎn)生主要原因就是AWT不能滿(mǎn)足圖形化用戶(hù)界面發(fā)展的需要。Swing組件幾乎都是輕量組件,與重量組件相比,沒(méi)有本地的對(duì)等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。本次課程設(shè)計(jì)利用了AWT和swing結(jié)合起來(lái)做個(gè)簡(jiǎn)單的界面設(shè)計(jì),其導(dǎo)入語(yǔ)句為:

45、</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  import javax.swing.*;</p><p><b>  具體函數(shù)說(shuō)明為:</b></p><p>  JTextArea Resul

46、t ( ):定義輸入?yún)^(qū)域的大小;</p><p>  JTextField hostname ( ):定義IP域名</p><p>  JTextField minPort():定義最小端口</p><p>  JTextField maxPort( ):定義最大端口</p><p>  JTextField maxThread( ):定義最

47、大線(xiàn)程數(shù)</p><p>  JDialog DLGError( ):定義錯(cuò)誤提示標(biāo)簽</p><p>  Label DLGINFO ( ):定義錯(cuò)誤提示信息</p><p>  Label status( ):定義狀態(tài)表示</p><p>  Button OK ( ):定義確認(rèn)按鈕</p><p>  JButt

48、on Submit ( ):定義確定按鈕</p><p>  JButton Cancel ( ):定義退出按鈕</p><p><b>  4.3 主要類(lèi)說(shuō)明</b></p><p>  class TCPThread extends Thread:利用多線(xiàn)程的方法來(lái)實(shí)現(xiàn)TCP端口掃描,其中:利用調(diào)用run()方法進(jìn)行多線(xiàn)程的運(yùn)行,逐次掃描得

49、出對(duì)應(yīng)的TCP端口號(hào)。還應(yīng)用了網(wǎng)絡(luò)編程套接字進(jìn)行客服端和服務(wù)器端的模擬,用輸入輸出流進(jìn)行信息的交換。</p><p>  class Cancle implements ActionListener:事件監(jiān)聽(tīng)器,相應(yīng)Cancle按鈕</p><p>  class Submit implements ActionListener:事件監(jiān)聽(tīng)器,相應(yīng)Submit按鈕。主要利用java的異常處理

50、機(jī)制進(jìn)行相應(yīng)信息的匹配</p><p>  class OK implements ActionListener:事件監(jiān)聽(tīng)器,相應(yīng)OK按鈕</p><p>  public class Scan:主要進(jìn)行界面化設(shè)計(jì),調(diào)用上面的事件相應(yīng)。 </p><p><b>  4.4 代碼描述</b></p><p>  4.4.

51、1 基本信息檢測(cè)模塊</p><p>  class TCPThread extends Thread </p><p><b>  { </b></p><p>  public static InetAddress hostAddress;</p><p>  public static int MIN_por

52、t;</p><p>  public static int MAX_port;</p><p>  private int threadnum; </p><p>  public TCPThread(String name,int threadnum) </p><p><b>  { </b>&

53、lt;/p><p>  super(name); </p><p>  this.threadnum = threadnum; </p><p><b>  } </b></p><p>  4.4.2 參數(shù)設(shè)計(jì)模塊</p><p>  class SubmitAction

54、implements ActionListener</p><p><b>  {</b></p><p>  public void actionPerformed (ActionEvent a) </p><p><b>  {</b></p><p>  int minPort;</p&

55、gt;<p>  int maxPort;</p><p>  int maxThread;</p><p><b>  try</b></p><p><b>  {</b></p><p>  minPort=Integer.parseInt(PortScanner.minPort

56、.getText());</p><p>  maxPort=Integer.parseInt(PortScanner.maxPort.getText());</p><p>  maxThread=Integer.parseInt(PortScanner.maxThread.getText());</p><p><b>  }</b><

57、;/p><p>  catch(NumberFormatException e)</p><p><b>  {</b></p><p>  PortScanner.DLGINFO.setText("Port number and the number of threads must be an integer!");</

58、p><p>  PortScanner.DLGError.setVisible(true);</p><p>  PortScanner.status.setText("Scan Status:Not Started");</p><p><b>  return;</b></p><p><b&g

59、t;  }</b></p><p><b>  try</b></p><p><b>  {</b></p><p>  TCPThread.hostAddress=InetAddress.getByName(PortScanner.hostname.getText());</p><p&

60、gt;<b>  }</b></p><p>  catch(UnknownHostException e)</p><p><b>  {</b></p><p>  PortScanner.DLGINFO.setText(" Incorrect IP address or address

61、 unreachable! ");</p><p>  PortScanner.DLGError.setVisible(true);</p><p>  PortScanner.status.setText("Scan Status:Not Started");</p><p><b>  return;

62、</b></p><p><b>  }</b></p><p>  if(minPort<0 || minPort>65535 || minPort>maxPort)</p><p><b>  {</b></p><p>  PortScanner.DLGINFO.

63、setText(" Port number is 0-65535! ");</p><p>  PortScanner.DLGError.setVisible(true);</p><p>  return;</p><p&g

64、t;<b>  }</b></p><p>  else TCPThread.MIN_port=minPort;</p><p>  if(maxPort<0 || maxPort>65535 || maxPort<minPort)</p><p><b>  {</b></p><p

65、>  PortScanner.DLGINFO.setText(" Port number is 0-65535! ");</p><p>  PortScanner.DLGError.setVisible(true);</p><p>  Por

66、tScanner.status.setText("Scan Status:Not Started");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  else TCPThread.MAX_port=maxPort;</p>

67、<p>  if(maxThread<1 || maxThread>500)</p><p><b>  {</b></p><p>  PortScanner.DLGINFO.setText(" Integer number of threads for the 1-500!

68、 ");</p><p>  PortScanner.DLGError.setVisible(true);</p><p>  PortScanner.status.setText("Scan Status:Not Started");</p><p><b>  return;</b>&

69、lt;/p><p><b>  }</b></p><p>  PortScanner.Result.setText("");</p><p>  PortScanner.Result.append("Scanning:"+PortScanner.hostname.getText()+"

70、Threads:"+PortScanner.maxThread.getText()+"\n");</p><p>  PortScanner.Result.append("Open Ports:");</p><p>  for(int i=0;i<maxThread;i++)</p><p><b>

71、;  {</b></p><p>  new TCPThread("T" + i,i).start();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

72、<p>  4.4.3 端口掃描模塊</p><p>  public void run() </p><p><b>  {</b></p><p>  int i; </p><p>  Socket theTCPsocket;</p><p>  for (i =

73、MIN_port+threadnum; i < MAX_port; i += Integer.parseInt(PortScanner.maxThread.getText())) </p><p><b>  {</b></p><p>  PortScanner.status.setText("Scan Status: Scan port"

74、+i);</p><p><b>  try</b></p><p><b>  {</b></p><p>  theTCPsocket=new Socket(hostAddress,i);</p><p>  theTCPsocket.close();</p><p> 

75、 PortScanner.Result.append(i+",");</p><p><b>  }</b></p><p>  catch (IOException e)</p><p><b>  {}</b></p><p><b>  }</b>&l

76、t;/p><p>  if (i==MAX_port)</p><p><b>  {</b></p><p>  PortScanner.Result.append("\n"+"The scan is complete...");</p><p>  PortScanner.stat

77、us.setText("Scanning Status: Completed!");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.4.4 結(jié)果輸出模塊<

78、/p><p>  public class PortScanner</p><p><b>  {</b></p><p>  public static JFrame main=new JFrame("Port Scanner");</p><p>  public static JTextArea R

79、esult=new JTextArea("",4,43);</p><p>  public static JScrollPane scroll=new JScrollPane(Result);</p><p>  public static JTextField hostname=new JTextField("localhost",8);<

80、/p><p>  public static JTextField minPort=new JTextField("0",4);</p><p>  public static JTextField maxPort=new JTextField("1000",4);</p><p>  public static JTextFie

81、ld maxThread=new JTextField("100",3);</p><p>  public static JDialog DLGError=new JDialog(main,"Wrong!");</p><p>  public static Label DLGINFO=new Label("");</p&

82、gt;<p>  public static Label status=new Label("Scan Status:Not Started ");</p><p>  public static void main(String[] args)</p><p><b>  {</b></p><p>  ma

83、in.setSize(520,230);</p><p>  main.setLocation(300,300);</p><p>  main.setResizable(false);</p><p>  DLGError.setSize(350,100);</p><p>  DLGError.setLocation(400,400);&

84、lt;/p><p>  JPanel mainPanel = new JPanel();</p><p>  Label H=new Label("IP Address:");</p><p>  Label P1=new Label("Port Range:");</p><p>  Label P2=n

85、ew Label("~");</p><p>  Label TNUM=new Label("Threads:");</p><p>  Label RST=new Label("Scan Results: ");</p><p>

86、  Label con=new Label(" ");</p><p>  Result.setLineWrap(true);</p><p>  Res

87、ult.setEditable(false);</p><p>  JButton OK = new JButton("OK");</p><p>  JButton Submit = new JButton("OK");</p><p>  JButton Cancel = new JButton("Cancle&

88、quot;);</p><p>  Container mPanel = main.getContentPane();</p><p>  Container dPanel = DLGError.getContentPane();</p><p>  mPanel.setLayout(new FlowLayout(FlowLayout.LEFT));</p&g

89、t;<p>  dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));</p><p>  scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);</p><p>  mPanel.add(H);</p><p

90、>  mPanel.add(hostname);</p><p>  mPanel.add(P1);</p><p>  mPanel.add(minPort);</p><p>  mPanel.add(P2);</p><p>  mPanel.add(maxPort);</p><p>  mPanel.a

91、dd(TNUM);</p><p>  mPanel.add(maxThread);</p><p>  mPanel.add(RST);</p><p>  mPanel.add(scroll);</p><p>  mPanel.add(con);</p><p>  mPanel.add(Submit);<

92、/p><p>  mPanel.add(Cancel);</p><p>  mPanel.add(status);</p><p>  dPanel.add(DLGINFO);</p><p>  dPanel.add(OK);</p><p>  main.setVisible(true);</p>&l

93、t;p>  Submit.addActionListener(new SubmitAction());</p><p>  Cancel.addActionListener(new CancleAction());</p><p>  OK.addActionListener(new OKAction());</p><p><b>  }</

94、b></p><p><b>  }</b></p><p><b>  5 調(diào)試分析</b></p><p>  5.1 編譯及運(yùn)行程序</p><p>  圖5 編譯及運(yùn)行程序</p><p><b>  5.2 系統(tǒng)主界面</b></p

95、><p><b>  圖6 主界面</b></p><p>  利用java的awt,swing 做界面,界面相對(duì)比較簡(jiǎn)單。主要顯示的信息包括:程序名字,IP地址,端口范圍,線(xiàn)程數(shù)等基本信息。輸入相關(guān)的信息,就可以進(jìn)入掃描系統(tǒng)。</p><p>  5.3 子系統(tǒng)功能測(cè)試</p><p><b>  圖7 輸入端口

96、錯(cuò)誤</b></p><p>  當(dāng)輸入錯(cuò)誤的端口號(hào)時(shí),提示錯(cuò)誤信息“端口號(hào)或線(xiàn)程數(shù)錯(cuò)誤!端口號(hào)和線(xiàn)程數(shù)必須為整數(shù)!”</p><p><b>  圖8 輸入端口錯(cuò)誤</b></p><p>  當(dāng)輸入的端口范圍不在所規(guī)定的范圍內(nèi),提出錯(cuò)誤信息“端口需界于0-65535!”</p><p><b>

97、  圖9 輸入線(xiàn)程錯(cuò)誤</b></p><p>  當(dāng)輸入的線(xiàn)程數(shù)范圍不在所規(guī)定的范圍內(nèi),提出錯(cuò)誤信息“線(xiàn)程數(shù)位1-500!的整數(shù)!”</p><p>  圖10 偵測(cè)本主機(jī)IP地址</p><p>  通過(guò)偵測(cè)本主機(jī)的IP地址,檢測(cè)得到了相應(yīng)的端口,通過(guò)這些端口,我們可以適量的做安全評(píng)估和安全防御。</p><p>  圖11

98、偵測(cè)局域網(wǎng)其他計(jì)算機(jī)IP地址</p><p>  局域網(wǎng)其他IP地址檢測(cè)的實(shí)例展示。</p><p><b>  6 總結(jié)</b></p><p>  本次課程設(shè)計(jì)我選的課題是編寫(xiě)一個(gè)簡(jiǎn)單的端口掃描程序,該課題要求在Linux下使用socket和網(wǎng)絡(luò)編程方法進(jìn)行編寫(xiě),且該程序可掃描局域網(wǎng)的某計(jì)算機(jī)開(kāi)放了哪些端口。因此我選擇在Ubuntu操作系統(tǒng)

99、下使用該系統(tǒng)自帶的VI編輯器使用Java語(yǔ)言進(jìn)行編寫(xiě),并且在該環(huán)境下以我所住的宿舍的網(wǎng)絡(luò)作為局域網(wǎng)進(jìn)行測(cè)試。經(jīng)過(guò)這兩個(gè)星期的課程設(shè)計(jì),通過(guò)圖書(shū)館和網(wǎng)上查找資料,順利完成了設(shè)計(jì)和開(kāi)發(fā),端口掃描系統(tǒng)開(kāi)發(fā)完畢。系統(tǒng)基本符合要求,但還存在以下幾個(gè)小問(wèn)題:</p><p>  由于對(duì)Java的GUI編程不太熟悉,所以程序的界面設(shè)計(jì)得不夠完美。</p><p>  掃描狀態(tài)的輸出函數(shù)的速度跟不上端口掃

100、描的速度,最后程序掃描結(jié)束時(shí),掃描狀態(tài)函數(shù)還在繼續(xù)運(yùn)行,程序運(yùn)行無(wú)法達(dá)到一致性。</p><p>  由于時(shí)間比較匆促,這兩個(gè)問(wèn)題還沒(méi)解決出來(lái),這也是本次課程設(shè)計(jì)結(jié)束后還需繼續(xù)完善的。</p><p>  在整個(gè)設(shè)計(jì)過(guò)程中,出現(xiàn)過(guò)很多的問(wèn)題,得到了老師和同學(xué)的幫助,在不斷學(xué)習(xí)的過(guò)程中我體會(huì)到:</p><p>  1、這次課程設(shè)計(jì)是一個(gè)不斷學(xué)習(xí)的過(guò)程,從設(shè)計(jì)初的模糊

101、認(rèn)識(shí)到最后能夠順利完成,我體會(huì)到在實(shí)踐中學(xué)習(xí)的重要性。</p><p>  2、由于開(kāi)始時(shí)對(duì)系統(tǒng)缺乏整體認(rèn)識(shí),不具備軟件開(kāi)發(fā)思想,對(duì)系統(tǒng)的功能需求分析的要求認(rèn)識(shí)不夠清楚,使得后續(xù)的工作不得不經(jīng)常返回去修改數(shù)據(jù)表和個(gè)別代碼。使我體會(huì)到在設(shè)計(jì)中的每一步的重要性,如果上一個(gè)步驟不能很好的完成,在后續(xù)的設(shè)計(jì)將會(huì)付出幾倍的代價(jià)。深刻體會(huì)軟件工程的重要性。</p><p>  3、在設(shè)計(jì)過(guò)程中,遇到很

102、多困難,我學(xué)會(huì)通過(guò)別人的代碼理解語(yǔ)言的含義但這并不是抄襲,然后根據(jù)自己的設(shè)計(jì)要求編寫(xiě)代碼。</p><p>  4、設(shè)計(jì)過(guò)程中,由于要實(shí)現(xiàn)某些功能,網(wǎng)上資源解決了我的問(wèn)題。多借鑒網(wǎng)絡(luò)資源也是學(xué)好軟件編程一個(gè)不錯(cuò)的方法,但自己要有創(chuàng)新。</p><p>  總之,通過(guò)這次課程設(shè)計(jì),我深刻體會(huì)到要做好一個(gè)完整的系統(tǒng),需要有系統(tǒng)的思維方式和方法,對(duì)待一個(gè)新的問(wèn)題,要耐心、要善于運(yùn)用已有的資源來(lái)充

103、實(shí)自己。同時(shí)我也深刻的認(rèn)識(shí)到,在對(duì)待一個(gè)新事物時(shí),一定要從整體考慮,完成一步之后再作下一步,這樣對(duì)于系統(tǒng)而言才能更加有效。就比如說(shuō)在這次的設(shè)計(jì),我不但對(duì)java有了深刻的認(rèn)識(shí),積累了使用軟件工程的思想來(lái)開(kāi)發(fā)軟件的經(jīng)驗(yàn),同時(shí)最重要的是摸索出了一套考慮問(wèn)題和解決問(wèn)題的方法,這對(duì)于我以后的學(xué)習(xí)和工作受益匪淺。</p><p><b>  參 考 文 獻(xiàn)</b></p><p&g

104、t;  [1] 孫鐘秀, 費(fèi)翔林, 駱斌. 操作系統(tǒng)教程(第4版) [M]. 北京: 高等教育出版社, 2008</p><p>  [2] 湯子瀛, 湯小丹, 梁紅兵等. 計(jì)算機(jī)操作系統(tǒng)(第三版) [M]. 西安: 西安電子科技大學(xué)出版社, 2007</p><p>  [3] 吳功宜. 計(jì)算機(jī)網(wǎng)絡(luò)(第2版) [M]. 北京: 清華大學(xué)出版社, 2007.</p>&

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論