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

下載本文檔

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

文檔簡介

1、滁州學(xué)院課程設(shè)計報告課程名稱:設(shè)計題目:基于多線程的端口掃描程序院部: 計算機與信息工程學(xué)院專業(yè):網(wǎng)絡(luò)工程組別:第六組起止日期:2012年12月31日2013年1月6日指導(dǎo)教師:計算機與信息工程學(xué)院二O二年制課程設(shè)計題目基于多線程的端口掃描程序組長學(xué)號班級院部計算機與信息工程專業(yè)網(wǎng)絡(luò)工程組員指導(dǎo)教師課程設(shè)計目的:鍛煉Java高級編程的能力課程設(shè)計所需環(huán)境PC, Windows xp, JCretor Pro課程設(shè)計任務(wù)要求使用Socket實現(xiàn)簡單的端口掃描功能。分別針對 TCP 和UDP米用多線程技術(shù)實現(xiàn)端口掃描,給出掃描結(jié)果。課程設(shè)計工作進度計劃序號起止日期工作內(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)試改進程序。52013.01.052013.01.06編寫課程設(shè)計報告與 PPT指導(dǎo)教師簽字:年月日系(教研室)審核意見:系(教研室)主任簽字:年月日課程設(shè)計任務(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è)計 42.1 整體框架設(shè)計 42.2 流程圖描述 53 詳細(xì)設(shè)計 63.1 端口掃描線程啟動 . 63.2 GUI 圖形界面 73.3 按鈕監(jiān)聽及異常處理 . 94 調(diào)試與操作說明 114.1 運行界面 114.2 掃描結(jié)果 114.3 錯誤提示 125 課程設(shè)計總結(jié)與體會 136 參考文獻 147 致謝 148 附錄 1531 需求分析1.1 網(wǎng)絡(luò)安全 二十一世紀(jì)是信息化、網(wǎng)絡(luò)化的世紀(jì),信息是社會發(fā)展的重要資源。信息安全保障 能力是一個國家綜合國力、經(jīng)濟競爭實力和生存能力的重要組成部分,是世界各國在奮 力攀登的制高點。網(wǎng)絡(luò)安全是指網(wǎng)絡(luò)系統(tǒng)的硬件、軟件及其系統(tǒng)中的數(shù)

4、據(jù)受到保護,不 因偶然的或者惡意的原因而遭到破壞、更改、泄露,系統(tǒng)連續(xù)可靠正常地運行。網(wǎng)絡(luò)安 全包括技術(shù)領(lǐng)域和非技術(shù)領(lǐng)域兩大部分 : 非技術(shù)領(lǐng)域包括一些制度、政策、管理、安全意 識、實體安全等方面的內(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īng)濟發(fā)展、 社會進步的巨大推動力。 端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)一個重要

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

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

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

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

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

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

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

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

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

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

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

16、.2流程圖描述233 詳細(xì)設(shè)計3.1 端口掃描線程啟動掃描程序主要運用 Socket 編程。對于一個工作齊全的 Socket ,其工作過程包含以下 四個就基本步驟:創(chuàng)建通信雙方的 socket 鏈接,即分別為服務(wù)器和客戶端創(chuàng)建 Socket 對象,建立 Socket 連接;打開連接到 Socket 的輸入流和輸出流; 按照一定的協(xié)議對 Socket 進行讀 / 寫操作;關(guā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,錯誤 !);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)聽及異常處理 本部分主要對各個按鈕進行監(jiān)聽。 是整個程序的時間驅(qū)動設(shè)計部分。 并且顯示運行結(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( 錯誤的端口號或線程數(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( 錯誤的 IP 地址 /域名或地址不可達 ! ); 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運行界面對本機進行多線程的端口掃描,即在ip或域名中輸入localhost可對本機進行端口進行掃描,也可輸入其他的ip地址或域名,可自行設(shè)置端口范圍如從 0到1000,最大不超過65

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

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

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

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

34、程圖, 并進行了嚴(yán)密的算法分析, 構(gòu)造嚴(yán)謹(jǐn)?shù)某绦蚩蚣埽?然后各自完成自己負(fù)責(zé)的模塊, 最后一起整理出完整的程序,一起進行調(diào)試分析, 評估程序的嚴(yán)謹(jǐ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( 錯誤的端口號或線程數(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( 錯誤的 IP 地址 / 域名或地址不可達 ! ); 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論