版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 課程名稱:操作系統(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ù)的分類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 多線程技術(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 開法環(huán)境11</p><p> 4.2 界面設(shè)計(jì)11</p><p> 4.3 主要類說明1
6、2</p><p> 4.4 代碼描述12</p><p> 4.4.1 基本信息檢測模塊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)功能測試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ī)模迅速增長和計(jì)算機(jī)系統(tǒng)的日益復(fù)雜,導(dǎo)致新的系統(tǒng)漏洞層出不窮,一些別有用心的人或者木馬程序要想順利的滲透一臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī),無論使用何種技術(shù),首先必然
9、要尋找計(jì)算機(jī)的漏洞來為自己的入侵打開大門。端口掃描器是一把雙刃劍,端口掃描器的產(chǎn)生可以使網(wǎng)絡(luò)中的計(jì)算機(jī)及時(shí)的發(fā)現(xiàn)主機(jī)的開放與未開放的端口狀態(tài)。計(jì)算機(jī)的端口掃描技術(shù)是一種基于主動(dòng)防御型的策略的重要技術(shù)手段。本課題通過對(duì)計(jì)算機(jī)端口掃描器的研究來提高對(duì)網(wǎng)絡(luò)中計(jì)算機(jī)的安全的認(rèn)識(shí)。本端口掃描器采用Java語言和Java Socket 編程原理開發(fā),在Ubuntu操作系統(tǒng)下通過測試。掃描主機(jī)通過TCP/IP協(xié)議的三次握手與目標(biāo)主機(jī)的指定端口建立一次
10、完整的連接,如果目標(biāo)主機(jī)的此端口在規(guī)定時(shí)間內(nèi)有回復(fù),則說明該端口是開放的。利用多線程技術(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è)國家的綜合國力經(jīng)濟(jì)競爭實(shí)力和生存能力的重要組成部分,是世
11、界各國在奮力攀登的制高點(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)域包括:隱患掃描、防火墻、入侵檢測、訪問控制、虛擬專用網(wǎng)、CA認(rèn)證、操作系統(tǒng)等方面的內(nèi)容。這些技術(shù)的目標(biāo)是保證信息的可控性、可用性、保密性、完整性和不可抵賴性。</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ù),與防火墻、入侵檢測系統(tǒng)相互配合,能夠有效地提高網(wǎng)絡(luò)安全性。安全掃描是安全技術(shù)領(lǐng)域中的重要的一類。通過掃描能自動(dòng)檢測遠(yuǎn)程或者本地的主機(jī)系統(tǒng)的信息,包括主機(jī)的基本信息(如計(jì)算機(jī)名、域名
13、、組名、操作系統(tǒng)類型號(hào)等)、服務(wù)信息、用戶信息以及漏洞信息,它的重要性在于能夠?qū)W(wǎng)絡(luò)進(jìn)行安全評(píng)估,及時(shí)發(fā)現(xiàn)安全隱患,防患于未然。任何技術(shù)的誕生都有深刻的思想基礎(chǔ),人們?cè)趯?duì)“安全”認(rèn)識(shí)逐步深化的過程中,不斷地提出新的安全理論并付諸實(shí)踐。在這個(gè)認(rèn)識(shí)的過程中有兩次重大的飛躍:第一次飛躍式早在二十世紀(jì)八十年代,人們認(rèn)為信息安全就是信息的保密性,相應(yīng)的采取保障措施就是利用加密機(jī)制和基于計(jì)算機(jī)規(guī)則的訪問控制。這個(gè)時(shí)期防火墻和入侵檢測系統(tǒng)(IDS)進(jìn)
14、一步發(fā)展起來,并在保護(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ù)的分類</p><p> 安全掃描技術(shù)工具是一把雙刃劍,既可以被網(wǎng)絡(luò)管理員利用就,又可以被黑客利用。端口掃描技術(shù)
15、和漏洞檢測技術(shù)是就安全掃描技術(shù)中的關(guān)鍵技術(shù)。下面專門介紹本軟件的側(cè)重點(diǎn)端口掃描技術(shù)。端口掃描屬于安全探測技術(shù)范疇,對(duì)應(yīng)于網(wǎng)絡(luò)攻擊技術(shù)中的網(wǎng)絡(luò)信息收集技術(shù)。黑客能否進(jìn)入“房間”,關(guān)鍵在于他是否發(fā)現(xiàn)了打開了“門窗”。也就是說,關(guān)鍵是能否準(zhǔn)確的收集系統(tǒng)信息。黑客要做的就是構(gòu)造目標(biāo)網(wǎng)絡(luò)中的所有系統(tǒng)地圖,包括操作系統(tǒng)的類型,版本號(hào)以及可以在其上運(yùn)行的服務(wù)等。</p><p> 黑客手工收集信息一般遵循以下步驟:</
16、p><p> (1)獲取主機(jī)名與IP地址:可以通過使用whois與nslookup等工具。</p><p> (2)獲得操作系統(tǒng)類型信息:標(biāo)識(shí)的最快方法就是試圖telnet至該系統(tǒng),從標(biāo)識(shí)來判斷。</p><p> (3) FTP信息:黑客將測試是否開放FTP服務(wù),匿名FTP是否可用,若可用,則試圖發(fā)掘更多的潛在問題。</p><p>
17、(4) TCP/UDP掃描:對(duì)于TCP, telnet可以用來試圖與某一特定端口連接,這也是手工掃描的基本方法。從返回的標(biāo)識(shí)可以得到更多的信息。從中再分析系統(tǒng)是否開放RPC服務(wù)、FINGER, RUSERS和RWHO等比較危險(xiǎn)的服務(wù)。</p><p> 這樣,到這里為止,黑客完成了對(duì)遠(yuǎn)程系統(tǒng)信息的手工掃描。端口掃描軟件就是要盡可能的自動(dòng)地模擬黑客的掃描手段。</p><p> 根據(jù)端口
18、掃描的方法的不同,端口掃描技術(shù)分為五大類:</p><p> 全開掃描:通過完整的TCP連接探查端口。主要有TCP connect,反向ident.</p><p> 半開掃描:通過不完整的TCP連接探查端口。主要有SYN flag,IP ID header "dumb scan".</p><p> 隱蔽掃描(stealth scanni
19、ng):利用FIN字段來探查端口。不包含標(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ù)功能。通過端口掃描,可以得到許多有用的信息,從而
21、發(fā)現(xiàn)系統(tǒng)的安全漏洞。掃描器是一種自動(dòng)檢測遠(yuǎn)程或本地主機(jī)安全性軟弱點(diǎn)的程序,通過使用掃描器你可以留痕跡的發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的各種TCP端口的分配及提供的服務(wù)和他們的軟件版本,這就能讓我們間接的或直觀的了解到遠(yuǎn)程主機(jī)所存在的安全問題。掃描器通過選用遠(yuǎn)程TCP/IP不同的端口的服務(wù),并記錄目標(biāo)給予的回答,通過這種方法,可以搜集到很多關(guān)于目標(biāo)主機(jī)的各種有用的信息(比如:是否能用匿名登陸、是否有可寫的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é)議端口是一種抽象,其行為類似于TCP/IP連接的邏輯端點(diǎn)。在TCP協(xié)議中,僅
23、僅用連接雙方的IP地址來標(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í)別,稱為端口號(hào)。信息傳送中每個(gè)信息都載有一個(gè)用來接收目的端口號(hào)和回復(fù)應(yīng)該發(fā)往的源端口號(hào)?!肮_端口” 是由Internet Assigned Numbers Authority(IANA)分配的,并且只能被系統(tǒng)(或root)
24、進(jìn)程或者被授予權(quán)利的用戶執(zhí)行的程序使用。根據(jù)提供服務(wù)類型的不同,端口分為兩種,一種是TCP端口,一種是UDP端口。計(jì)算機(jī)之間相互通信的時(shí)候,分為兩種方式:一種是發(fā)送信息以后,可以確認(rèn)信息是否到達(dá),也就是有應(yīng)答的方式,這種方式大多采用TCP協(xié)議;一種是發(fā)送以后不去確認(rèn)信息是否到達(dá),這種方式大多采用UDP協(xié)議。對(duì)應(yīng)這兩種協(xié)議的服務(wù)提供的端口,也就分為TCP端口和UDP端口。當(dāng)可能時(shí),對(duì)應(yīng)的TCP和UDP服務(wù)被分配給相同的編號(hào)。</p&
25、gt;<p> ●公開端口: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掃描(半打開掃描)、FIN掃描和NULL掃描等等,都是利用了TCP的三次握手來完成的。</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)聽端口,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)聽端口時(shí),數(shù)據(jù)包被丟棄,同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。</p><p> 5.當(dāng)一個(gè)SYN關(guān)閉的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽端口時(shí),數(shù)據(jù)包被丟棄。</p><p> 6.當(dāng)一個(gè)SYN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽端口時(shí),正常的三次握手繼續(xù),回答一個(gè)SYN|ACK數(shù)據(jù)包。</p><p> 7.當(dāng)一個(gè)FIN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽端口時(shí),數(shù)據(jù)包被丟棄?!癋IN行為”(關(guān)閉的
29、端口返回RST,監(jiān)聽端口丟棄包),所有的URG、PSH和FIN,或者沒有任何標(biāo)記的TCP數(shù)據(jù)包都會(huì)引起“FIN行為”。</p><p> ?、?TCP三次握手過程</p><p> 圖2 TCP連接建立過程</p><p><b> 2.4 掃描的定義</b></p><p> 掃描程序(Scanner)是自動(dòng)檢測
30、遠(yuǎn)端主機(jī)或者本地主機(jī)安全脆弱性的程序。通過使用掃描程序一個(gè)用戶可以發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的安全弱點(diǎn)。目前,絕大多數(shù)操作系統(tǒng)都支持TCP/IP協(xié)議簇,掃描程序查詢TCP/IP端口并記錄目標(biāo)機(jī)器的響應(yīng)。掃描程序通過確定下列項(xiàng)目收集目標(biāo)主機(jī)的有用信息:</p><p> ●當(dāng)前主機(jī)正在進(jìn)行什么服務(wù)?</p><p> ●哪些用戶擁有這些服務(wù)?</p><p> ●是否支持匿
31、名登錄?</p><p> ●是否有某些網(wǎng)絡(luò)服務(wù)需要鑒別?</p><p><b> 2.5 多線程技術(shù)</b></p><p> 每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文
32、。所以線程基本上是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。</p><p> ?。?)什么是多線程?</p><p> 多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。</p><p> ?。?)使用線程的好處有以下幾點(diǎn):</p><
33、p> ●使用線程可以把占據(jù)長時(shí)間的程序中的任務(wù)放到后臺(tái)去處理</p><p> ●用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來顯示處理的進(jìn)度</p><p> ●程序的運(yùn)行速度可能加快</p><p> ●在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋
34、放一些珍貴的資源如內(nèi)存占用等等。</p><p> 2.6 網(wǎng)絡(luò)套接字編程</p><p> ?。?)套接字基本概念</p><p> 套接字是應(yīng)用程序通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用的基本操作單元??梢詫⑻捉幼挚醋魇遣煌鳈C(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)來使用套接字進(jìn)行網(wǎng)絡(luò)通信。</p><p> 根據(jù)網(wǎng)絡(luò)通信的特征,套接字主要分為兩類:流套接字(SOCK_STREAM)和數(shù)據(jù)
36、報(bào)套接字(SOCK_DGRAM)。</p><p> 流套接字是面向連接的,它提供雙向的、有序的、無差錯(cuò)、無重復(fù)并且無記錄邊界的數(shù)據(jù)流服務(wù),適用于處理大量數(shù)據(jù),提供可靠的服務(wù)。</p><p> 數(shù)據(jù)報(bào)套接字是無連接的,它支持雙向的數(shù)據(jù)傳輸,具有開銷小、數(shù)據(jù)傳輸效率高的特點(diǎn),但不保證數(shù)據(jù)傳輸?shù)目煽啃浴⒂行蛐院蜔o重復(fù)性,適合少量數(shù)據(jù)傳輸、以及時(shí)間敏感的音視頻多媒體數(shù)據(jù)傳輸。</p&
37、gt;<p> 此外,還有一種較少使用的套接字叫原始套接字(SOCK_RAW),可以使用它對(duì)底層協(xié)議如IP或ICMP直接訪問,在通信與協(xié)議開發(fā)時(shí)有時(shí)會(huì)用到。</p><p> ?。?)Java Socket 編程原理</p><p> 以J2SDK-1.3為例,Socket和ServerSocket類庫位于java.net包中。ServerSocket用于服務(wù)器端,Soc
38、ket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。 </p><p> 重要的Socket API: </p><p> j
39、ava.net.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見JDK-1.3文檔。 </p><p> Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語,它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(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)過大量的分析與調(diào)研,進(jìn)而設(shè)計(jì)出由以下幾個(gè)模塊組成的簡單網(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 開法環(huán)境</b></p><p> 本掃描器在Ubuntu操作系統(tǒng)下,使用系統(tǒng)自帶的VI編輯器用Java語言編寫的,并且所有測試也在此環(huán)境下進(jìn)行。</p><p><b> 4.2 界面設(shè)計(jì)</b></p><p> AWT是Swing的基礎(chǔ)。AWT設(shè)計(jì)的初衷是
44、支持開發(fā)小應(yīng)用程序的簡單用戶界面。但是AWT缺少剪貼板、打印支持、鍵盤導(dǎo)航等特性,而且原來的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本元素。Swing的產(chǎn)生主要原因就是AWT不能滿足圖形化用戶界面發(fā)展的需要。Swing組件幾乎都是輕量組件,與重量組件相比,沒有本地的對(duì)等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。本次課程設(shè)計(jì)利用了AWT和swing結(jié)合起來做個(gè)簡單的界面設(shè)計(jì),其導(dǎo)入語句為:
45、</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import javax.swing.*;</p><p><b> 具體函數(shù)說明為:</b></p><p> JTextArea Resul
46、t ( ):定義輸入?yún)^(qū)域的大?。?lt;/p><p> JTextField hostname ( ):定義IP域名</p><p> JTextField minPort():定義最小端口</p><p> JTextField maxPort( ):定義最大端口</p><p> JTextField maxThread( ):定義最
47、大線程數(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 主要類說明</b></p><p> class TCPThread extends Thread:利用多線程的方法來實(shí)現(xiàn)TCP端口掃描,其中:利用調(diào)用run()方法進(jì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)聽器,相應(yīng)Cancle按鈕</p><p> class Submit implements ActionListener:事件監(jiān)聽器,相應(yīng)Submit按鈕。主要利用java的異常處理
50、機(jī)制進(jìn)行相應(yīng)信息的匹配</p><p> class OK implements ActionListener:事件監(jiān)聽器,相應(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 基本信息檢測模塊</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ì)比較簡單。主要顯示的信息包括:程序名字,IP地址,端口范圍,線程數(shù)等基本信息。輸入相關(guān)的信息,就可以進(jìn)入掃描系統(tǒng)。</p><p> 5.3 子系統(tǒng)功能測試</p><p><b> 圖7 輸入端口
96、錯(cuò)誤</b></p><p> 當(dāng)輸入錯(cuò)誤的端口號(hào)時(shí),提示錯(cuò)誤信息“端口號(hào)或線程數(shù)錯(cuò)誤!端口號(hào)和線程數(shù)必須為整數(shù)!”</p><p><b> 圖8 輸入端口錯(cuò)誤</b></p><p> 當(dāng)輸入的端口范圍不在所規(guī)定的范圍內(nèi),提出錯(cuò)誤信息“端口需界于0-65535!”</p><p><b>
97、 圖9 輸入線程錯(cuò)誤</b></p><p> 當(dāng)輸入的線程數(shù)范圍不在所規(guī)定的范圍內(nèi),提出錯(cuò)誤信息“線程數(shù)位1-500!的整數(shù)!”</p><p> 圖10 偵測本主機(jī)IP地址</p><p> 通過偵測本主機(jī)的IP地址,檢測得到了相應(yīng)的端口,通過這些端口,我們可以適量的做安全評(píng)估和安全防御。</p><p> 圖11
98、偵測局域網(wǎng)其他計(jì)算機(jī)IP地址</p><p> 局域網(wǎng)其他IP地址檢測的實(shí)例展示。</p><p><b> 6 總結(jié)</b></p><p> 本次課程設(shè)計(jì)我選的課題是編寫一個(gè)簡單的端口掃描程序,該課題要求在Linux下使用socket和網(wǎng)絡(luò)編程方法進(jìn)行編寫,且該程序可掃描局域網(wǎng)的某計(jì)算機(jī)開放了哪些端口。因此我選擇在Ubuntu操作系統(tǒng)
99、下使用該系統(tǒng)自帶的VI編輯器使用Java語言進(jìn)行編寫,并且在該環(huán)境下以我所住的宿舍的網(wǎng)絡(luò)作為局域網(wǎng)進(jìn)行測試。經(jīng)過這兩個(gè)星期的課程設(shè)計(jì),通過圖書館和網(wǎng)上查找資料,順利完成了設(shè)計(jì)和開發(fā),端口掃描系統(tǒng)開發(fā)完畢。系統(tǒng)基本符合要求,但還存在以下幾個(gè)小問題:</p><p> 由于對(duì)Java的GUI編程不太熟悉,所以程序的界面設(shè)計(jì)得不夠完美。</p><p> 掃描狀態(tài)的輸出函數(shù)的速度跟不上端口掃
100、描的速度,最后程序掃描結(jié)束時(shí),掃描狀態(tài)函數(shù)還在繼續(xù)運(yùn)行,程序運(yùn)行無法達(dá)到一致性。</p><p> 由于時(shí)間比較匆促,這兩個(gè)問題還沒解決出來,這也是本次課程設(shè)計(jì)結(jié)束后還需繼續(xù)完善的。</p><p> 在整個(gè)設(shè)計(jì)過程中,出現(xiàn)過很多的問題,得到了老師和同學(xué)的幫助,在不斷學(xué)習(xí)的過程中我體會(huì)到:</p><p> 1、這次課程設(shè)計(jì)是一個(gè)不斷學(xué)習(xí)的過程,從設(shè)計(jì)初的模糊
101、認(rèn)識(shí)到最后能夠順利完成,我體會(huì)到在實(shí)踐中學(xué)習(xí)的重要性。</p><p> 2、由于開始時(shí)對(duì)系統(tǒng)缺乏整體認(rèn)識(shí),不具備軟件開發(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ì)過程中,遇到很
102、多困難,我學(xué)會(huì)通過別人的代碼理解語言的含義但這并不是抄襲,然后根據(jù)自己的設(shè)計(jì)要求編寫代碼。</p><p> 4、設(shè)計(jì)過程中,由于要實(shí)現(xiàn)某些功能,網(wǎng)上資源解決了我的問題。多借鑒網(wǎng)絡(luò)資源也是學(xué)好軟件編程一個(gè)不錯(cuò)的方法,但自己要有創(chuàng)新。</p><p> 總之,通過這次課程設(shè)計(jì),我深刻體會(huì)到要做好一個(gè)完整的系統(tǒng),需要有系統(tǒng)的思維方式和方法,對(duì)待一個(gè)新的問題,要耐心、要善于運(yùn)用已有的資源來充
103、實(shí)自己。同時(shí)我也深刻的認(rèn)識(shí)到,在對(duì)待一個(gè)新事物時(shí),一定要從整體考慮,完成一步之后再作下一步,這樣對(duì)于系統(tǒng)而言才能更加有效。就比如說在這次的設(shè)計(jì),我不但對(duì)java有了深刻的認(rèn)識(shí),積累了使用軟件工程的思想來開發(fā)軟件的經(jīng)驗(yàn),同時(shí)最重要的是摸索出了一套考慮問題和解決問題的方法,這對(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---端口掃描工具設(shè)計(jì)
- 端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---端口掃描工具設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- H2003031196_唐玉林_多線程的TCP端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn).rar
- H2003031196_唐玉林_多線程的TCP端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn).rar
- asp.net多線程的tcp端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn)(源代碼+論文)
- 操作系統(tǒng)程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告-操作系統(tǒng)模擬實(shí)現(xiàn)
- asp.net多線程的tcp端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn)(源代碼+論文)
- 操作系統(tǒng)程序調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- H2003031196_唐玉林_多線程的TCP端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn).rar
- H2003031196_唐玉林_多線程的TCP端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn).rar
- 操作系統(tǒng)課程設(shè)計(jì)--簡單的聊天程序
- 操作系統(tǒng)課程設(shè)計(jì)--簡單的聊天程序
- 端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論