多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn)_第1頁
多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn)_第2頁
多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn)_第3頁
多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn)_第4頁
多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、中南大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告題 目 多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn) 學(xué)生姓名 孫毅 指導(dǎo)教師 劉嬪 學(xué) 院 信息科學(xué)與工程學(xué)院 專業(yè)班級 信息安全1401 完成時間 2016/10/19 目錄第一章 需求分析11.1設(shè)計(jì)任務(wù)與要求11.2 系統(tǒng)功能描述11.2.1功能概述11.2.2本系統(tǒng)要實(shí)現(xiàn)的功能1第二章 總體設(shè)計(jì)22.1總體分析22.1界面設(shè)置構(gòu)思圖22.3界面使用設(shè)置構(gòu)思22.4后臺設(shè)計(jì)構(gòu)思3第三章 詳細(xì)設(shè)計(jì)43.1界面設(shè)計(jì)43.2界面設(shè)計(jì)圖43.3后臺設(shè)計(jì)5第四章 調(diào)試分析與運(yùn)行結(jié)果94.1運(yùn)行環(huán)境與要求94.2 運(yùn)行程序流程圖94.3運(yùn)行界面10第五章 課程設(shè)計(jì)總結(jié)14第六章 參考

2、文獻(xiàn)15第七章 附錄15第一章 需求分析1.1設(shè)計(jì)任務(wù)與要求 本設(shè)計(jì)要求完成一個多線程端口掃描程序的設(shè)計(jì)與實(shí)現(xiàn),具有易用、美觀的界面。功能要求: 能夠?qū)Ρ镜鼗蜻h(yuǎn)程主機(jī)進(jìn)行端口掃描。能夠?qū)χ贫ǘ丝诙芜M(jìn)行掃描。能夠掃描制定IP地址范圍內(nèi)哪些主機(jī)開放了特定端口,如常見的TCP端口FTP(21)等。使用 TCP connect進(jìn)行端口掃描; 使用 TCP SYN 進(jìn)行端口掃描; 使用 ICMP echo 掃描實(shí)現(xiàn) IP 掃描; 能把掃描結(jié)果記錄保存下來。1.2 系統(tǒng)功能描述1.2.1功能概述 多線程端口掃描器是實(shí)現(xiàn)計(jì)算機(jī)的端口的掃描,只要在在前臺設(shè)置好所要掃描的IP、起始端口、結(jié)束端口以及所要用到的線

3、程數(shù),點(diǎn)擊掃描,就可以掃描到所輸入IP地址主機(jī)的開放端口,并顯示在主窗體中;點(diǎn)擊退出,則可以退出該程序。IP設(shè)置應(yīng)為所在主機(jī)的IP地址,起始端口和結(jié)束端口應(yīng)為065535之間的一個數(shù),且起始端口應(yīng)小于結(jié)束端口的大小。線程數(shù)為0200之間的一個數(shù)。點(diǎn)擊開始后就會運(yùn)行,直到掃描完畢顯示出開放端口,如果沒有開放端口,則只顯示掃描完畢。1.2.2本系統(tǒng)要實(shí)現(xiàn)的功能 端口掃描功能:掃描開放的端口,并將掃描到的開放端口號送到前臺。 圖像顯示功能:顯示界面圖形。 多線程功能:當(dāng)客戶端要求與服務(wù)器端建立連接時,服務(wù)器端就將用到多線程功能,為每一個建立起來的連接創(chuàng)建一個線程。 異常拋出功能:對于明顯的錯誤,能提

4、示出錯誤的類型并結(jié)束程序的運(yùn)行。第2章 總體設(shè)計(jì)2.1總體分析 本程序分為前后臺系統(tǒng),后臺系統(tǒng)用于掃描主機(jī)開放端口,并把節(jié)掃描的數(shù)據(jù)送至前臺窗口顯示;前臺要顯示掃描的結(jié)果,所以應(yīng)為一個窗口,這個窗口應(yīng)能夠設(shè)置主機(jī)的IP地址,設(shè)置端口的開始端口、結(jié)束端口和線程數(shù),并且還能夠顯示掃描的狀態(tài)。在中央是顯示結(jié)果的窗體。本程序還應(yīng)能夠有控制掃描的狀態(tài)命令,附加設(shè)置最小化和關(guān)閉按鈕。2.1界面設(shè)置構(gòu)思圖 圖1 系統(tǒng)構(gòu)思圖2.3界面使用設(shè)置構(gòu)思當(dāng)出現(xiàn)如圖所示的界面時,填寫好要掃描的IP地址,需要掃描的端口范圍和線程數(shù),單擊命令提示按鈕就可以開始掃描,掃描結(jié)果就會顯示在中間的掃描結(jié)果顯示區(qū)域,在掃描狀態(tài)顯示區(qū)

5、就會顯示是否掃描完畢。流程圖如下: 圖2 系統(tǒng)構(gòu)思流程圖2.4后臺設(shè)計(jì)構(gòu)思后臺系統(tǒng)使用Scanner和Scan類,創(chuàng)建前臺布局和創(chuàng)建掃描端口、事件處理,并且能對簡單的錯誤進(jìn)行判斷,顯示錯誤原因。調(diào)用數(shù)據(jù)處理包,處理異常情況;調(diào)用皮膚包,美化顯示窗口。第3章 詳細(xì)設(shè)計(jì)3.1界面設(shè)計(jì)本程序界面圖形設(shè)計(jì)要能清楚顯示掃描后的結(jié)果,并且能很好的體現(xiàn)出界面的整潔大方,但并不失去吸引人眼球的畫面,所以在做界面的時候考慮了界面的色彩,并且添加了皮膚,界面上面的字體設(shè)置和windows窗口設(shè)置一樣采用宋體,界面上的按鈕不設(shè)置過多的按鈕,僅設(shè)置有必要的按鈕即可,界面設(shè)置大方。使用的時候有默認(rèn)的IP地址、需要掃描的

6、端口和線程數(shù),如果需要掃描其他主機(jī),只需要填寫好要掃描的主機(jī)的IP地址,需要掃描的端口范圍和線程數(shù),單擊命令提示按鈕就可以開始掃描,掃描結(jié)果就會顯示在中間的掃描結(jié)果顯示區(qū)域,在掃描狀態(tài)顯示區(qū)就會顯示是否掃描完畢。3.2界面設(shè)計(jì)圖本程序采用小窗口形式,外圍大小為700mm*700mm,結(jié)果顯示字幕為主機(jī)地址加開放端口。添加個性皮膚。其余地方設(shè)置按鈕和掃描的主機(jī)地址、端口和線程數(shù)。設(shè)計(jì)的預(yù)計(jì)頁面圖形如圖:圖3 系統(tǒng)界面設(shè)計(jì)圖3.3后臺設(shè)計(jì)本程序使用了為主要的Scanner2類和ScanTcpConnect類。ScanTcpConnect類的作用是創(chuàng)建線程掃描端口,然后把結(jié)果顯示到前臺。Scanne

7、r2類的作用是構(gòu)造前臺布局,調(diào)用ScanTcpConnect類添加事件處理,對輸入進(jìn)行錯誤判斷,如果輸入不在允許的范圍之內(nèi)則顯示相關(guān)錯誤。在本程序中用到了網(wǎng)絡(luò)編程的兩個類,下面介紹這兩個類的常用方法。InetSocketAddress類構(gòu)造方法如下:l InetSocketAddress(InetAddress addr, int port):根據(jù) IP 地址和端口號創(chuàng)建套接字地址。l InetSocketAddress(int port):創(chuàng)建套接字地址,其中 IP 地址為通配符地址,端口號為指定值。l InetSocketAddress(String hostname, int port)

8、:根據(jù)主機(jī)名和端口號創(chuàng)建套接字地址。Socket類常用方法如下:l Socket():通過系統(tǒng)默認(rèn)類型的 SocketImpl 創(chuàng)建未連接套接字 l Socket(InetAddress address, int port):創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號。l void bind(SocketAddress bindpoint):將套接字綁定到本地地址。l void close():關(guān)閉此套接字。l void connect(SocketAddress endpoint):將此套接字連接到服務(wù)器。l void connect(SocketAddress endpoin

9、t, int timeout):將此套接字連接到具有指定超時值的服務(wù)器。l boolean isClosed():返回套接字的關(guān)閉狀態(tài)。l boolean isConnected():返回套接字的連接狀態(tài)。本程序還調(diào)用其他的一些類和包,比如軟件包 java.awt.color 、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*。l java.awt.color包的的描述:提供用于顏色空間的類。它包含了基于國際色彩聯(lián)盟 (ICC) 配置文件格式規(guī)范的顏色空間實(shí)現(xiàn)。它還包含了基于 ICC 配置文件格式規(guī)范的顏色配置文件。用來使界

10、面更加具有色彩。Result.setBackground(Color.PINK);/設(shè)置窗口為粉紅l java.awt.event 的描述:提供處理由 AWT 組件所激發(fā)的各類事件的接口和類。事件由事件源所激發(fā),向事件源注冊的事件偵聽器可接收有關(guān)特定事件類型的通知。此包定義了事件和事件偵聽器,以及事件偵聽器適配器,它是讓事件偵聽器的編寫過程更為輕松的便捷類。在本程序中使用:public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();if(cmd.equals("Start")l i

11、o.IOException包的描述:用來處理io的錯誤,不僅僅是文件讀寫,還包括很多stream的讀寫,而且throws是用來放在函數(shù)定義的函數(shù)體前函數(shù)名后的,表示這個函數(shù)將會在出現(xiàn)異常的書后會拋出io異常,所以在以后的程序中調(diào)用這個函數(shù)的時候就必須用try和catch來捕獲異常,否則編譯會報(bào)錯,這主要涉及到j(luò)ava的安全機(jī)制。本程序中使用如下:try minPort = Integer.parseInt(PortStart.getText();maxPort = Integer.parseInt(PortEnd.getText();threadNum = Integer.parseInt(T

12、hreadNum.getText(); catch (NumberFormatException e1) DLGError.setBounds(300, 280, 299, 120);DLGINFO.setText("錯誤的端口號或線程數(shù)!端口號和線程數(shù)必須為整數(shù)!");DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLGError.setVisible(true);return;l Javax.Swing集合描述:由所有Java圖形用戶界面(GUI)組件所構(gòu)成,可運(yùn)行在任一支持Java虛擬

13、機(jī)(JVM)的本地平臺上。由于這些組件全都是用Java語言編寫的,因此它們可以提供比本地平臺GUI組件更多的功能。(與抽象窗口工具箱對比)。Java Swing是Java Foundation Classes(JFC)的一部分。在Swing中,Sun開發(fā)了一個經(jīng)過仔細(xì)設(shè)計(jì)的、靈活而強(qiáng)大的 GUI 工具包。Swing是在AWT組件基礎(chǔ)上構(gòu)建的。它所提供的功能要比AWT提供的更為廣泛。它也是Java技術(shù)的一種標(biāo)準(zhǔn)配置。Swing模型一個Java GUI通常由頂層容器、中間容器以及多個原子組件組成。每個原子組件或容器都可能觸發(fā)相應(yīng)事件的產(chǎn)生。容器是一類能夠在其中容納其他組件的特殊組件。Swing的G

14、UI組件類是按照類屬層次以樹狀結(jié)構(gòu)進(jìn)行組織的。在這個樹的最頂層,即樹的根部,使一個最基本的容器類,被稱為頂層容器。Swing 提供了三個通用的頂層容器類JFrame,JDialog和JApplet。JFrame提供了基于窗體的應(yīng)用程序,JDialog提供對話框形式的界面,JApplet提供Java小應(yīng)用程序的界面形式。在頂層容器下是中間容器,用于容納其他的組件。通常窗格本身在顯示界面中是看不到的。面板類Panel是一種中間容器,它的唯一作用是使組件更容易定位。頂層容器通過getContentPane()方法獲取內(nèi)部的一個內(nèi)容窗格。Swing包的組成:l javax.swing:基本Swing包

15、,包括Swing容器、組件及相關(guān)設(shè)置的類和接口。l javax.swing.border:包括與邊界設(shè)計(jì)相關(guān)的類和接口。l javax.swing.colorchooser:與顏色選擇相關(guān)的類和接口。l javax.swing.event:包括事件處理相關(guān)的類和接口。l javax.swing.filechooser:包括對文件進(jìn)行查看選取的相關(guān)類。l javax.swing.plaf:包括一些對外觀樣式操作的類和接口。l javax.swing.tree:包括對樹形組件進(jìn)行操作的類和接口。常用Swing組件:l 按鈕:JButtonl 文本區(qū):JTextAreal 文本字段:JTextFie

16、ld在本程序中使用如下:/ 設(shè)置主窗體位置和大小Frame.setSize(700, 700); /設(shè)置主窗體大小/添加窗口監(jiān)聽,使之可以關(guān)閉窗口Frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););/ 設(shè)置掃描按鈕和退出按鈕/Tcp connect掃描按鈕Tcp_connect.setBounds(17,313,140,30);Tcp_connect.setActionCommand("Tcp_connect");/設(shè)置JB

17、utton的屬性值Tcp_connect.addActionListener(this);/監(jiān)聽按鈕的行為/Tcp SYN掃描按鈕Tcp_SYN.setBounds(17,363,140,30);Tcp_SYN.setActionCommand("Tcp_SYN");/設(shè)置JButton的屬性值Tcp_SYN.addActionListener(this);/監(jiān)聽按鈕的行為/Icmp echo掃描按鈕ICMP_echo.setBounds(17,413,140,30);ICMP_echo.setActionCommand("ICMP_echo");/設(shè)置

18、JButton的屬性值ICMP_echo.addActionListener(this);/監(jiān)聽按鈕的行為/退出掃描按鈕Exit.setBounds(17,463,140,30);Exit.setActionCommand("Exit");Exit.addActionListener(this);l jvnet.substance.*:目的是提供一個流行的外觀(look & feel)。/設(shè)置窗體皮膚SubstanceAutumnLookAndFeel.setSkin(new FieldOfWheatSkin();第4章 調(diào)試分析與運(yùn)行結(jié)果4.1運(yùn)行環(huán)境與要求(1)

19、性能要求實(shí)時性好、可靠性強(qiáng)、不占用系統(tǒng)太多的內(nèi)存和存儲空間。(2)設(shè)計(jì)約束開發(fā)工具:jdk1.8.0_102 Eclipse jee 圖四 開發(fā)工具運(yùn)行環(huán)境:Windows 10能實(shí)現(xiàn)用戶所定義的各項(xiàng)需求。4.2 運(yùn)行程序流程圖 圖4 流程圖4.3運(yùn)行界面未掃描狀態(tài): 圖6 運(yùn)行界面未掃描狀態(tài)圖正常掃描后狀態(tài):圖7 運(yùn)行界面正常掃描狀態(tài)圖起始端口設(shè)置有誤掃描開始后狀態(tài)報(bào)錯:圖8 運(yùn)行界面起始端口設(shè)置錯誤報(bào)錯圖結(jié)束端口設(shè)置有誤掃描開始后狀態(tài)報(bào)錯:圖9 運(yùn)行界面結(jié)束端口設(shè)置錯誤報(bào)錯圖線程數(shù)設(shè)置錯誤報(bào)錯:圖10 運(yùn)行界面線程數(shù)設(shè)置錯誤報(bào)錯圖正常運(yùn)行:圖11 正常運(yùn)行圖正常運(yùn)行后且保存掃描結(jié)果之前的文

20、件內(nèi)容: 圖12 保存掃描結(jié)果之前的文件內(nèi)容圖正常運(yùn)行后且保存掃描結(jié)果之后的文件內(nèi)容: 圖13 保存掃描結(jié)果之后的文件內(nèi)容第5章 課程設(shè)計(jì)總結(jié)在此次課程設(shè)計(jì)中,遇到了一些問題,如:程序功能不能完全實(shí)現(xiàn),對于面向?qū)ο蟮姆椒私獠粔蛲笍?,運(yùn)用到實(shí)際的軟件開發(fā)中存在著困難;對于Java語言,以前只學(xué)習(xí)到了一些最基本的知識,要在短時間內(nèi)用Java語言來開發(fā)軟件是一個較大的挑戰(zhàn);對于開發(fā)軟件的流程不熟悉,適應(yīng)起來比較慢,編寫需求說明書和設(shè)計(jì)規(guī)格說明書時,自己感覺難以動手,這表明所學(xué)的知識不能靈活運(yùn)用到實(shí)際中。對于以上的問題,自己有清楚的認(rèn)識,解決辦法是需要大量閱讀相關(guān)的書籍,多看些項(xiàng)目的源代碼。對于書上

21、以及網(wǎng)站上下載的資料中的Java實(shí)例必須理解,還有多跟精通JAVA語言的老師和同學(xué)請教和交流,取其精華。對于實(shí)際動手能力與軟件開發(fā)的流程的適應(yīng),必須多進(jìn)行實(shí)際的練習(xí)與操作,才能有所進(jìn)步。我自己感覺此次課程設(shè)計(jì)做得挺成功的,通過這一次實(shí)踐編程,我學(xué)到了不少有關(guān)JAVA的實(shí)際編程的知識。在這次設(shè)計(jì)開始的第一天開始,我就開始著手修改一個用JAVA編寫的短線呈端口掃描的程序。我剛開始很自信自己能修改成功,但這一過程太不順利。用了兩天時間來修改那個JAVA程序,但調(diào)試的時候都沒有成功。后來我請教一個班上成績好的同學(xué),在他的幫助下我不斷的發(fā)現(xiàn)錯誤,并改正它們,功夫不負(fù)有心人人,我的程序最后運(yùn)行成功了。在這

22、課程設(shè)計(jì)期間我的同學(xué)和老師幫助了我,有些東西是我們一起探討,一起解決方法的。當(dāng)然在學(xué)習(xí)Java和設(shè)計(jì)程序的過程中還得到了杭志老師的辛勤指導(dǎo),為我解答了不少的疑問。同時,在劉老師身上我們學(xué)到了很多實(shí)用的東西,在此表示衷心的感謝!同時,還要感謝幫助過我的其他同學(xué)!這次課程設(shè)計(jì)令我感受很多。從拿到題目到改編JAVA程序;然后請教別人慢慢研究琢磨;從理論到實(shí)踐;從失敗到成功;忘不了我坐在電腦前苦苦思索,高溫下熬夜地編程的疲憊;忘不了因沉迷于編程卻耽誤了吃飯時間而挨餓辛酸;忘不了這其中了不少的東西,磨礪了我的意志;同時還鞏固了以前所學(xué)的知識,學(xué)到了不少書本上沒有的知識;學(xué)到了很多java編程知識,并學(xué)會

23、了簡單的使用eclipse來開發(fā)java程序的一些使用技巧這次課程設(shè)計(jì)是對我本學(xué)期所學(xué)的知識的檢驗(yàn),由此我發(fā)現(xiàn)了不少的問題。可以說它給了我一次自我評估的機(jī)會。通過設(shè)計(jì)讓我知道了那些方面我還是有欠缺的,促使我花時間彌補(bǔ)。臨近考試,時間太緊迫,致使程序?qū)崿F(xiàn)的功能在方法上也許不是很完美,但我以后會多向老師請教,自己也要加強(qiáng)對Java 的學(xué)習(xí)。努力進(jìn)一步提高自己的編程水平。此次的課程設(shè)計(jì),對我來說撰寫文檔似乎是一個更大的挑戰(zhàn)。撰寫文檔不僅要求我們要對自己程序非常熟悉:程序的總體框架,功能,如何實(shí)現(xiàn),存在什么問題等,同時還要求我們有清晰的思維和準(zhǔn)確的表達(dá)能力以及嚴(yán)密的邏輯性。因此,寫完這篇文檔對于我們自

24、身來說自然是獲益匪淺的。第6章 參考文獻(xiàn)1、Sharon Zakhour Scott Hommel等著. Java 語言導(dǎo)學(xué).人民郵電出版社, 20082、耿祥義 編著. Java基礎(chǔ)教程. 清華大學(xué)出版社, 20043、Joe Wigglesworth Paula Lumby. Java程序設(shè)計(jì)高級主題. 北京大學(xué)出版社, 20044、Y.Daniel Liang著,王鎂等譯.Java語言程序設(shè)計(jì)基礎(chǔ)篇.20065、朱福喜等.Java項(xiàng)目設(shè)計(jì)與開發(fā)范例.電子工業(yè)出版社,20056、李瑞民.網(wǎng)絡(luò)掃描技術(shù)揭秘.機(jī)械工業(yè)出版社,2012第7章 附錄帶注釋的源程序:/多線程端口掃描程序設(shè)計(jì)與實(shí)現(xiàn)帶有

25、注釋的源程序import java.awt.*; /抽象窗口工具包,圖形界面組件類import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.*; /各種IOimport javax.swing.*; /awt基礎(chǔ)上的一套圖形界面系統(tǒng)import .*;/第一大類:Scanner2類public class Scanner2 extends JF

26、rame implements ActionListener public static void main(String args) /程序入口new Scanner2();static int j = 0;/主窗口的創(chuàng)建,new組件public static JFrame Frame = new JFrame();public static Label labelIPStart = new Label("起始IP");public static Label labelIPEnd = new Label("結(jié)束IP");public static La

27、bel labelPortStart = new Label("起始端口");public static Label labelPortEnd = new Label("結(jié)束端口");public static Label labelThread = new Label("線程數(shù)");public static Label labelTimeOut = new Label("請求超時:");public static Label labelState = new Label("掃描狀態(tài):");p

28、ublic static Label labelResult = new Label("掃描結(jié)果:");public static Label labelScanning = new Label("掃描待命");JLabel photo= new JLabel(new ImageIcon("G:/圖片/QQ圖片20160724195038.jpg");public static JTextField hostNameStart = new JTextField("");public static

29、JTextField hostNameEnd = new JTextField("");public static JTextField PortStart = new JTextField("10");public static JTextField PortEnd = new JTextField("30");public static JTextField ThreadNum = new JTextField("9");public static JTextField time = new

30、JTextField("2000");public static TextArea Result1 = new TextArea();public static TextArea Result2 = new TextArea();public static Label DLGINFO = new Label("");public static JButton Tcp_connect = new JButton("Tcp connect 掃描");public static JButton Tcp_SYN = new JButton(&

31、quot;Tcp SYN 掃描");public static JButton ICMP_echo = new JButton("ICMP echo 掃描");public static JButton Exit = new JButton("退出掃描");public static JButton save = new JButton("保存結(jié)果");/錯誤提示對話框public static JDialog DLGError = new JDialog(Frame, "ERROR");public s

32、tatic JButton OK = new JButton("OK");/在構(gòu)造函數(shù)里進(jìn)行窗口設(shè)計(jì)public Scanner2()/設(shè)置主窗體標(biāo)題Frame.setTitle("計(jì)算機(jī)網(wǎng)絡(luò)課設(shè):多線程端口掃描 -信安1401 孫毅 CSU");Frame.setSize(700, 700); /設(shè)置主窗體大小/添加窗口監(jiān)聽,使之可以關(guān)閉窗口Frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););/設(shè)置一系

33、列按鈕和小窗口及圖片/IPlabelIPStart.setBounds(17,13,50,20);hostNameStart.setBounds(67,13,90,25);hostNameStart.setHorizontalAlignment(JTextField.CENTER);/文本水平對齊方式labelIPEnd.setBounds(17,63,50,20);hostNameEnd.setBounds(67,63,90,25);hostNameEnd.setHorizontalAlignment(JTextField.CENTER);/文本水平對齊方式/起始端口 labelPortSt

34、art.setBounds(17,113,50,20);PortStart.setBounds(67,113,90,25);PortStart.setHorizontalAlignment(JTextField.CENTER);/結(jié)束端口labelPortEnd.setBounds(17,163,50,20);PortEnd.setBounds(67,163,90,25);PortEnd.setHorizontalAlignment(JTextField.CENTER);/線程數(shù)labelThread.setBounds(17,213,50,20);ThreadNum.setBounds(67

35、,213,90,25);ThreadNum.setHorizontalAlignment(JTextField.CENTER);/請求超時labelTimeOut.setBounds(17,263,50,20);time.setBounds(67,263,90,25);time.setHorizontalAlignment(JTextField.CENTER);/Tcp connect掃描按鈕Tcp_connect.setBounds(17,313,140,30);Tcp_connect.setActionCommand("Tcp_connect");/設(shè)置JButton的

36、屬性值Tcp_connect.addActionListener(this);/監(jiān)聽按鈕的行為/Tcp SYN掃描按鈕Tcp_SYN.setBounds(17,363,140,30);Tcp_SYN.setActionCommand("Tcp_SYN");/設(shè)置JButton的屬性值Tcp_SYN.addActionListener(this);/監(jiān)聽按鈕的行為/Icmp echo掃描按鈕ICMP_echo.setBounds(17,413,140,30);ICMP_echo.setActionCommand("ICMP_echo");/設(shè)置JButto

37、n的屬性值ICMP_echo.addActionListener(this);/監(jiān)聽按鈕的行為/退出掃描按鈕Exit.setBounds(17,463,140,30);Exit.setActionCommand("Exit");Exit.addActionListener(this);/保存結(jié)果按鈕save.setBounds(17,513,140,30);save.setActionCommand("save");save.addActionListener(this);/掃描狀態(tài)欄labelState.setBounds(180,13,50,20);

38、labelScanning.setBounds(240,8,120,30);Result1.setBounds(180,40,210,332);Result1.setEditable(false);Result1.setBackground(Color.GREEN);/圖片的顯示photo.setBounds(393,13,283,360);/掃描結(jié)果欄labelResult.setBounds(180,390,50,20);Result2.setBounds(180,420,500,200);Result2.setEditable(false);Result2.setBackground(C

39、olor.GREEN);/設(shè)置錯誤提示框Container ErrorDisplay = DLGError.getContentPane();ErrorDisplay.setLayout(null);ErrorDisplay.add(DLGINFO);ErrorDisplay.add(OK);OK.setActionCommand("OK");OK.addActionListener(this);/將組件添加到主窗體Frame.setLayout(null);Frame.setResizable(false);/窗口大小設(shè)置為不可變Frame.add(labelIPStar

40、t);Frame.add(labelIPEnd);Frame.add(labelPortStart);Frame.add(labelPortEnd);Frame.add(labelThread);Frame.add(labelTimeOut);Frame.add(hostNameStart);Frame.add(hostNameEnd);Frame.add(PortStart);Frame.add(PortEnd);Frame.add(ThreadNum);Frame.add(time);Frame.add(Tcp_connect);Frame.add(Tcp_SYN);Frame.add(I

41、CMP_echo);Frame.add(Exit);Frame.add(save);Frame.add(labelState);Frame.add(labelScanning);Frame.add(Result1);Frame.add(photo);Frame.add(labelResult);Frame.add(Result2);Frame.setVisible(true);/幾個產(chǎn)生錯誤的原因Overridepublic void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubString cmd =

42、arg0.getActionCommand();int minPort,maxPort,threadNum;InetAddress hostAddressStart = null;InetAddress hostAddressEnd = null;try/獲取輸入的相關(guān)數(shù)據(jù)minPort = Integer.parseInt(PortStart.getText();maxPort = Integer.parseInt(PortEnd.getText();threadNum = Integer.parseInt(ThreadNum.getText();catch(NumberFormatExce

43、ption e1)DLGError.setBounds(300,280,300,200);DLGINFO.setText("靚仔,端口號、線程號必須得是整數(shù)");DLGINFO.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;/輸入信息錯誤處理if(minPort < 0)|(maxPort > 65536)|(minPort > maxPort)DLGError.setBounds(300,280,400,200);DLGINFO.se

44、tText("端口必須在065536之間,且起始端口應(yīng)小于結(jié)束端口");DLGINFO.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;if(threadNum > 200)|(threadNum < 0)DLGError.setBounds(300,280,300,200);DLGINFO.setText("線程數(shù)應(yīng)是在1200之間的整數(shù)");DLGINFO.setBounds(25,15,200,20);OK.setBo

45、unds(110,50,60,30);DLGError.setVisible(true);return;/如果按了保存按鈕if (cmd.equals("save")tryBufferedWriter bw = new BufferedWriter(new FileWriter("G:java語言文件DXCDKSMQ2掃描結(jié)果.txt");bw.write(ScanTcpConnect.str);bw.newLine();ScanTcpConnect.str = ""bw.close();catch(IOException e1)e1

46、.printStackTrace();/如果按了開始掃描按鈕if (cmd.equals("Tcp_connect")|cmd.equals("Tcp_SYN")|cmd.equals("ICMP_echo")Result1.setText(null);Result2.setText(null);/相關(guān)顯示,.append()的用途是將后面的字符串接到原來的字符串上面來labelScanning.setText("開始掃描.");Result1.append("正在掃描"+hostNameSta

47、rt.getText()+", 線程數(shù):"+threadNum+"n");Result1.append("起始端口:"+minPort+" 結(jié)束端口: "+maxPort+"n");/j+;tryScanTcpConnect.hostAddress = InetAddress.getByName(Scanner2.hostNameStart.getText();ScanTcpConnect.time = Integer.parseInt(Scanner2.time.getText();catch

48、(UnknownHostException e1)DLGError.setBounds(300,280,300,200);DLGINFO.setText("靚仔,你的IP或域名輸入好像有誤哦");DLGINFO.setBounds(25,15,200,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;/多線程核心算法for(int i = minPort;i <= maxPort;)if(i+threadNum) <= maxPort)new ScanTcpConnect(i,i+th

49、readNum).run();/引用Scan類的run()方法i += threadNum;elsenew ScanTcpConnect(i,maxPort).run();i += threadNum;tryThread.sleep(1);/設(shè)置睡眠時間catch(InterruptedException e1)e1.printStackTrace();Result1.append("掃描完成!");labelScanning.setText("掃描完成!");/如果按了OK按鈕if(cmd.equals("OK")DLGError.dispose();/釋放資源/如果按了退出掃描按鈕if(cmd.equals("Eixt")System.exit(0);/非正常退出正在運(yùn)行中的java虛擬機(jī)/第二大類:完成Tcp co

溫馨提示

  • 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

提交評論