基于多線程的端口掃描程序課程設(shè)計(jì)報(bào)告講解_第1頁
基于多線程的端口掃描程序課程設(shè)計(jì)報(bào)告講解_第2頁
基于多線程的端口掃描程序課程設(shè)計(jì)報(bào)告講解_第3頁
基于多線程的端口掃描程序課程設(shè)計(jì)報(bào)告講解_第4頁
基于多線程的端口掃描程序課程設(shè)計(jì)報(bào)告講解_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、滁州學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:設(shè)計(jì)題目:基于多線程的端口掃描程序院部: 計(jì)算機(jī)與信息工程學(xué)院專業(yè):網(wǎng)絡(luò)工程組別:第六組起止日期:2012年12月31日2013年1月6日指導(dǎo)教師:計(jì)算機(jī)與信息工程學(xué)院二O二年制課程設(shè)計(jì)題目基于多線程的端口掃描程序組長學(xué)號班級院部計(jì)算機(jī)與信息工程專業(yè)網(wǎng)絡(luò)工程組員指導(dǎo)教師課程設(shè)計(jì)目的:鍛煉Java高級編程的能力課程設(shè)計(jì)所需環(huán)境PC, Windows xp, JCretor Pro課程設(shè)計(jì)任務(wù)要求使用Socket實(shí)現(xiàn)簡單的端口掃描功能。分別針對 TCP 和UDP米用多線程技術(shù)實(shí)現(xiàn)端口掃描,給出掃描結(jié)果。課程設(shè)計(jì)工作進(jìn)度計(jì)劃序號起止日期工作內(nèi)容分工情況12012.12.

2、312013.01.01分析題目,搜索相關(guān)資料。22013.01.012013.01.02整理相關(guān)資料,確定程序分 工,布置任務(wù)。32013.01.022013.01.03編寫程序代碼。42013.01.042013.01.05調(diào)試改進(jìn)程序。52013.01.052013.01.06編寫課程設(shè)計(jì)報(bào)告與 PPT指導(dǎo)教師簽字:年月日系(教研室)審核意見:系(教研室)主任簽字:年月日課程設(shè)計(jì)任務(wù)書目錄1 需求分析 11.1 網(wǎng)絡(luò)安全 11.2 課程背景 11.3 掃描器 11.4 多線程掃描器介紹 21.4.1 布局管理器 21.4.2 多線程 21.4.3 線程優(yōu)先級 31.4.4 線程同步 31

3、.5 端口掃描 42 概要設(shè)計(jì) 42.1 整體框架設(shè)計(jì) 42.2 流程圖描述 53 詳細(xì)設(shè)計(jì) 63.1 端口掃描線程啟動(dòng) . 63.2 GUI 圖形界面 73.3 按鈕監(jiān)聽及異常處理 . 94 調(diào)試與操作說明 114.1 運(yùn)行界面 114.2 掃描結(jié)果 114.3 錯(cuò)誤提示 125 課程設(shè)計(jì)總結(jié)與體會 136 參考文獻(xiàn) 147 致謝 148 附錄 1531 需求分析1.1 網(wǎng)絡(luò)安全 二十一世紀(jì)是信息化、網(wǎng)絡(luò)化的世紀(jì),信息是社會發(fā)展的重要資源。信息安全保障 能力是一個(gè)國家綜合國力、經(jīng)濟(jì)競爭實(shí)力和生存能力的重要組成部分,是世界各國在奮 力攀登的制高點(diǎn)。網(wǎng)絡(luò)安全是指網(wǎng)絡(luò)系統(tǒng)的硬件、軟件及其系統(tǒng)中的數(shù)

4、據(jù)受到保護(hù),不 因偶然的或者惡意的原因而遭到破壞、更改、泄露,系統(tǒng)連續(xù)可靠正常地運(yùn)行。網(wǎng)絡(luò)安 全包括技術(shù)領(lǐng)域和非技術(shù)領(lǐng)域兩大部分 : 非技術(shù)領(lǐng)域包括一些制度、政策、管理、安全意 識、實(shí)體安全等方面的內(nèi)容 ; 技術(shù)領(lǐng)域包括隱患掃描、防火墻、入侵檢測、訪問控制、虛 擬專用網(wǎng)、 CA 認(rèn)證、操作系統(tǒng)等方面的內(nèi)容。這些技術(shù)的目標(biāo)是保證信息的可控性、可 用性、保密性、完整性、和不可抵賴性。端口掃描屬于安全探測技術(shù)范疇,對應(yīng)于網(wǎng)絡(luò) 攻擊技術(shù)中的網(wǎng)絡(luò)信息收集技術(shù)。1.2 課程背景隨著 Internet 的不斷發(fā)展, 信息技術(shù)已成為促進(jìn)經(jīng)濟(jì)發(fā)展、 社會進(jìn)步的巨大推動(dòng)力。 端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)一個(gè)重要

5、的網(wǎng)絡(luò)安全技術(shù)。與防火墻、入侵檢測系統(tǒng) 互相配合,能夠有效提高網(wǎng)絡(luò)的安全性。安全掃描是安全技術(shù)領(lǐng)域中重要的一類。通過 掃描能自動(dòng)檢測遠(yuǎn)端或本地主機(jī)系統(tǒng)信息,包括主機(jī)的基本信息 ( 如計(jì)算機(jī)名、域名、組 名、操作系統(tǒng)型等 ) 、服務(wù)信息、用戶信息以及漏洞信息,它的重要性在于能夠?qū)W(wǎng)絡(luò)進(jìn) 行安全評估,及時(shí)發(fā)現(xiàn)安全隱患,防患于未然。網(wǎng)絡(luò)的安全狀況取決于網(wǎng)絡(luò)中最薄弱的環(huán)節(jié),任何疏忽都有可能引入不安全的因素, 最有效的方法是定期對網(wǎng)絡(luò)系統(tǒng)進(jìn)行安全分析,及時(shí)發(fā)現(xiàn)并修正存在的脆弱,保證系統(tǒng) 安全。國外安全掃描技術(shù)的歷史可以追溯到 20 世紀(jì) 90 年代,當(dāng)時(shí)因特網(wǎng)剛剛起步,但是 在過去的十年內(nèi),掃描技術(shù)飛速

6、發(fā)展,迄今為止,其掃描技術(shù)已經(jīng)非常完善,但是在全 面性,隱蔽性和智能性上還有待提高。安全掃描從最初專門為UNIX系統(tǒng)而編寫的一些只有簡單功能的小程序發(fā)展到現(xiàn)在,已經(jīng)出現(xiàn)了可以運(yùn)行多個(gè)操作系統(tǒng)平臺上的,具有復(fù) 雜功能的系統(tǒng)程序。國內(nèi)的掃描技術(shù)是在國外的掃描器基礎(chǔ)上發(fā)展起來的。其中有一些專門從事安全技 術(shù)的公司。這些公司的掃描器以硬件為主,其特點(diǎn)是執(zhí)行速度快,不像軟件一樣受到安 裝主機(jī)系統(tǒng)的限制。然而對于更多的基于主機(jī)的端口掃描而言,簡單,實(shí)用,可靠才是它們的長處。1.3 掃描器 掃描器是一種自動(dòng)檢測遠(yuǎn)程或本地主機(jī)安全性弱點(diǎn)的程序,通過使用掃描器你可以 不留痕跡的發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的各種TCP 端口的

7、分配。這就能讓我們間接的或直觀的了解到遠(yuǎn)程主機(jī)所存在的安全問題。為了保證網(wǎng)絡(luò)中計(jì)算機(jī)的安全性, 必須采取主動(dòng)策略 ,快 速、及時(shí)、準(zhǔn)確、安全的檢測出網(wǎng)絡(luò)中計(jì)算機(jī)及防火墻開放的和未開放的端口。計(jì)算機(jī) 端口掃描技術(shù)就是這種主動(dòng)防御策略實(shí)現(xiàn)的重要技術(shù)手段。掃描器采用模擬攻擊的形式對目標(biāo)可能存在的已知安全漏洞進(jìn)行逐項(xiàng)檢查。目標(biāo)可 以是工作站、服務(wù)器、交換機(jī)、數(shù)據(jù)庫應(yīng)用等各種對象。然后根據(jù)掃描結(jié)果向系統(tǒng)管理 員提供周密可靠的安全性分析報(bào)告,為提高網(wǎng)絡(luò)安全整體水平產(chǎn)生重要依據(jù)。在網(wǎng)絡(luò)安 全體系的建設(shè)中,安全掃描工具花費(fèi)低、效果好、見效快、與網(wǎng)絡(luò)的運(yùn)行相對對立、安 裝運(yùn)行簡單,可以大規(guī)模減少安全管理員的手工

8、勞動(dòng),有利于保持全網(wǎng)安全政策的統(tǒng)一 和穩(wěn)定。1.4 多線程掃描器介紹1.4.1布局管理器在 java 中,組件放置在窗體上的方式是完全基于代碼的。組件放置在窗體上的方式 通常不是通過絕對坐標(biāo)控制,而是由“布局管理器”根據(jù)組件加入的順序決定其位置。 每個(gè)容器都有一個(gè)屬于的自己布局管理器。使用不同的布局管理器,組件大小,位置和 形狀將大不相同。表格型布局管理器將容器劃分成為一個(gè)多行多列的表格,表格的大小 全部相同,是由其中最大的組件所決定。通過 add 方法可以將組件一一放在每個(gè)表格中。 表格包型布局與表格型布局有些相近,但與表格型布局比較起來,表格包型更加靈活, 更加復(fù)雜。通常表格包型布局,我們

9、可以設(shè)定每個(gè)格子的大小,間隙等。1.4.2多線程 每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可 能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊 段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上 是輕量級的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào) 度和執(zhí)行。線程是程序中一個(gè)單一的順序控制流程 . 在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同 的工作 , 稱為多線程 .線程和進(jìn)程的區(qū)別在于 ,子進(jìn)程和父進(jìn)程有不同的代碼和數(shù)據(jù)空間, 而多個(gè)線程則共享數(shù)據(jù)空間 ,每個(gè)線程有自己的執(zhí)行堆棧和程序計(jì)數(shù)器

10、為其執(zhí)行上下文. 多線程主要是為了節(jié)約CPU時(shí)間,發(fā)揮利用,根據(jù)具體情況而定線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資 源和 CPU。在計(jì)算機(jī)編程中,一個(gè)基本的概念就是同時(shí)對多個(gè)任務(wù)加以控制。許多程序設(shè)計(jì)問 題都要求程序能夠停下手頭的工作,改為處理其他一些問題,再返回主進(jìn)程??梢酝ㄟ^ 多種途徑達(dá)到這個(gè)目的。最開始的時(shí)候,那些掌握機(jī)器低級語言的程序員編寫一些“中 斷服務(wù)例程”,主進(jìn)程的暫停是通過硬件級的中斷實(shí)現(xiàn)的。盡管這是一種有用的方法, 但編出的程序很難移植,由此造成了另一類的代價(jià)高昂問題。中斷對那些實(shí)時(shí)性很強(qiáng)的 任務(wù)來說是很有必要的。但對于其他許多問題,只要求將問題劃分進(jìn)入獨(dú)立運(yùn)行的程序 片斷中,使

11、整個(gè)程序能更迅速地響應(yīng)用戶的請求。最開始,線程只是用于分配單個(gè)處理器的處理時(shí)間的一種工具。但假如操作系統(tǒng)本 身支持多個(gè)處理器, 那么每個(gè)線程都可分配給一個(gè)不同的處理器, 真正進(jìn)入“并行運(yùn)算” 狀態(tài)。從程序設(shè)計(jì)語言的角度看,多線程操作最有價(jià)值的特性之一就是程序員不必關(guān)心 到底使用了多少個(gè)處理器。程序在邏輯意義上被分割為數(shù)個(gè)線程;假如機(jī)器本身安裝了 多個(gè)處理器,那么程序會運(yùn)行得更快,毋需作出任何特殊的調(diào)校。根據(jù)前面的論述,大 家可能感覺線程處理非常簡單。但必須注意一個(gè)問題:共享資源!如果有多個(gè)線程同時(shí) 運(yùn)行,而且它們試圖訪問相同的資源,就會遇到一個(gè)問題。舉個(gè)例子來說,兩個(gè)線程不 能將信息同時(shí)發(fā)送給

12、一臺打印機(jī)。為解決這個(gè)問題,對那些可共享的資源來說(比如打 印機(jī)),它們在使用期間必須進(jìn)入鎖定狀態(tài)。所以一個(gè)線程可將資源鎖定,在完成了它的 任務(wù)后,再解開(釋放)這個(gè)鎖,使其他線程可以接著使用同樣的資源。多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為了提高資源使用 效率來提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候?qū)崿F(xiàn)的。1.4.3線程優(yōu)先級線程優(yōu)先級被線程調(diào)度用來判定何時(shí) 哪個(gè)線程允許運(yùn)行 。理論上,優(yōu)先級高的線程比優(yōu)先級低的線程獲得更多的CPU時(shí)間。實(shí)際上,線程獲得的 CPU時(shí)間通常由包括優(yōu)先級在內(nèi)的多個(gè)因素決定 (例如, 一個(gè)實(shí)行多任務(wù)處理的操作系統(tǒng)如何更有效的利用

13、 CPU 時(shí)間) 。一個(gè)優(yōu)先級高的線程自然比優(yōu)先級低的線程優(yōu)先。舉例來說,當(dāng)?shù)蛢?yōu)先級線程 正在運(yùn)行,而一個(gè)高優(yōu)先級的線程被恢復(fù)(例如從沉睡中或等待I/O 中),它將搶占低優(yōu)先級線程所使用的 CPU。理論上,等優(yōu)先級線程有同等的權(quán)利使用CPU但你必須小心了。記住,Java是被設(shè)計(jì)成能在很多環(huán)境下工作的。一些環(huán)境下實(shí)現(xiàn)多任務(wù)處理從本質(zhì)上與其他環(huán)境不同。 為安全起見,等優(yōu)先級線程偶爾也受控制。這保證了所有線程在無優(yōu)先級的操作系統(tǒng)下 都有機(jī)會運(yùn)行。實(shí)際上,在無優(yōu)先級的環(huán)境下,多數(shù)線程仍然有機(jī)會運(yùn)行,因?yàn)楹芏嗑€ 程不可避免的會遭遇阻塞,例如等待輸入輸出。遇到這種情形,阻塞的線程掛起,其他 線程運(yùn)行。但是

14、如果你希望多線程執(zhí)行的順利的話,最好不要采用這種方法。同樣,有些類型的任務(wù)是占 CPU的。對于這些支配 CPU類型的線程,有時(shí)你希望能夠支配它們,以便使其他線程可以運(yùn)行。1.4.4 線程同步多個(gè)線程同時(shí)讀寫同一份共享資源的時(shí)候,可能會引起沖突。這時(shí)候,我們需要引 入線程“同步”機(jī)制,即各位線程之間要有個(gè)先來后到,不能一窩蜂擠上去搶作一團(tuán)。 同步的關(guān)鍵是管程,管程是一個(gè)互斥獨(dú)占鎖定的對象,在給定的時(shí)間,僅有一個(gè)線程獲 得管程,當(dāng)一個(gè)線程需要鎖定時(shí),他必須進(jìn)入管程。1.5端口掃描一個(gè)端口就是一個(gè)潛在的通信通道,也就是一個(gè)入侵通道。對目標(biāo)計(jì)算機(jī)進(jìn)行端口 掃描,能得到許多有用的信息。進(jìn)行掃描的方法很多

15、,可以是手工進(jìn)行掃描,也可以用 端口掃描軟件進(jìn)行。在手工進(jìn)行掃描時(shí),需要熟悉各種命令。對命令執(zhí)行后的輸出進(jìn)行分析。用掃描軟 件進(jìn)行掃描時(shí),許多掃描器軟件都有分析數(shù)據(jù)的功能。通過端口掃描,可以得到許多有用的信息,從而發(fā)現(xiàn)系統(tǒng)的安全漏洞。2概要設(shè)計(jì)2.1整體框架設(shè)計(jì)經(jīng)過我們組員的思考很研究,得出了以下幾個(gè)模塊的簡單端口掃描器,整個(gè)端口掃 描器的核心模塊是是端口掃描系統(tǒng),它由許多子模塊組成,其結(jié)構(gòu)如下圖所示:TCP端口掃描程序5檢測信息匹配模塊是否在參數(shù)范圍中通過scoket來進(jìn)行端口掃參數(shù)設(shè)計(jì)模塊基本信息檢測模塊辛確定端口范圍以及線程數(shù)F地址是否存在結(jié)果輸出模塊(通過 GUI界面輸出得到的結(jié)果)2

16、.2流程圖描述233 詳細(xì)設(shè)計(jì)3.1 端口掃描線程啟動(dòng)掃描程序主要運(yùn)用 Socket 編程。對于一個(gè)工作齊全的 Socket ,其工作過程包含以下 四個(gè)就基本步驟:創(chuàng)建通信雙方的 socket 鏈接,即分別為服務(wù)器和客戶端創(chuàng)建 Socket 對象,建立 Socket 連接;打開連接到 Socket 的輸入流和輸出流; 按照一定的協(xié)議對 Socket 進(jìn)行讀 / 寫操作;關(guān)閉連接。以下是程序代碼/ 運(yùn)行 掃描端口public void run()int i;Socket theTCPsocket;for(i=MIN_port+threadnum;iMAX_port;i+= Integer.par

17、seInt(ThreadScan.maxThread.getText() ThreadScan.status.setText(掃描狀態(tài):正在掃描+i+端口 ”);trytheTCPsocket=new Socket(hostAddress,i);theTCPsocket.close();ThreadScan.Result.append( +i);switch(i)case 21:ThreadScan.Result.append(FTP);break;case 23:ThreadScan.Result.append(TELNET);break;case 25:ThreadScan.Result.

18、append(SMTP);break;case 80:ThreadScan.Result.append(HTTP);break;case 110:ThreadScan.Result.append(POP);break;case 139:ThreadScan.Result.append(netBIOS); break;ThreadScan.Result.append(,);catch (IOException e)if (i=MAX_port)ThreadScan.Result.append(n+ 掃描完成 .);ThreadScan.status.setText(掃描狀態(tài)浣成!);3.2 GU

19、I 圖形界面圖形用戶界面是軟件產(chǎn)品和用戶交互的接口, 是軟件產(chǎn)品中用戶直接可以看到并直接操 作的部分。public class ThreadScanpublic static JFrame main=new JFrame(” 基于 JAVA的多線程 TCP端口掃描程序 );public static JTextArea Result=new JTextArea(,4,43);public static JTextField hostname=new JTextField(localhost,8);public static JTextField minPort=new JTextField(0

20、,4);public static JTextField maxPort=new JTextField(1000,4);public static JTextField maxThread=new JTextField(100,3);public static JDialog DLGError=new JDialog(main,錯(cuò)誤 !);public static Label DLGINFO=new Label();public static Label status=new Label(掃描狀態(tài) : 未開始 );public static void main(String args) ma

21、in.setSize(500,220); /main.setLocation(300,300); main.setResizable(false);DLGError.setSize(300,100);DLGError.setLocation(400,400);JPanel mainPanel = new JPanel();Label H=new Label(ip 或域名 :);Label P1=new Label( 端口范圍 :);Label P2=new Label();Label TNUM=new Label( 線程數(shù) :);Label RST=new Label( 掃描結(jié)果 : );La

22、bel con=new Label( );Result.setLineWrap(true);Result.setEditable(false);JButton OK = new JButton(確定 );JButton Submit = new JButton(確定 );JButton Cancel = new JButton(取消 );Container mPanel = main.getContentPane();Container dPanel = DLGError.getContentPane(); mPanel.setLayout(new FlowLayout(FlowLayout.

23、LEFT); dPanel.setLayout(new FlowLayout(FlowLayout.CENTER); mPanel.add(H);mPanel.add(hostname); mPanel.add(P1); mPanel.add(minPort);mPanel.add(P2); mPanel.add(maxPort); mPanel.add(TNUM); mPanel.add(maxThread); mPanel.add(RST); mPanel.add(Result);mPanel.add(con);mPanel.add(Submit);mPanel.add(Cancel);

24、mPanel.add(status);dPanel.add(DLGINFO); dPanel.add(OK);main.setVisible(true);Submit.addActionListener(new SubmitAction();Cancel.addActionListener(new CancleAction(); OK.addActionListener(new OKAction();3.3 按鈕監(jiān)聽及異常處理 本部分主要對各個(gè)按鈕進(jìn)行監(jiān)聽。 是整個(gè)程序的時(shí)間驅(qū)動(dòng)設(shè)計(jì)部分。 并且顯示運(yùn)行結(jié)果。 class SubmitAction implements ActionListen

25、erpublic void actionPerformed (ActionEvent a)int minPort;int maxPort;int maxThread;tryminPort=Integer.parseInt(ThreadScan.minPort.getText(); maxPort=Integer.parseInt(ThreadScan.maxPort.getText(); maxThread=Integer.parseInt(ThreadScan.maxThread.getText(); catch(NumberFormatException e) ThreadScan.DLG

26、INFO.setText( 錯(cuò)誤的端口號或線程數(shù)! 端口號和線程數(shù)必須為整數(shù) !);ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始); return;tryTCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.getText();catch(UnknownHostException e)ThreadScan.DLGINFO.setText( 錯(cuò)誤的 IP 地址 /域名或地址不可達(dá) ! ); ThreadScan.DLGErro

27、r.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始);return;if(minPort65535 | minPortmaxPort)ThreadScan.DLGINFO.setText( 最小端口必須是 0-65535 并且小于最大端 口的整數(shù) !);ThreadScan.DLGError.setVisible(true);return;else TCPThread.MIN_port=minPort;if(maxPort65535 | maxPortminPort)ThreadScan.DLGINFO.setText( 最大端口必須是

28、0-65535 并且大于最小端 口的整數(shù) !);ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始);return;else TCPThread.MAX_port=maxPort;if(maxThread200)ThreadScan.DLGINFO.setText( 線程數(shù)為 1-200的整數(shù) ! );ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始);return;ThreadSca n.Result.set

29、Text();ThreadScan.Result.append(”正在掃描+ThreadScan.hostname.getText()+線程數(shù)+ThreadScan.maxThread.getText()+n);ThreadScan.Result.append(開放端口 :); for(i nt i=O;imaxThread;i+)new TCPThread(T + i,i).start();4調(diào)試與操作說明4.1運(yùn)行界面對本機(jī)進(jìn)行多線程的端口掃描,即在ip或域名中輸入localhost可對本機(jī)進(jìn)行端口進(jìn)行掃描,也可輸入其他的ip地址或域名,可自行設(shè)置端口范圍如從 0到1000,最大不超過65

30、535, 可設(shè)置線程數(shù)范圍為0200,掃描狀態(tài)為未開始,點(diǎn)擊確定即可運(yùn)行程序。4.2掃描結(jié)果程序運(yùn)行后,可以得到相關(guān)的端口掃描過程,其中掃描狀態(tài)顯示正在掃描的端口號,如下:程序運(yùn)行結(jié)束后在掃描結(jié)果中顯示掃描結(jié)束,并在掃描狀態(tài)中顯示完成。4.3錯(cuò)誤提示程序中往往由于一些數(shù)據(jù)不正確會造成運(yùn)行后錯(cuò)誤,所以在程序中添加了異常處理機(jī) 制,其中遇到的錯(cuò)誤可能有以下幾種:當(dāng)端口號或線程數(shù)不是整數(shù)時(shí)會出現(xiàn)如下錯(cuò)誤:當(dāng)ip地址或域名錯(cuò)誤時(shí),會出現(xiàn)如下錯(cuò)誤:當(dāng)最小端口數(shù)不在 065535且不小于最大端口數(shù)時(shí)會出現(xiàn)如下錯(cuò)誤:當(dāng)最大端口數(shù)不在065535且不大于最小端口數(shù)時(shí)會出現(xiàn)如下錯(cuò)誤:0200時(shí)會出現(xiàn)如下錯(cuò)誤:當(dāng)

31、線程數(shù)范圍不在5課程設(shè)計(jì)總結(jié)與體會本組成員共同設(shè)計(jì)的基于多線程的端口掃描程序基本滿足了課程設(shè)計(jì)的要求,能夠很好地對本機(jī)或其他電腦端口進(jìn)行掃描,同時(shí)也處理了程序中可能出現(xiàn)的錯(cuò)誤。本次課程設(shè)計(jì),使我們對計(jì)算機(jī)網(wǎng)絡(luò)這門課程有了更深入的理解。計(jì)算機(jī)網(wǎng)絡(luò)是一門實(shí)踐性較強(qiáng)的課程, 為了學(xué)好這門課程,必須在掌握理論知識的同時(shí), 加強(qiáng)上機(jī)實(shí)踐。 要想把課程設(shè)計(jì)做的更好,就要學(xué)會參考一定的資料,吸取別人的經(jīng)驗(yàn),加強(qiáng)團(tuán)隊(duì)合作。在本課程設(shè)計(jì)中,我們明白了理論與實(shí)際應(yīng)用相結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫大程序的能力。 培養(yǎng)了基本的、良好的程序設(shè)計(jì)技能以及合作能力。這次課程設(shè)計(jì)同樣提高了我們的綜合運(yùn)用所學(xué)知識的

32、能力。課程設(shè)計(jì)程序的編寫需要有耐心,有些事情看起來很復(fù)雜,但問題需要一點(diǎn)一點(diǎn)去解決,分析問題,把問題模塊化,劃分成小塊以后就逐個(gè)去解決。再總體解決大的問題。這樣做起來不僅有條理也使問題得到了輕松的解決。通過這段時(shí)間的課程設(shè)計(jì),我們認(rèn)識到計(jì)算機(jī)網(wǎng)絡(luò)是一門比較難的課程。需要多花 時(shí)間學(xué)習(xí)。這次的課程設(shè)計(jì)培養(yǎng)了我們實(shí)際分析問題、編程和動(dòng)手能力,使我們掌握了計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)的基本技能,提高了我們適應(yīng)實(shí)際,運(yùn)用于實(shí)際生活的能力。這次的課程設(shè)計(jì)提高了我們對于專業(yè)課的學(xué)習(xí)熱情, 使我們能夠更加深入的理解課本內(nèi) 容,對計(jì)算機(jī)網(wǎng)絡(luò)也有了進(jìn)一步的理解和認(rèn)識, 同時(shí)也理解了將課本內(nèi)容與實(shí)際生活相 結(jié)合的好處。6

33、參考文獻(xiàn)1趙生慧 .Java 面向?qū)ο蟪绦蛟O(shè)計(jì). 北京:中國水利水電出版社,2010。2 謝希仁 . 計(jì)算機(jī)網(wǎng)絡(luò)(第五版) . 北京:電子工業(yè)出版社, 2011。3 吳功宜 . 計(jì)算機(jī)網(wǎng)絡(luò)(第二版) . 北京:清華大學(xué)出版社, 2007。4 楊靜宇. Java 程序設(shè)計(jì)與應(yīng)用開發(fā) (第2版) M. 北京: 清華大學(xué)出版社 , 2009。7 致謝非常感謝老師耐心的指導(dǎo), 在實(shí)驗(yàn)過程中給出指導(dǎo)并給幫助分析思路, 給我們提供了可 行的方案設(shè)計(jì)思路, 在實(shí)驗(yàn)過程中指出不足之處, 為能夠成功的完成課程設(shè)計(jì)做了很大的貢 獻(xiàn);非常感謝各位組員的積極配合,一起分析題目,整理思路,努力思考解決方案,畫出方 案流

34、程圖, 并進(jìn)行了嚴(yán)密的算法分析, 構(gòu)造嚴(yán)謹(jǐn)?shù)某绦蚩蚣埽?然后各自完成自己負(fù)責(zé)的模塊, 最后一起整理出完整的程序,一起進(jìn)行調(diào)試分析, 評估程序的嚴(yán)謹(jǐn)性, 找出不足。 完善實(shí)驗(yàn) 內(nèi)容,整理資料,編寫文檔。8 附錄源代碼:import .*;import java.io.*;/import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;class TCPThread extends Thread public static InetAddress hostAddress; public stati

35、c int MIN_port;public static int MAX_port; private int threadnum;public TCPThread(String name,int threadnum) super(name); this.threadnum = threadnum;public void run()int i;Socket theTCPsocket;for (i = MIN_port+threadnum; i MAX_port; i += Integer.parseInt (ThreadScan.maxThread.getText()端口 );ThreadSca

36、n.status.setText( 掃描狀態(tài) : 正在掃描 +i+ try theTCPsocket=new Socket(hostAddress,i); theTCPsocket.close();ThreadScan.Result.append( +i); switch(i)case 21: ThreadScan.Result.append(FTP);break;case 23:ThreadScan.Result.append(TELNET); break;case 25:ThreadScan.Result.append(SMTP);break;case 80:ThreadScan.Resu

37、lt.append(HTTP);break;case 110:ThreadScan.Result.append(POP);break;case 139:ThreadScan.Result.append(netBIOS);break;ThreadScan.Result.append(,);catch (IOException e)if (i=MAX_port)ThreadScan.Result.append(n+ 掃描完成 .); ThreadScan.status.setText( 掃描狀態(tài) : 完成 !); class CancleAction implements ActionListen

38、erpublic void actionPerformed (ActionEvent e)System.exit(1);class SubmitAction implements ActionListenerpublic void actionPerformed (ActionEvent a)int minPort;int maxPort;int maxThread;try minPort=Integer.parseInt(ThreadScan.minPort.getText(); maxPort=Integer.parseInt(ThreadScan.maxPort.getText(); m

39、axThread=Integer.parseInt(ThreadScan.maxThread.getText(); catch(NumberFormatException e)ThreadScan.DLGINFO.setText( 錯(cuò)誤的端口號或線程數(shù) ! 端口號和線程數(shù)必須為 整數(shù) !);ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText( 掃描狀態(tài) : 未開始 );return;tryTCPThread.hostAddress=InetAddress.getByName (ThreadScan.hostname.ge

40、tText(); catch(UnknownHostException e)ThreadScan.DLGINFO.setText( 錯(cuò)誤的 IP 地址 / 域名或地址不可達(dá) ! ); ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText( 掃描狀態(tài) : 未開始 );return;if(minPort65535 | minPortmaxPort)ThreadScan.DLGINFO.setText( 最小端口必須是 0-65535 并且小于最大端口的整 數(shù)!);ThreadScan.DLGError.setVisible(t

41、rue);return;else TCPThread.MIN_port=minPort;if(maxPort65535 | maxPortminPort)ThreadScan.DLGINFO.setText( 最大端口必須是 0-65535 并且大于最小端口的整 數(shù)!);ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText( 掃描狀態(tài) : 未開始 );return;else TCPThread.MAX_port=maxPort;if(maxThread200)ThreadScan.DLGINFO.setText( 線程數(shù)為

42、 1-200 的整數(shù) ! );ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText( 掃描狀態(tài) : 未開始 );return;ThreadScan.Result.setText();ThreadScan.Result.append( 正 在 掃 描 +ThreadScan.hostname.getText()+ 線程數(shù) +ThreadScan.maxThread.getText()+n);ThreadScan.Result.append( 開放端口 : );for(int i=0;imaxThread;i+)new TCP

43、Thread(T + i,i).start();class OKAction implements ActionListenerpublic void actionPerformed (ActionEvent e)ThreadScan.DLGError.dispose();public class ThreadScanpublic static JFrame main=new JFrame(”基于 JAVA的多線程 TCP端口掃描程序);public static JTextArea Result=new JTextArea(,4,43);public static JTextField hostname=new JTextField(localhost,8); public static JTextField minPo

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論