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

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)科學(xué)與工程學(xué)院課程設(shè)計(jì)報(bào)告題目全稱:課 程:學(xué)生學(xué)號(hào):班號(hào):姓名:指導(dǎo)老師:職稱:指導(dǎo)老師評(píng)語(yǔ):簽字:課程設(shè)計(jì)成績(jī):設(shè)計(jì)過程表現(xiàn)設(shè)計(jì)報(bào)告質(zhì)量總分設(shè)計(jì)過程表現(xiàn)設(shè)計(jì)報(bào)告質(zhì)量總分前言網(wǎng)絡(luò)中的每一臺(tái)計(jì)算機(jī)如同一座城堡,在這些城堡中,有的對(duì)外 完全開放,有的卻是緊鎖城門。入侵者們是如何找到,并打開它們的 城門的呢?這些城門究竟通向城堡的何處呢?在網(wǎng)絡(luò)技術(shù)中,把這些 城堡的“城門”稱之為計(jì)算機(jī)的“端口氣端口掃描是入侵者搜集信 息的幾種常用手法之一,也正是這一過程最容易使入侵者暴露自己的 身份和意圖。一般來說,掃描端口有如下目的:判斷目標(biāo)主機(jī)上開放了哪些服務(wù);判斷目標(biāo)主機(jī)的操作系統(tǒng);如果入侵者掌握了目

2、標(biāo)主機(jī)開放了哪些服務(wù),運(yùn)行何種操作系統(tǒng),他 們就能夠使用相應(yīng)的手段實(shí)現(xiàn)入侵,本課程設(shè)計(jì)將會(huì)通過用JAVA語(yǔ) 言實(shí)現(xiàn)一個(gè)小的端口掃描軟件,詳細(xì)描述端口掃描的原理,分析端口 掃描所涉及的問題,以便更加清楚地了解入侵者如何掃描目標(biāo)主機(jī)的 端口,同時(shí)掌握如何確保本機(jī)的安全性,為將來設(shè)計(jì)更為安全的系統(tǒng) 打下牢固基礎(chǔ)。目錄 TOC o 1-5 h z HYPERLINK l bookmark29 o Current Document 一、網(wǎng)絡(luò)基礎(chǔ)知識(shí)4 HYPERLINK l bookmark33 o Current Document 1、端口的基本概念4 HYPERLINK l bookmark36 o

3、 Current Document 2、端口的分類4 HYPERLINK l bookmark39 o Current Document 二、端口掃描的基本原理4 HYPERLINK l bookmark43 o Current Document 1、基本原理4 HYPERLINK l bookmark46 o Current Document 2、基于JAVA語(yǔ)言實(shí)現(xiàn)的核心代碼5 HYPERLINK l bookmark49 o Current Document 三、端口掃描器視圖6 HYPERLINK l bookmark53 o Current Document 1、工作窗口6 HYPE

4、RLINK l bookmark56 o Current Document 2、異常窗口6 HYPERLINK l bookmark59 o Current Document 3、窗口核心代碼6四、多線程快速掃描7 HYPERLINK l bookmark63 o Current Document 1、多線程機(jī)制7 HYPERLINK l bookmark66 o Current Document 2、多線程核心代碼8 HYPERLINK l bookmark69 o Current Document 五、用戶使用方法9 HYPERLINK l bookmark73 o Current Doc

5、ument 1、頁(yè)面說明9 HYPERLINK l bookmark76 o Current Document 2、按主機(jī)名掃描9 HYPERLINK l bookmark80 o Current Document 3、按IP地址掃描9 HYPERLINK l bookmark84 o Current Document 六、常用端口9 HYPERLINK l bookmark88 o Current Document 七、異常檢測(cè)10 HYPERLINK l bookmark92 o Current Document 結(jié)語(yǔ)13一、網(wǎng)絡(luò)基礎(chǔ)知識(shí)1、端口的基本概念“端口”在計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域中是個(gè)非常

6、重要的概念。它是專門為計(jì)算機(jī)通信 而設(shè)計(jì)的,它不是硬件,不同于計(jì)算機(jī)中的“插槽”,可以說是個(gè)“軟插槽”。如 果有需要的話,一臺(tái)計(jì)算機(jī)中可以有上萬(wàn)個(gè)端口。端口是由計(jì)算機(jī)的通信協(xié)議TCP/IP協(xié)議定義的。其中規(guī)定,用IP地址和端 口作為套接字,它代表TCP連接的一個(gè)連接端,一般稱為Socket。具體來說, 就是用IP端口來定位一臺(tái)主機(jī)中的進(jìn)程??梢宰鲞@樣的比喻,端口相當(dāng)于兩臺(tái) 計(jì)算機(jī)進(jìn)程間的大門,可以隨便定義,其目的只是為了讓兩臺(tái)計(jì)算機(jī)能夠找到對(duì) 方的進(jìn)程。計(jì)算機(jī)就像一座大樓,這個(gè)大樓有好多入口(端口),進(jìn)到不同的入 口中就可以找到不同的公司(進(jìn)程)。如果要和遠(yuǎn)程主機(jī)A的程序通信,那么只 要把數(shù)據(jù)

7、發(fā)向A端口就可以實(shí)現(xiàn)通信了。可見,端口與進(jìn)程是一一對(duì)應(yīng)的,如果某個(gè)進(jìn)程正在等待連接,稱之為該進(jìn) 程正在監(jiān)聽,那么就會(huì)出現(xiàn)與它相對(duì)應(yīng)的端口。由此可見,通過掃描端口,便可 以判斷出目標(biāo)計(jì)算機(jī)有哪些通信進(jìn)程正在等待連接。2、端口的分類端口是一個(gè)16 bit的地址,用端口號(hào)進(jìn)行標(biāo)識(shí)不同作用的端口 參見表2-2 和表2-3。端口一般分為兩類。熟知端口號(hào):范圍從0到1023,這些端口號(hào)一般固定分配給一些服務(wù)。比 如21端口分配給FTP服務(wù),25端口分配給SMTP服務(wù),80端口分配給HTTP 服務(wù),135端口分配給RPC服務(wù)等等動(dòng)態(tài)端口號(hào):動(dòng)態(tài)端口的范圍從1024到65535,這些端口號(hào)一般不固定分 配給某

8、個(gè)服務(wù),也就是說許多服務(wù)都可以使用這些端口。只要運(yùn)行的程序向系統(tǒng) 提出訪問網(wǎng)絡(luò)的申請(qǐng),那么系統(tǒng)就可以從這些端口號(hào)中分配一個(gè)供該程序使用。 比如8080端口就是分配給第一個(gè)向系統(tǒng)發(fā)出申請(qǐng)的程序。在關(guān)閉程序進(jìn)程后, 就會(huì)釋放所占用的端口號(hào)。二、端口掃描的基本原理1、基本原理端口掃描的原理其實(shí)非常簡(jiǎn)單,只是簡(jiǎn)單的利用JAVA提供庫(kù)函數(shù)Socket進(jìn) 行調(diào)用,與每一個(gè)感興趣的目標(biāo)計(jì)算機(jī)的端口進(jìn)行連接。如果對(duì)方端口處于監(jiān)聽 狀態(tài),那么連接就能成功。否則,這個(gè)端口不能用,既沒有提供服務(wù)。這個(gè)技術(shù) 的一個(gè)最大的優(yōu)點(diǎn)是,不需要任何權(quán)限,系統(tǒng)中的任何用戶都有權(quán)利使用這個(gè)調(diào) 用。引入多線程機(jī)制,利用多線程掃描的好

9、處就是速度快,如果對(duì)每個(gè)目標(biāo)端口 以線性的方式使用單獨(dú)的連接調(diào)用,那么將會(huì)花費(fèi)相當(dāng)長(zhǎng)的時(shí)間。多線程同時(shí)打 開多個(gè)套接字,從而加速掃描。在本設(shè)計(jì)中用戶可以自定義線程的個(gè)數(shù)。此處用 戶還可以自定義掃描方式。2、基于JAVA語(yǔ)言實(shí)現(xiàn)的核心代碼在多線程的控制下,利用for循環(huán)對(duì)端口逐一掃描for (i =XXXXXX; i XXXXXX; i+=XXXXXX)trytheTCPsocket=new Socket(hostAddress,i);theTCPsocket.close();判斷端口的類別switch(i)case 21:/對(duì)相應(yīng)開放端口識(shí)別。將開放端口內(nèi)容添加到顯示區(qū)域,并加鎖使各處同步關(guān)系

10、。synchronized (ThreadScan.Result) ThreadScan.Result.append( +i);ThreadScan.Result.append(:+porttype+n);/對(duì)相應(yīng)開放端口和沒有開放即連接失敗的端口作記錄,放入顯示區(qū)。catch (IOException e)同時(shí)也對(duì)程序加鎖防止出現(xiàn)序。synchronized (ThreadScan.ResultAll) /將所有端口內(nèi)容添加到顯示區(qū)域ThreadScan.ResultAll.append( +i);ThreadScan.ResultAll.append(:Closed+n);三、端口掃描器視

11、圖1、工作窗口這是用JAVA語(yǔ)言實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的端口掃描器軟件,主頁(yè)面視圖如下:2、異常窗口當(dāng)用戶操用不當(dāng),例如輸入的IP地址超過255,或者端口范圍大于65535時(shí), 用戶點(diǎn)擊“開始掃描”按鈕都會(huì)拋出相應(yīng)的異常,并提示錯(cuò)誤原因。如下圖示例:3、窗口核心代碼public class ThreadScanpublic static JFrame main=new JFrame(網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)端口掃描 器劉紀(jì)生);public static void main(String args)Submit.addActionListener(new SubmitAction();Stop.addA

12、ctionListener(new StopAction(); Cancel.addActionListener(new CancleAction(); OK.addActionListener(new OKAction();/實(shí)現(xiàn)保存功能saveItem.addActionListener(new java.awt.event.ActionListener() );實(shí)現(xiàn)退出功能 exitItem.addActionListener(new java.awt.event.ActionListener() /實(shí)現(xiàn)幫助功能 helpItem.addActionListener(new java.a

13、wt.event.ActionListener() saveButton.addActionListener(new java.awt.event.ActionListener() ); main.setVisible(true); 1、多線程機(jī)制在本系統(tǒng)中采用了多線程機(jī)制,用戶可以上述工作窗口中輸入所要打開 的線程數(shù),對(duì)相端口范圍進(jìn)行掃描。多線程是指在一個(gè)程序中同時(shí)打開多處運(yùn)行 單元,各線程同時(shí)執(zhí)行。大大提高了掃描的速度。例如,假設(shè)用戶填寫的線程數(shù)為3,則其掃描過程如下所示例如,假設(shè)用戶填寫的線程數(shù)為1,則其掃描過程如下所示當(dāng)設(shè)置1個(gè)線程時(shí),就好比只有一個(gè)人(一個(gè)線程)在做這件事,而但設(shè)置

14、多個(gè)線程時(shí),就好比是多個(gè)人分批一起做這件事。顯然是多線程會(huì)處理的更快。2、多線程核心代碼public class TCPThread extends Thread public static InetAddress hostAddress;public TCPThread(String name,int threadnum) super(name); this.threadnum = threadnum; 運(yùn)行函數(shù)public void run() /根據(jù)ip地址進(jìn)行掃描 if(type = 0)/不同的端口循環(huán)掃描 for (i = XXXXXX; i XXXXXX; i += XXXXXX

15、) theTCPsocket=new Socket(hostAddress,i); theTCPsocket.close(); /按照主機(jī)名進(jìn)行端口掃描if(type = 1) for (i = XXXXXX; i XXXXXX; i += XXXXXX) /. /啟動(dòng)線程for(int i=0;imaxThread;i+) new TCPThread(T + i,i).start(); 五、用戶使用方法1、頁(yè)面說明首先在菜單中有“文件” “幫助”選項(xiàng)。在“文件”中設(shè)置了 “保存掃描結(jié) 果”和“退出”。用戶可以點(diǎn)擊“保存掃描結(jié)果”或者是Ctrl+S,對(duì)掃描結(jié)果進(jìn)保存。也可在“幫助”菜單查看相關(guān)

16、信息。如圖岸口掃描1(掃描原理岸口掃描1(掃描原理”使用說明用同一信息對(duì)日標(biāo)計(jì)算機(jī)前所有所需掃描 的勰口進(jìn)行發(fā)送,然后抿據(jù)返回勰口就態(tài) 來分析目標(biāo)計(jì)算機(jī)的甥中是否打開、是否文件(E)幫助保存掃描結(jié)果(易Ctrl-S退出(Q)Ctrl-E閱讀在“端口范圍”用戶可以輸入要掃描的端口的范圍,默認(rèn)是01000,最大 是 65535。在“線程數(shù)”中用戶可以自定義線程數(shù),默認(rèn)是100,最大是200。之后是 兩種掃描方式的選擇。掃描所有窗口中會(huì)顯示所有被掃描過的不有打開和打開的端口,開放端口中 會(huì)顯示所有掃描得到的開放端口。2、按主機(jī)名掃描當(dāng)用戶選中按主機(jī)名掃描時(shí),需要輸入將要掃描的主機(jī)名,默認(rèn)是本機(jī) lo

17、calhost,用戶也可以自己填寫相關(guān)主機(jī)。之后點(diǎn)擊“開始掃描”。3、按IP地址掃描當(dāng)用戶選中按IP地址掃描時(shí),需要輸入將要掃描的主機(jī)的IP,默認(rèn)是O 之后點(diǎn)擊“開始掃描”。如果用戶輸入的端口范圍太大,這樣會(huì)導(dǎo)致程序掃描時(shí) 間很長(zhǎng),這時(shí)可以點(diǎn)擊“停止掃描”來中止掃描。六、常用端口系統(tǒng)默認(rèn)會(huì)識(shí)別一部分常用端口,對(duì)常用端口系統(tǒng)將掃描出來,并隨之打印端口功能, 對(duì)未能識(shí)別的開放端口,系統(tǒng)將隨之打印“UnknownPort:Open”。代碼如下:switch(i) case 21: porttype = (FTP); break;case 23: porttype = (TELNET); break;

18、case 25: porttype = (SMTP); break;case 80: porttype = (HTTP); break;case 110: porttype = (POP); break;case 139: porttype = (netBIOS); break;case 1433: porttype = (SQL Server); break;case 3389: porttype = (Terminal Service); break;case 443: porttype = (HTTPS); break;case 1521: porttype = (Oracle); br

19、eak;default : porttype = (UnknownPort:Open); break;七、異常檢測(cè)當(dāng)用戶輸入的數(shù)據(jù)不合法時(shí),系統(tǒng)將彈出錯(cuò)誤窗口,并提示錯(cuò)誤原因,相關(guān)代碼:/判斷起始土?是否正確,判斷條件:大于0且小于等于255 if(ip1255|ip2255|ip3255|ipstart255)ThreadScan.DLGINFO.setText(ip 地址為 0-255 的整數(shù)!);ThreadScan.DLGError.setVisible(true);ThreadScan.Submit.setEnabled(true); /設(shè)置開始掃描按鈕可用。return;/判斷主機(jī)

20、名稱的有效性 try TCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.g etText();catch(UnknownHostException e) ThreadScan.DLGINFO.setText(錯(cuò)誤的域名或地址不可達(dá)!); ThreadScan.DLGError.setVisible(true); ThreadScan.Submit.setEnabled(true);/設(shè)置開始掃描按鈕可用。return;判斷端口號(hào)的有效性 try minPort=Integer.parseInt(ThreadScan.

21、minPort.getText(); maxPort=Integer.parseInt(ThreadScan.maxPort.getText(); maxThread=Integer.parseInt(ThreadScan.maxThread.getText(); catch(NumberFormatException e)ThreadScan.DLGINFO.setText(錯(cuò)誤的端口號(hào)或線程數(shù)!端口號(hào)和線程數(shù) 必須為整數(shù)!);ThreadScan.DLGError.setVisible(true);ThreadScan.Submit.setEnabled(true);/設(shè)置開始掃描按鈕可用

22、。return; 判斷最小端口號(hào)的有效范圍:大于0且小于65535,最大端口應(yīng)大于最小端口 if(minPort65535 | minPortmaxPort)ThreadScan.DLGINFO.setText(最小端口必須是0-65535并且小于最大端 口的整數(shù)!);ThreadScan.DLGError.setVisible(true);ThreadScan.Submit.setEnabled(true);/設(shè)置開始掃描按鈕可用。return; else TCPThread.MIN_port=minPort; /判斷最大端口號(hào)的有效范圍:大于0且小于65535,最大端口應(yīng)大于最小端口 if(maxPort6

溫馨提示

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

評(píng)論

0/150

提交評(píng)論