311409040209-柴梧炫-簡單端口掃描器_第1頁
311409040209-柴梧炫-簡單端口掃描器_第2頁
311409040209-柴梧炫-簡單端口掃描器_第3頁
311409040209-柴梧炫-簡單端口掃描器_第4頁
311409040209-柴梧炫-簡單端口掃描器_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、河南理工大學計算機科學與技術學院課程設計報告2015 2016學年第2學期課程名稱 計算機網(wǎng)絡 設計題目 簡單端口掃描器 姓 名 柴梧炫 學 號 311409040209 專業(yè)班級 網(wǎng)絡14-2 指導教師 劉 琨 2016 年 7 月 6 日 目錄一、課程設計的目的二、課程設計要求三、相關知識四、實驗流程五、結果六、主要程序七、總結八、參考文獻一:課程設計的目的掃描器是網(wǎng)絡信息收集的一種方法,從功能上可分為漏洞掃描器和端口掃描器。理解客戶機-服務器與端口掃描的工作原理,實現(xiàn)對目標主機端口掃描的功能,即發(fā)現(xiàn)目標主機開啟的端口信息。二:課程設計要求本課程設計的目標是設計并實現(xiàn)一個網(wǎng)絡掃描器,它通過

2、與目標主機TCP/IP端口建立連接并請求某些服務,記錄目標主機的應答,分析目標主機相關信息,從而發(fā)現(xiàn)目標主機某些內(nèi)在的安全弱點。掃描器通常分兩類:漏洞掃描器和端口掃描器。端口掃描器用來掃描目標機開放的服務端口以及端口相關信息。漏洞掃描器檢查目標中可能包含的大量已知的漏洞,如果發(fā)現(xiàn)潛在的漏洞可能性,就報告給掃描者。網(wǎng)絡漏洞端口掃描器對目標系統(tǒng)進行檢測時,首先探測目標系統(tǒng)的存活主機,對存活主機進行端口掃描,確定系統(tǒng)開放的端口,同時根據(jù)協(xié)議指紋技術識別出主機的操作系統(tǒng)類型。然后掃描器對開放的端口進行網(wǎng)絡服務類型的識別,確定其提供的網(wǎng)絡服務。漏洞掃描器根據(jù)目標系統(tǒng)的操作系統(tǒng)平臺和提供的網(wǎng)絡服務,調(diào)用漏

3、洞資料庫中已知的各種漏洞進行逐一檢測,通過對探測響應數(shù)據(jù)包的分析判斷是否存在漏洞。在分析總結目前現(xiàn)有的掃描軟件,在掌握掃描器的原理基礎上,首先設計、實現(xiàn)一種端口掃描程序,存儲掃描結果。在此基礎上,有余力的同學對已經(jīng)開放的重要端口有具體漏洞分析檢測。程序具體要求實現(xiàn)以下任一程序:高效端口掃描器設計與實現(xiàn):參照常見端口掃描器,在局域網(wǎng)內(nèi),能對所有計算機進行常用端口的高速掃描,給出掃描結果。另外根據(jù)配置不同的網(wǎng)段,實現(xiàn)正對校園網(wǎng)絡的基于網(wǎng)段的高速掃描。高效的漏洞掃描器的設計與實現(xiàn):設計網(wǎng)絡漏洞掃描儀的結構,建立常見的漏洞庫,并基于該漏洞庫,實現(xiàn)高效的基于網(wǎng)段的漏洞掃描器。主機脆弱性分析系統(tǒng):將漏洞和

4、端口掃描結合起來,實現(xiàn)針對主機的脆弱性分析系統(tǒng)。三: 相關知識 1.端口的基本概念: 我們這里所說的端口,不是計算機硬件的i/o端口,而是軟件形式上的概念。服務器可以向外提供多種服務,比如,一臺服務器可以同時是web服務器,也可以是ftp服務器,同時,它也可以是郵件服務器。為什么一臺服務器可以同時提供那么多的服務呢?其中一個很主要的方面,就是各種服務采用不同的端口分別提供不同的服務。 根據(jù)提供服務類型的不同,端口分為兩種,一種是tcp端口,一種是udp端口。計算機之間相互通信的時候,分為兩種方式:一種是發(fā)送信息以后,可以確認信息是否到達,也就是有應答的方式,這種方式大多采用tcp協(xié)議;一種是發(fā)

5、送以后就不管了,不去確認信息是否到達,這種方式大多采用udp協(xié)議。對應這兩種協(xié)議的服務提供的端口,也就分為tcp端口和udp端口。那么,如果攻擊者使用軟件掃描目標計算機,得到目標計算機打開的端口,也就了解了目標計算機提供了那些服務。2. 常見端口介紹 端口:21 服務:FTP 說明:FTP服務器所開放的端口,用于上傳、下載。最常見的攻擊者用于尋找打開anonymous的FTP服務器的方法。這些服務器帶有可讀寫的目錄。木馬Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所開放的端口。 端口:23 服務:Telnet 說明:遠程登

6、錄,入侵者在搜索遠程登錄UNIX的服務。大多數(shù)情況下掃描這一端口是為了找到機器運行的*作系統(tǒng)。還有使用其他技術,入侵者也會找到密碼。木馬Tiny Telnet Server就開放這個端口 端口:25 服務:SMTP 說明:SMTP服務器所開放的端口,用于發(fā)送郵件。入侵者尋找SMTP服務器是為了傳遞他們的SPAM。入侵者的帳戶被關閉,他們需要連接到高帶寬的E-MAIL服務器上,將簡單的信息傳遞到不同的地址。木馬Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都開放這個端口 端口:80 服務:HTTP

7、 說明:用于網(wǎng)頁瀏覽。木馬Executor開放此端口。3. 端口掃描器功能簡介: 服務器上所開放的端口就是潛在的通信通道,也就是一個入侵通道。對目標計算機進行端口掃描,能得到許多有用的信息,進行端口掃描的方法很多,可以是手工進行掃描、也可以用端口掃描軟件進行。 掃描器通過選用遠程TCP/IP不同的端口的服務,并記錄目標給予的回答,通過這種方法可以搜集到很多關于目標主機的各種有用的信息,例如遠程系統(tǒng)是否支持匿名登陸、是否存在可寫的FTP目錄、是否開放TELNET服務和HTTPD服務等。4.常用端口掃描技術: 1、TCP connect()掃描: 這是最基本的TCP掃描,操作系統(tǒng)提供的connec

8、t()系統(tǒng)調(diào)用可以用來與每一個感興趣的目標計算機的端口進行連接。如果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個端口是不能用的,即沒有提供服務。這個技術的一個最大的優(yōu)點是,你不需要任何權限。系統(tǒng)中的任何用戶都有權利使用這個調(diào)用。另一個好處就是速度,如果對每個目標端口以線性的方式,使用單獨的connect()調(diào)用,那么將會花費相當長的時間,使用者可以通過同時打開多個套接字來加速掃描。使用非阻塞I/O允許你設置一個低的時間用盡周期,同時觀察多個套接字。但這種方法的缺點是很容易被察覺,并且被防火墻將掃描信息包過濾掉。目標計算機的logs文件會顯示一連串的連接和連接出錯消息,并且能很快

9、使它關閉。 2、TCP SYN掃描: 這種技術通常認為是“半開放”掃描,這是因為掃描程序不必要打開一個完全的TCP連接。掃描程序發(fā)送的是一個SYN數(shù)據(jù)包,好象準備打開一個實際的連接并等待反應一樣(參考TCP的三次握手建立一個TCP連接的過程)。一個SYN|ACK的返回信息表示端口處于偵聽狀態(tài):返回RST表示端口沒有處于偵聽態(tài)。如果收到一個SYN|ACK,則掃描程序必須再發(fā)送一個RST信號,來關閉這個連接過程。這種掃描技術的優(yōu)點在于一般不會在目標計算機上留下記錄,但這種方法的缺點是必須要有root權限才能建立自己的SYN數(shù)據(jù)包。 3、TCP FIN 掃描: SYN掃描雖然是“半開放”方式掃描,但

10、在某些時候也不能完全隱藏掃描者的動作,防火墻和包過濾器會對管理員指定的端口進行監(jiān)視,有的程序能檢測到這些掃描。相反,F(xiàn)IN數(shù)據(jù)包在掃描過程中卻不會遇到過多問題,這種掃描方法的思想是關閉的端口會用適當?shù)腞ST來回復FIN數(shù)據(jù)包。另一方面,打開的端口會忽略對FIN數(shù)據(jù)包的回復。這種方法和系統(tǒng)的實現(xiàn)有一定的關系,有的系統(tǒng)不管端口是否打開都會回復RST,在這種情況下此種掃描就不適用了。另外這種掃描方法可以非常容易的區(qū)分服務器是運行Unix系統(tǒng)還是NT系統(tǒng)。 4、IP段掃描: 這種掃描方式并不是新技術,它并不是直接發(fā)送TCP探測數(shù)據(jù)包,而是將數(shù)據(jù)包分成兩個較小的IP段。這樣就將一個TCP頭分成好幾個數(shù)據(jù)

11、包,從而過濾器就很難探測到。但必須小心:一些程序在處理這些小數(shù)據(jù)包時會有些麻煩。 5、TCP 反向 ident掃描: ident 協(xié)議允許(rfc1413)看到通過TCP連接的任何進程的擁有者的用戶名,即使這個連接不是由這個進程開始的。例如掃描者可以連接到http端口,然后用identd來發(fā)現(xiàn)服務器是否正在以root權限運行。這種方法只能在和目標端口建立了一個完整的TCP連接后才能看到。 6、FTP 返回攻擊: FTP協(xié)議的一個有趣的特點是它支持代理(proxy)FTP連接,即入侵者可以從自己的計算機和目標主機的FTP server-PI(協(xié)議解釋器)連接,建立一個控制通信連接。然后請求這個s

12、erver-PI激活一個有效的server-DTP(數(shù)據(jù)傳輸進程)來給Internet上任何地方發(fā)送文件。對于一個User-DTP,盡管RFC明確地定義請求一個服務器發(fā)送文件到另一個服務器是可以的,但現(xiàn)在這個方法并不是非常有效。這個協(xié)議的缺點是“能用來發(fā)送不能跟蹤的郵件和新聞,給許多服務器造成打擊,用盡磁盤,企圖越過防火墻”。四:實驗流程 1 步驟: 1.先輸入想要掃描的網(wǎng)段; 2.然后將輸入的網(wǎng)段轉化為可排序的ip數(shù)組 3.建立多個線程,每個線程掃描一個ip。每個線程內(nèi)先建立數(shù)據(jù)流套接字,然后綁定 ip端口進行掃描。將掃描端口保存到g_map_ScanResult。 4.清理結束后進程,輸出

13、結果。 5.計算所用時間。 程序中主要的函數(shù): int main()/主函數(shù) InitProc();/初始化 UserInput();/輸入 ScanIp(g_startIp,g_endIp,g_map_ScanResult);/開始掃描 CleanProc();/清理結束后進程 OutPutScanInfo();/輸出結果 DWORD WINAPI ThreadFunc(LPVOID th_para)/掃描線程每一個ip unsigned long InvertIp(unsigned long srcIp) /將ip化為可比較的 int GetIpToScan(const string &a

14、mp;StartIp, const string &EndIp, vector<unsigned long> &vec_ip)/將所有ip排序放在一個數(shù)組內(nèi)2主流程圖: 開始 初始化輸入ip斷 ScanIp掃描計算時間 結束五:結果 開始界面 掃描界面:結果界面:六、主要程序:1.掃描端口:/#include "IpScan.h"using namespace std;/全局變量:/待掃描的端口short g_portsTOscan= 20,21,22,23,25,42,43,47,53,63,67,68,79,80,95,106,107,109

15、,110,113,135,137,138,139,143, 144,161,162,443,445,1024,1080,1433,1434,1755,3306,4000,5010,5190,5631,5632,8000,8080 ;const short PORTSNUM = sizeof(g_portsTOscan) / sizeof(short);/端口個數(shù)/等掃描的IPvector<unsigned long> g_vec_IpToScan;string g_startIp;string g_endIp;/開啟的線程數(shù),目前為1個IP1個線程long g_runThreadN

16、um;/socket相關TIMEVAL g_timeout; /阻塞等待時間/FD_SET g_mask; /socket模式設置,儲存socket信息const short TIMEOUT = 1; /阻塞等待時間WSADATA g_wsadata; /socket版本信息/線程中的互斥體HANDLE g_PortMutex; HANDLE g_ThreadNumMutex; HANDLE g_ResultMutex; /輸入結果的互斥量/保存IP掃描的結果multimap<unsigned long, string> g_map_ScanResult;2.掃描ip是否合法:/線

17、程函數(shù),掃描每一個IPDWORD WINAPI ThreadFunc(LPVOID th_para) /獲取需要掃描的IP /char *pStrIp = (char*)th_para; unsigned long ulScanIp = *(unsigned long*)th_para; int index = 0; /端口索引 SOCKET link_sock; /SOCKET FD_SET set_flag; /SOCKET描述 short select_ret; /select異步返回值 short port; /正在掃描的端口 while (index < PORTSNUM) p

18、ort = g_portsTOscanindex; /創(chuàng)建數(shù)據(jù)流套接字 link_sock = socket(AF_INET, SOCK_STREAM, 0); if (link_sock = INVALID_SOCKET) /cout << "創(chuàng)建link_sock socket失敗:錯誤號為: " << GetLastError() << endl; WaitForSingleObject(g_ThreadNumMutex,INFINITE); g_runThreadNum-; ReleaseMutex(g_ThreadNumMute

19、x); /cout << "*還有_"<< g_runThreadNum << "_個掃描線程進行中*"<< endl; return -1; FD_ZERO(&set_flag); /將指定文件描述符清空 FD_SET(link_sock,&set_flag); /用于在文件描述符集合中增加一個新的文件描述符 /設置連接地址 SOCKADDR_IN scan_addr; scan_addr.sin_family = AF_INET; scan_addr.sin_addr.s_addr =

20、ulScanIp; scan_addr.sin_port = htons(port); unsigned long sock_set = 1; ioctlsocket(link_sock,FIONBIO,&sock_set); /設置套接字為非阻塞模式,第3個參數(shù)非0為非阻塞 connect(link_sock,(struct sockaddr *) &scan_addr, sizeof(scan_addr);/連接指定IP端口 select_ret = select(0,NULL,&set_flag,NULL,&g_timeout);/異步返回值 if (se

21、lect_ret = 0 | select_ret = -1) +index; continue; else strstream stream_result; struct in_addr ipaddr; ipaddr.s_addr = ulScanIp; char *pStrIp = inet_ntoa(ipaddr); stream_result << "t主機地址為:" << pStrIp << "t找到開放的端口: " << port <<'0' string str_r

22、esult(stream_result.str(); /將掃描結果儲存到輸出變量中去 WaitForSingleObject(g_ResultMutex,INFINITE); g_map_ScanResult.insert(make_pair(ulScanIp,str_result); ReleaseMutex(g_ResultMutex); +index; 3.掃描完一個線程: shutdown(link_sock, 0); closesocket(link_sock); WaitForSingleObject(g_ThreadNumMutex,INFINITE); g_runThreadN

23、um-; ReleaseMutex(g_ThreadNumMutex); /cout << "*還有_"<< g_runThreadNum << "_個掃描線程進行中*"<< endl; return 0;/-4.將IP轉化成能直接遞增和遞減的地址:unsigned long InvertIp(unsigned long srcIp) unsigned char first; unsigned char second; unsigned char third; unsigned char fourth; f

24、irst = srcIp & 0x00FF; second = (srcIp >> 8) & 0x00FF; third = (srcIp >> 16) & 0x00FF; fourth = (srcIp >> 24) & 0x00FF; return (first << 24) | (second << 16) | (third << 8) | fourth; /-4.將IP內(nèi)的IP轉化成一個一個unsigned long 類型存在數(shù)組中:int GetIpToScan(const str

25、ing &StartIp, const string &EndIp, vector<unsigned long> &vec_ip) /判斷輸入的IP是否合法 unsigned long ulStartIp = inet_addr(StartIp.c_str(); unsigned long ulEndIp = inet_addr(EndIp.c_str(); if( INADDR_NONE = ulStartIp | INADDR_NONE = ulEndIp ) cout << "請輸入合法的IP" << end

26、l; return -1; 5.判斷查詢的是一個IP還是IP段: if (ulStartIp = ulEndIp && ulStartIp !=0) vec_ip.push_back(ulStartIp); return 0; if (ulStartIp = 0 && ulEndIp = 0) return 0; if (ulStartIp = 0) vec_ip.push_back(ulEndIp); return 0; if (ulEndIp = 0) vec_ip.push_back(ulStartIp); return 0; / /將IP轉換成可以遞增比較的類型 ulStartIp = InvertIp(ulStartIp); ulEndIp = InvertIp(ulEndIp); /指定前后順序,ulEndIp較

溫馨提示

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

評論

0/150

提交評論