操作系統(tǒng)課程設計--基于tcp端口掃描程序_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、<p>  姓 名: </p><p>  學 號: </p><p>  指導老師: </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 安全掃描技術的產(chǎn)生及其發(fā)展趨勢1</p><p>  1.4 安全掃描技術的分類2</p><p>  2 端口掃描的相關知識3</p><p>  2.1 網(wǎng)絡端口掃描原理3</p><p&g

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

5、t;/p><p>  3.1 整體設計框架8</p><p>  3.2 流程圖描述9</p><p><b>  4 詳細設計11</b></p><p>  4.1 開法環(huán)境11</p><p>  4.2 界面設計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ù)設計模塊12</p><p>  4.4.3 端口掃描模塊15</p><p>  4.4.4 結果輸出模塊16</p><p><b> 

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

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

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

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

11、界各國在奮力攀登的制高點。網(wǎng)絡安全是指網(wǎng)絡系統(tǒng)的硬件軟件及其系統(tǒng)中的數(shù)據(jù)受到保護,不會因為偶然的或者惡意的原因而遭到破壞、更改、泄漏,系統(tǒng)連續(xù)可靠的正常的運行。網(wǎng)絡安全包括技術領域和非技術領域兩大部分:非技術領域包括一些制度政策管理安全意識是填權等方面的內(nèi)容;技術領域包括:隱患掃描、防火墻、入侵檢測、訪問控制、虛擬專用網(wǎng)、CA認證、操作系統(tǒng)等方面的內(nèi)容。這些技術的目標是保證信息的可控性、可用性、保密性、完整性和不可抵賴性。</p&

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

34、放一些珍貴的資源如內(nèi)存占用等等。</p><p>  2.6 網(wǎng)絡套接字編程</p><p>  (1)套接字基本概念</p><p>  套接字是應用程序通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信應用的基本操作單元??梢詫⑻捉幼挚醋魇遣煌鳈C間的進程進行雙向通信的端點:網(wǎng)絡中兩臺通信的主機各自在自己機器上建立通信的端點──套接字,然后使用套接字進行數(shù)據(jù)通信。&l

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

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

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

38、ket是建立網(wǎng)絡連接時使用的。在連接成功時,應用程序兩端都會產(chǎn)生一個Socket實例,操作這個實例,完成所需的會話。對于一個網(wǎng)絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產(chǎn)生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。   </p><p>  重要的Socket API: </p><p>  j

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

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

41、nputStream和getOutputStream方法均會產(chǎn)生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。</p><p><b>  3 概要設計</b></p><p>  3.1 整體設計框架</p><p>  經(jīng)過大量的分析與調(diào)研,進而設計出由以下幾個模塊組成的簡單網(wǎng)絡掃描器。整個端口

42、掃描器的核心部分是掃描模塊,它是由很多子模塊組成的,其結構如下圖所示</p><p>  圖3 掃描模塊的結構圖</p><p><b>  3.2 流程圖描述</b></p><p><b>  圖4 程序流程圖</b></p><p><b>  4 詳細設計</b><

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

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

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ū)域的大??;</p><p>  JTextField hostname ( ):定義IP域名</p><p>  JTextField minPort():定義最小端口</p><p>  JTextField maxPort( ):定義最大端口</p><p>  JTextField maxThread( ):定義最

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

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

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

50、機制進行相應信息的匹配</p><p>  class OK implements ActionListener:事件監(jiān)聽器,相應OK按鈕</p><p>  public class Scan:主要進行界面化設計,調(diào)用上面的事件相應。 </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ù)設計模塊</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 結果輸出模塊<

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 編譯及運行程序</p><p>  圖5 編譯及運行程序</p><p><b>  5.2 系統(tǒng)主界面</b></p

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論