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

下載本文檔

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

文檔簡介

1、滁州學(xué)院課程設(shè)計(jì)報告課程名稱: 設(shè)計(jì)題目: 基于多線程的端口掃描程序 院 部: 計(jì)算機(jī)與信息工程學(xué)院 專 業(yè): 網(wǎng)絡(luò)工程 組 別: 第六組 起止日期: 2012年12月31日2013 年1月6日 指導(dǎo)教師: 計(jì)算機(jī)與信息工程學(xué)院二一二年制課程設(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)

2、容分工情況12012.12.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ì)報告與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線程同步3

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

4、地運(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)步的巨大推動力。端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)一個重要的網(wǎng)絡(luò)安全技術(shù)。與防火墻、入侵檢測系統(tǒng)互相配合,能夠有效提高網(wǎng)絡(luò)的安全性。安全掃描是安全技術(shù)領(lǐng)域中重要的一類。通

5、過掃描能自動檢測遠(yuǎn)端或本地主機(jī)系統(tǒng)信息,包括主機(jī)的基本信息(如計(jì)算機(jī)名、域名、組名、操作系統(tǒng)型等)、服務(wù)信息、用戶信息以及漏洞信息,它的重要性在于能夠?qū)W(wǎng)絡(luò)進(jìn)行安全評估,及時發(fā)現(xiàn)安全隱患,防患于未然。網(wǎng)絡(luò)的安全狀況取決于網(wǎng)絡(luò)中最薄弱的環(huán)節(jié),任何疏忽都有可能引入不安全的因素,最有效的方法是定期對網(wǎng)絡(luò)系統(tǒng)進(jìn)行安全分析,及時發(fā)現(xiàn)并修正存在的脆弱,保證系統(tǒng)安全。國外安全掃描技術(shù)的歷史可以追溯到20世紀(jì)90年代,當(dāng)時因特網(wǎng)剛剛起步,但是在過去的十年內(nèi),掃描技術(shù)飛速發(fā)展,迄今為止,其掃描技術(shù)已經(jīng)非常完善,但是在全面性,隱蔽性和智能性上還有待提高。安全掃描從最初專門為UNIX系統(tǒng)而編寫的一些只有簡單功能的小

6、程序發(fā)展到現(xiàn)在,已經(jīng)出現(xiàn)了可以運(yùn)行多個操作系統(tǒng)平臺上的,具有復(fù)雜功能的系統(tǒng)程序。國內(nèi)的掃描技術(shù)是在國外的掃描器基礎(chǔ)上發(fā)展起來的。其中有一些專門從事安全技術(shù)的公司。這些公司的掃描器以硬件為主,其特點(diǎn)是執(zhí)行速度快,不像軟件一樣受到安裝主機(jī)系統(tǒng)的限制。然而對于更多的基于主機(jī)的端口掃描而言,簡單,實(shí)用,可靠才是它們的長處。1.3掃描器掃描器是一種自動檢測遠(yuǎn)程或本地主機(jī)安全性弱點(diǎn)的程序,通過使用掃描器你可以不留痕跡的發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的各種TCP端口的分配。這就能讓我們間接的或直觀的了解到遠(yuǎn)程主機(jī)所存在的安全問題。為了保證網(wǎng)絡(luò)中計(jì)算機(jī)的安全性,必須采取主動策略,快速、及時、準(zhǔn)確、安全的檢測出網(wǎng)絡(luò)中計(jì)算機(jī)及防

7、火墻開放的和未開放的端口。計(jì)算機(jī)端口掃描技術(shù)就是這種主動防御策略實(shí)現(xiàn)的重要技術(shù)手段。掃描器采用模擬攻擊的形式對目標(biāo)可能存在的已知安全漏洞進(jìn)行逐項(xiàng)檢查。目標(biāo)可以是工作站、服務(wù)器、交換機(jī)、數(shù)據(jù)庫應(yīng)用等各種對象。然后根據(jù)掃描結(jié)果向系統(tǒng)管理員提供周密可靠的安全性分析報告,為提高網(wǎng)絡(luò)安全整體水平產(chǎn)生重要依據(jù)。在網(wǎng)絡(luò)安全體系的建設(shè)中,安全掃描工具花費(fèi)低、效果好、見效快、與網(wǎng)絡(luò)的運(yùn)行相對對立、安裝運(yùn)行簡單,可以大規(guī)模減少安全管理員的手工勞動,有利于保持全網(wǎng)安全政策的統(tǒng)一和穩(wěn)定。1.4多線程掃描器介紹1.4.1布局管理器在java中,組件放置在窗體上的方式是完全基于代碼的。組件放置在窗體上的方式通常不是通過絕

8、對坐標(biāo)控制,而是由“布局管理器”根據(jù)組件加入的順序決定其位置。每個容器都有一個屬于的自己布局管理器。使用不同的布局管理器,組件大小,位置和形狀將大不相同。表格型布局管理器將容器劃分成為一個多行多列的表格,表格的大小全部相同,是由其中最大的組件所決定。通過add方法可以將組件一一放在每個表格中。表格包型布局與表格型布局有些相近,但與表格型布局比較起來,表格包型更加靈活,更加復(fù)雜。通常表格包型布局,我們可以設(shè)定每個格子的大小,間隙等。1.4.2多線程每個正在系統(tǒng)上運(yùn)行的程序都是一個進(jìn)程。每個進(jìn)程包含一到多個線程。進(jìn)程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段

9、,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上是輕量級的進(jìn)程,它負(fù)責(zé)在單個程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個線程的調(diào)度和執(zhí)行。線程是程序中一個單一的順序控制流程.在單個程序中同時運(yùn)行多個線程完成不同的工作,稱為多線程.線程和進(jìn)程的區(qū)別在于,子進(jìn)程和父進(jìn)程有不同的代碼和數(shù)據(jù)空間,而多個線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計(jì)數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定. 線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資源和CPU。在計(jì)算機(jī)編程中,一個基本的概念就是同時對多個任務(wù)加以控制。許多程序設(shè)計(jì)問題都要求程序能夠停下手頭的工作

10、,改為處理其他一些問題,再返回主進(jìn)程??梢酝ㄟ^多種途徑達(dá)到這個目的。最開始的時候,那些掌握機(jī)器低級語言的程序員編寫一些“中斷服務(wù)例程”,主進(jìn)程的暫停是通過硬件級的中斷實(shí)現(xiàn)的。盡管這是一種有用的方法,但編出的程序很難移植,由此造成了另一類的代價高昂問題。中斷對那些實(shí)時性很強(qiáng)的任務(wù)來說是很有必要的。但對于其他許多問題,只要求將問題劃分進(jìn)入獨(dú)立運(yùn)行的程序片斷中,使整個程序能更迅速地響應(yīng)用戶的請求。最開始,線程只是用于分配單個處理器的處理時間的一種工具。但假如操作系統(tǒng)本身支持多個處理器,那么每個線程都可分配給一個不同的處理器,真正進(jìn)入“并行運(yùn)算”狀態(tài)。從程序設(shè)計(jì)語言的角度看,多線程操作最有價值的特性之

11、一就是程序員不必關(guān)心到底使用了多少個處理器。程序在邏輯意義上被分割為數(shù)個線程;假如機(jī)器本身安裝了多個處理器,那么程序會運(yùn)行得更快,毋需作出任何特殊的調(diào)校。根據(jù)前面的論述,大家可能感覺線程處理非常簡單。但必須注意一個問題:共享資源!如果有多個線程同時運(yùn)行,而且它們試圖訪問相同的資源,就會遇到一個問題。舉個例子來說,兩個線程不能將信息同時發(fā)送給一臺打印機(jī)。為解決這個問題,對那些可共享的資源來說(比如打印機(jī)),它們在使用期間必須進(jìn)入鎖定狀態(tài)。所以一個線程可將資源鎖定,在完成了它的任務(wù)后,再解開(釋放)這個鎖,使其他線程可以接著使用同樣的資源。多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為

12、了提高資源使用效率來提高系統(tǒng)的效率。線程是在同一時間需要完成多項(xiàng)任務(wù)的時候?qū)崿F(xiàn)的。1.4.3線程優(yōu)先級線程優(yōu)先級被線程調(diào)度用來判定何時 哪個線程允許運(yùn)行 。理論上,優(yōu)先級高的線程比優(yōu)先級低的線程獲得更多的CPU時間。實(shí)際上,線程獲得的CPU 時間通常由包括優(yōu)先級在內(nèi)的多個因素決定(例如,一個實(shí)行多任務(wù)處理的操作系統(tǒng)如何更有效的利用CPU時間) 。一個優(yōu)先級高的線程自然比優(yōu)先級低的線程優(yōu)先。舉例來說,當(dāng)?shù)蛢?yōu)先級線程正在運(yùn)行,而一個高優(yōu)先級的線程被恢復(fù)(例如從沉睡中或等待I/O中),它將搶占低優(yōu)先級線程所使用的CPU。理論上,等優(yōu)先級線程有同等的權(quán)利使用CPU。但你必須小心了。記住, Java是被

13、設(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)行。但是如果你希望多線程執(zhí)行的順利的話,最好不要采用這種方法。同樣 ,有些類型的任務(wù)是占CPU的。對于這些支配CPU類型的線程,有時你希望能夠支配它們 ,以便使其他線程可以運(yùn)行。1.4.4線程同步多個線程同時讀寫同一份共享資源的時候,可能會引起沖突。這時候,我們需要引入線程“同步”機(jī)制,即

14、各位線程之間要有個先來后到,不能一窩蜂擠上去搶作一團(tuán)。同步的關(guān)鍵是管程,管程是一個互斥獨(dú)占鎖定的對象,在給定的時間,僅有一個線程獲得管程,當(dāng)一個線程需要鎖定時,他必須進(jìn)入管程。1.5端口掃描一個端口就是一個潛在的通信通道,也就是一個入侵通道。對目標(biāo)計(jì)算機(jī)進(jìn)行端口掃描,能得到許多有用的信息。進(jìn)行掃描的方法很多,可以是手工進(jìn)行掃描,也可以用端口掃描軟件進(jìn)行。在手工進(jìn)行掃描時,需要熟悉各種命令。對命令執(zhí)行后的輸出進(jìn)行分析。用掃描軟件進(jìn)行掃描時,許多掃描器軟件都有分析數(shù)據(jù)的功能。通過端口掃描,可以得到許多有用的信息,從而發(fā)現(xiàn)系統(tǒng)的安全漏洞。2概要設(shè)計(jì)2.1整體框架設(shè)計(jì)經(jīng)過我們組員的思考很研究,得出了以

15、下幾個模塊的簡單端口掃描器,整個端口掃描器的核心模塊是是端口掃描系統(tǒng),它由許多子模塊組成,其結(jié)構(gòu)如下圖所示: TCP端口掃描程序基本信息檢測模塊參數(shù)設(shè)計(jì)模塊端口掃描模塊 檢測信息匹配模塊IP地址是否存在確定端口范圍以及線程數(shù)通過scoket來進(jìn)行端口掃描是否在參數(shù)范圍中結(jié)果輸出模塊(通過GUI界面輸出得到的結(jié)果)2.2流程圖描述 開始輸入主機(jī)名或要查找的的ip 輸入端口的范圍輸入線程數(shù)匹配過濾原則是否完全匹配建立原始套接字連接讀取應(yīng)答內(nèi)容應(yīng)答數(shù)據(jù)有效 記錄端口序列GUI界面中打印出來結(jié) 束3詳細(xì)設(shè)計(jì)3.1 端口掃描線程啟動掃描程序主要運(yùn)用Socket編程。對于一個工作齊全的Socket,其工作

16、過程包含以下四個就基本步驟:創(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.parseInt(ThreadScan.maxThread.getText()ThreadScan.status.setText(掃描狀態(tài):正在掃描 +i+ 端口);tr

17、ytheTCPsocket=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.Result.append(HTTP); break; case 1

18、10: 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 GUI圖形界面圖形用戶界面是軟件產(chǎn)品和用戶交互的接口,是軟件產(chǎn)品中用戶直接可以看到并直接操作的部分。public class Thread

19、Scanpublic 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,4);public static JTextField maxPort=new JTextField(1000,4);public static J

20、TextField 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)main.setSize(500,220);/main.setLocation(300,300);main.setResizable(false);DLGError

21、.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é)果: );Label con=new Label( );Result.setLineWrap(true);Result.setEditable(false);JButton OK = new J

22、Button(確定);JButton Submit = new JButton(確定);JButton Cancel = new JButton(取消);Container mPanel = main.getContentPane();Container dPanel = DLGError.getContentPane();mPanel.setLayout(new FlowLayout(FlowLayout.LEFT);dPanel.setLayout(new FlowLayout(FlowLayout.CENTER);mPanel.add(H);mPanel.add(hostname);mP

23、anel.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);mPanel.add(status);dPanel.add(DLGINFO);dPanel.add(OK);main.setVisible(true);Submit.addActionListener(new

24、 SubmitAction();Cancel.addActionListener(new CancleAction();OK.addActionListener(new OKAction();3.3 按鈕監(jiān)聽及異常處理本部分主要對各個按鈕進(jìn)行監(jiān)聽。是整個程序的時間驅(qū)動設(shè)計(jì)部分。并且顯示運(yùn)行結(jié)果。class SubmitAction implements ActionListenerpublic void actionPerformed (ActionEvent a)int minPort;int maxPort;int maxThread;tryminPort=Integer.parseInt

25、(ThreadScan.minPort.getText();maxPort=Integer.parseInt(ThreadScan.maxPort.getText();maxThread=Integer.parseInt(ThreadScan.maxThread.getText();catch(NumberFormatException e)ThreadScan.DLGINFO.setText(錯誤的端口號或線程數(shù)!端口號和線程數(shù)必須為整數(shù)!);ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始);re

26、turn;try TCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.getText();catch(UnknownHostException e)ThreadScan.DLGINFO.setText( 錯誤的IP地址/域名或地址不可達(dá)! );ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始);return;if(minPort65535 | minPortmaxPort) ThreadScan.DLGINFO.setText

27、(最小端口必須是0-65535并且小于最大端口的整數(shù)!);ThreadScan.DLGError.setVisible(true);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=max

28、Port;if(maxThread200)ThreadScan.DLGINFO.setText( 線程數(shù)為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(開

29、放端口: );for(int i=0;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,最大不超過65535,可設(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錯誤提示程序中往往由于一些數(shù)

30、據(jù)不正確會造成運(yùn)行后錯誤,所以在程序中添加了異常處理機(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)如下錯誤:當(dāng)線程數(shù)范圍不在0200時會出現(xiàn)如下錯誤:5課程設(shè)計(jì)總結(jié)與體會本組成員共同設(shè)計(jì)的基于多線程的端口掃描程序基本滿足了課程設(shè)計(jì)的要求,能夠很好地對本機(jī)或其他電腦端口進(jìn)行掃描,同時也處理了程序中可能出現(xiàn)的錯誤。本次課程設(shè)計(jì),使我們對計(jì)算機(jī)網(wǎng)絡(luò)這門課程有了更深入的理解。計(jì)算機(jī)網(wǎng)絡(luò)是一門實(shí)踐性較強(qiáng)的課程,為了學(xué)

31、好這門課程,必須在掌握理論知識的同時,加強(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é)知識的能力。課程設(shè)計(jì)程序的編寫需要有耐心,有些事情看起來很復(fù)雜,但問題需要一點(diǎn)一點(diǎn)去解決,分析問題,把問題模塊化,劃分成小塊以后就逐個去解決。再總體解決大的問題。這樣做起來不僅有條理也使問題得到了輕松的解決。通過這段時間的課程設(shè)計(jì),我們認(rèn)識到計(jì)算機(jī)網(wǎng)絡(luò)是一門比較難的課程。需要多花時間學(xué)習(xí)

32、。這次的課程設(shè)計(jì)培養(yǎng)了我們實(shí)際分析問題、編程和動手能力,使我們掌握了計(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)識,同時也理解了將課本內(nèi)容與實(shí)際生活相結(jié)合的好處。6參考文獻(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é)出版社

33、, 2009。7致謝非常感謝老師耐心的指導(dǎo),在實(shí)驗(yàn)過程中給出指導(dǎo)并給幫助分析思路,給我們提供了可行的方案設(shè)計(jì)思路,在實(shí)驗(yàn)過程中指出不足之處,為能夠成功的完成課程設(shè)計(jì)做了很大的貢獻(xiàn);非常感謝各位組員的積極配合,一起分析題目,整理思路,努力思考解決方案,畫出方案流程圖,并進(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

34、 java.awt.event.*;import javax.swing.*;class TCPThread extends Threadpublic static InetAddress hostAddress;public static 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 theTC

35、Psocket;for (i = MIN_port+threadnum; i MAX_port; i += Integer.parseInt(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:T

36、hreadScan.Result.append(TELNET);break;case 25:ThreadScan.Result.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.Res

37、ult.append(n+掃描完成.);ThreadScan.status.setText(掃描狀態(tài):完成!);class CancleAction implements ActionListenerpublic void actionPerformed (ActionEvent e)System.exit(1);class SubmitAction implements ActionListenerpublic void actionPerformed (ActionEvent a)int minPort;int maxPort;int maxThread;tryminPort=Intege

38、r.parseInt(ThreadScan.minPort.getText();maxPort=Integer.parseInt(ThreadScan.maxPort.getText();maxThread=Integer.parseInt(ThreadScan.maxThread.getText();catch(NumberFormatException e)ThreadScan.DLGINFO.setText(錯誤的端口號或線程數(shù)!端口號和線程數(shù)必須為整數(shù)!);ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描

39、狀態(tài):未開始);return;tryTCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.getText();catch(UnknownHostException e)ThreadScan.DLGINFO.setText( 錯誤的IP地址/域名或地址不可達(dá)! );ThreadScan.DLGError.setVisible(true);ThreadScan.status.setText(掃描狀態(tài):未開始);return;if(minPort65535 | minPortmaxPort)ThreadScan.DLGINFO

40、.setText(最小端口必須是0-65535并且小于最大端口的整數(shù)!);ThreadScan.DLGError.setVisible(true);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_

41、port=maxPort;if(maxThread200)ThreadScan.DLGINFO.setText( 線程數(shù)為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.

42、append(開放端口: );for(int i=0;imaxThread;i+)new TCPThread(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 minP

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論