


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)題 目:端口掃描程序設(shè)計(jì)院、 系:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院網(wǎng)絡(luò)工程系班 級(jí):學(xué) 號(hào):姓 名:同組成員:指導(dǎo)教師: 成 績:一.系統(tǒng)設(shè)計(jì)的目標(biāo):掃描器是網(wǎng)絡(luò)信息收集的一種方法,從功能上可分為漏洞掃描器和端口掃描器。通 過此次課程設(shè)計(jì),能夠掌握漏洞、端口的基礎(chǔ)知識(shí),掌握掃描器的基本原理并設(shè)計(jì)實(shí)現(xiàn) 端口掃描和漏洞掃描程序。二.系統(tǒng)原理:常用的端口掃描技術(shù)有以下幾種:2.1 TCP conn ect()掃描:簡介:這是最基本的TCP掃描,操作系統(tǒng)提供的connect()系統(tǒng)調(diào)用可以用來與每一個(gè)感 興趣的目標(biāo)計(jì)算機(jī)的端口進(jìn)行連接。如果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個(gè)端口是
2、不能用的,即沒有提供服務(wù)。優(yōu)點(diǎn):不需要任何權(quán)限。系統(tǒng)中的任何用戶都有權(quán)利使用這個(gè)調(diào)用。另一個(gè)好處就是速度,如果對(duì)每個(gè)目標(biāo)端口以線性的方式,使用單獨(dú)的connect()調(diào)用,那么將會(huì)花費(fèi)相當(dāng)長的時(shí)間,使用者可以通過同時(shí)打開多個(gè)套接字來加速掃描。使用非阻塞I/O允許你設(shè)置一個(gè)低的時(shí)間用盡周期,同時(shí)觀察多個(gè)套接字。缺點(diǎn):很容易被察覺,并且被防火墻將掃描信息包過濾掉。目標(biāo)計(jì)算機(jī)的logs文件會(huì)顯示 一連串的連接和連接出錯(cuò)消息,并且能很快使它關(guān)閉。2.2 TCP SYN 掃描:簡介:這種技術(shù)通常認(rèn)為是“半開放”掃描,這是因?yàn)閽呙璩绦虿槐匾蜷_一個(gè)完全的 TCP 連接。掃描程序發(fā)送的是一個(gè) SYN數(shù)據(jù)包,
3、好象準(zhǔn)備打開一個(gè)實(shí)際的連接并等待反 應(yīng)一樣(參考TCP的三次握手建立一個(gè)TCP連接的過程)。一個(gè)SYN|ACK勺返回信息 表示端口處于偵聽狀態(tài):返回RST表示端口沒有處于偵聽?wèi)B(tài)。如果收到一個(gè)SYN|ACK 則掃描程序必須再發(fā)送一個(gè)RST信號(hào),來關(guān)閉這個(gè)連接過程。優(yōu)點(diǎn):一般不會(huì)在目標(biāo)計(jì)算機(jī)上留下記錄。缺點(diǎn):必須要有root權(quán)限才能建立自己的SYN數(shù)據(jù)包。2.3 TCP FIN 掃描:簡介:SYN掃描雖然是“半開放”方式掃描,但在某些時(shí)候也不能完全隱藏掃描者的動(dòng)作, 防火墻和包過濾器會(huì)對(duì)管理員指定的端口進(jìn)行監(jiān)視,有的程序能檢測到這些掃描。 相反,F(xiàn)IN數(shù)據(jù)包在掃描過程中卻不會(huì)遇到過多問題,這種掃描
4、方法的思想是關(guān)閉 的端口會(huì)用適當(dāng)?shù)腞ST來回復(fù)FIN數(shù)據(jù)包。另一方面,打開的端口會(huì)忽略對(duì)FIN數(shù)據(jù)包的回復(fù)。這種方法和系統(tǒng)的實(shí)現(xiàn)有一定的關(guān)系,有的系統(tǒng)不管端口是否打開都 會(huì)回復(fù)RST在這種情況下此種掃描就不適用了。另外這種掃描方法可以非常容易 的區(qū)分服務(wù)器是運(yùn)行 Unix系統(tǒng)還是NT系統(tǒng)。優(yōu)點(diǎn):SYN掃FIN數(shù)據(jù)包可以不惹任何麻煩的通過。缺點(diǎn):這種方法和系統(tǒng)的實(shí)現(xiàn)有一定的關(guān)系,有些系統(tǒng)不論是打開的或關(guān)閉的端口對(duì)FIN數(shù)據(jù)包都要給以回復(fù),這種情況下該方法就不實(shí)用了。2.4 IP 段掃描:簡介:這種掃描方式并不是新技術(shù),它并不是直接發(fā)送TCP探測數(shù)據(jù)包,而是將數(shù)據(jù)包分成兩個(gè)較小的IP段。這樣就將一
5、個(gè)TCP頭分成好幾個(gè)數(shù)據(jù)包。優(yōu)點(diǎn):過濾器就很難探測到。缺點(diǎn):一些程序在處理這些小數(shù)據(jù)包時(shí)會(huì)有些麻煩。2.5 TCP反向ide nt掃描:簡介:ide nt協(xié)議允許(rfc1413)看到通過TCP連接的任何進(jìn)程的擁有者的用戶名,即使這 個(gè)連接不是由這個(gè)進(jìn)程開始的。例如掃描者可以連接到 http端口,然后用identd 來發(fā)現(xiàn)服務(wù)器是否正在以root權(quán)限運(yùn)行。優(yōu)點(diǎn):通過TCP連接的任何進(jìn)程的擁有者的用戶名。缺點(diǎn):這種方法只能在和目標(biāo)端口建立了一個(gè)完整的TCP連接后才能看到。2.6 FTP返回攻擊簡介:FTP協(xié)議的一個(gè)有趣的特點(diǎn)是它支持代理(proxy ) FTP連接,即入侵者可以從自己 的計(jì)算機(jī)
6、和目標(biāo)主機(jī) 的FTP server-PI(協(xié)議解釋器)連接, 建立一個(gè)控制通信連接。然后請(qǐng)求這個(gè)server-PI激活一個(gè)有效的server-DTP(數(shù)據(jù)傳輸進(jìn)程)來給In ternet上任何地方發(fā)送文件。優(yōu)點(diǎn):建立一個(gè)控制通信連接。缺點(diǎn):能用來發(fā)送不能跟蹤的郵件和新聞,給許多服務(wù)器造成打擊,用盡磁盤,企圖越過 防火墻。三. 系統(tǒng)功能分析:作為端口掃描程序,首先需要完成的功能就是對(duì)于系統(tǒng)操作系統(tǒng)的服務(wù)端口進(jìn)行掃 描,返回掃描結(jié)果。對(duì)于端口的掃描,包括對(duì)于本機(jī)系統(tǒng)服務(wù)端口,局域網(wǎng)內(nèi)目標(biāo)機(jī)系 統(tǒng),以及遠(yuǎn)程IP的系統(tǒng)服務(wù)端口進(jìn)行掃描。有些時(shí)候,用戶并不需要去掃描整個(gè)系統(tǒng)的所有端口,因?yàn)檫@樣的話不僅會(huì)
7、浪費(fèi)大 量的時(shí)間,而且可能導(dǎo)致難以找到自己需要了解的端口的掃描結(jié)果。所以,對(duì)于選擇性 地對(duì)端口進(jìn)行掃描也非常重要。這當(dāng)然也是掃描程序需要實(shí)現(xiàn)的功能之一。用戶在等待掃描的時(shí)候,往往希望知道它的工作進(jìn)度。這樣用戶可以更好地控制自 己的操作。站在用戶的角度思考,設(shè)置進(jìn)度是程序需要完成的,這樣就能知道程序掃描 的進(jìn)度。系統(tǒng)必須提供的服務(wù)是功能需求的基本,本著站在用戶角度思考的原則,做出如上 敘述需求,從簡列舉如下:掃描功能;地址選擇功能;端口選擇功能;本程序主要實(shí)現(xiàn)了簡易的TCP connect()掃描,對(duì)TCP掃描支持多線程掃描。四. 系統(tǒng)實(shí)現(xiàn):4.1步驟:先輸入想要掃描的網(wǎng)段;然后將輸入的網(wǎng)段轉(zhuǎn)化
8、為可排序的ip數(shù)組建立多個(gè)線程,每個(gè)線程掃描一個(gè)ip。每個(gè)線程內(nèi)先建立數(shù)據(jù)流套接字,然后綁定ip端口進(jìn)行掃描。將掃描端口保存到 g_map_ScanResult。清理結(jié)束后進(jìn)程,輸出結(jié)果。計(jì)算所用時(shí)間。4.2程序中主要的函數(shù):程序簡介int mai n();主函數(shù)In itProc();初始化User In put();輸入Sca nlp(g_startlp,g_e ndlp,g_map_Sca nResult);開始掃描Clea nProc();清理結(jié)束后進(jìn)程OutPutSca nIn fo();輸出結(jié)果DWORD WINAPI ThreadFu nc(LPVOID th_pa ra)掃描線
9、程每一個(gè)ipun sig ned long In vertIp( un sig ned long srcIp)將ip化為長整型int GetIpToSca n(const stri ng&Startlp,const將所有ip排序放在一個(gè)數(shù)組內(nèi)stri ng &En dIp, vector< un sig ned long&vec_ip)4.3實(shí)驗(yàn)結(jié)果:C:User5'.J asonDsk: p De bu gcccc. exe端口掃描器itiMKHEKJt nw aocacMiMKJt nw aocarn atx可掃描一個(gè)或多個(gè)IP,輸人同一網(wǎng)段的兩個(gè)IP
10、d格式為 W1 的.1 192-168-1-254.只掃描一個(gè)IF時(shí)輸入兩個(gè)相同1P- 掃描多個(gè)IP時(shí)輸入兩個(gè)不相同】P-X JC M MJ( K JC K M JC JC J(SC M JC JC H'tHC-W'M JC M M M )(K J4 M M M )( M"3( JC JC KJC 3( JC JC M M X JCJC 34 M M J4現(xiàn)在請(qǐng)輸入需要掃描的IF圖4-1開始界面時(shí)間為二?2 - 049秒圖4-2掃描界面t s29i29118 6 1描2 3 02 5 0描的IF34EfelP:192.168 結(jié)東IP為:燦.価富錄
11、要記記 Ip4 書示為為為 fcir址 主 的放放放JffCTffi到到到圖4-3掃描結(jié)果附錄:源程序代碼:#pragma comment(lib,"ws2_32.lib")#pragma warning (disable:4786)#in clude <iostream>#in clude <strstream>#in clude <win sock2.h>#in clude <stri ng>#in clude <vector>#in clude <map>#in clude <fstream
12、>#in clude <time.h>#in clude "IpSca n.h"using n amespace std;/全局變量:II待掃描的端口shortg_portsTOsca n=20,21,22,23,25,42,43,47,53,63,67,68,79,80,95,106,107,109,110,113,135,137,138,139,143,144,161,162,443,445,1024,1080,1433,1434,1755,3306,4000,5010,5190,5631,5632,8000,80805const short PORT
13、SNUM = sizeof(g_portsTOsca n) / sizeof(short);/端口個(gè)數(shù)II等掃描的IPvector<un sig ned longg_vec_lpToSca n;string g_startlp;stri ng g_en dlp;/開啟的線程數(shù),目前為1個(gè)IP1個(gè)線程long g_run ThreadNum;/socket 相關(guān)TIMEVAL g_timeout; /阻塞等待時(shí)間FD_SET g_mask; /socket模式設(shè)置,儲(chǔ)存 socket 信息con st short TIMEOUT = 1; /阻塞等待時(shí)間WSADATA g_wsadata;
14、 /socket版本信息/線程中的互斥體HANDLE g_PortMute x;HANDLE g_ThreadNumMute x;HANDLE g_ResultMutex; /輸入結(jié)果的互斥量/保存IP掃描的結(jié)果multimapv un sig ned long, stri ng> g_map_Sca nResult;/ /線程函數(shù),掃描每一個(gè)IPDWORD WINAPI ThreadFu nc(LPVOID th_para)/ 獲取需要掃描的IP/char *pStrIp = (char*)th_para;int in dex = 0;/端口索引描述 異步返回值 正在掃描的端口un s
15、ig ned long ulSca nip = *(un sig ned Ion g*)th_para;SOCKET li nk_sock;/SOCKETFD_SET set_flag;/SOCKETshort select_ret; /select short port;/while (i ndex < PORTSNUM)port = g_portsTOsca ni ndex;/創(chuàng)建數(shù)據(jù)流套接字lin k_sock = socket(AF_INET, SOCK_STREAM, 0);if (li nk_sock = INVALID_SOCKET)/cout << "
16、;創(chuàng)建 link_sock socket 失?。哄e(cuò)誤號(hào)為:"<< GetLastError() << endl;WaitForSi ngleObject(g_ThreadNumMutex,INFINITE);g_run ThreadNum-;ReleaseMutex(g_ThreadNumMutex);/cout << "* return -1;還有 _"<< g_run ThreadNum << "_ 個(gè)掃描線程進(jìn)行中 *"<< endl;FD_ZERO(&set
17、_flag);/將指定文件描述符清空FD_SET(li nk_sock, &set_flag); /用于在文件描述符集合中增加一個(gè)新的文件描述符/設(shè)置連接地址SOCKADDR_IN scan_addr;sca n_addr.sin_family = AF_INET;sca n_addr.s in _addr.s_addr = ulSca nip;sca n_addr.s in _port = hton s(port);un sig ned long sock_set = 1;ioctlsocket(link_sock,FIONBIO,&sock_set);/設(shè)置套接字為非阻塞模
18、式,第 3 個(gè)參數(shù)非0為非阻塞conn ect(l in k_sock,(struct sockaddr *) &sca n_addr, sizeof(sca n_addr);連接指定IP端口異步返回值select_ret = select(0,NULL, &set_flag,NULL, &g_timeout);if (select_ret = 0 | select_ret = -1)+in dex;con ti nue;elsestrstream stream_result;struct in _addr ipaddr;ipaddr.s_addr = ulSca ni
19、p;char *pStrlp = inet_n toa(ipaddr);stream_result << "t主機(jī)地址為:"<< pStrIp << "t找到開放的端口 : " << port <<'0'stri ng str_result(stream_result.str();/將掃描結(jié)果儲(chǔ)存到輸出變量中去WaitForSi ngleObject(g_ResultMutex,INFINITE);g_map_Sca nResult.i nsert(make_pair(ulSca
20、 nlp,str_result);ReleaseMutex(g_ResultMutex);+i ndex;/掃描完一個(gè)線程shutdow n( li nk_sock, 0);closesocket(li nk_sock);WaitForSi ngleObject(g_ThreadNumMutex,INFINITE);g_run ThreadNum-;ReleaseMutex(g_ThreadNumMutex);/cout << "*還有 _"<< g_ru nThreadNum << "_ 個(gè)掃描線程進(jìn)行中 *"<
21、;< endl;return 0;/將IP轉(zhuǎn)化成能直接遞增和遞減的地址un sig ned long In vertIp( un sig ned long srcIp)un sig ned char first;un sig ned char sec ond;un sig ned char third;un sig ned char fourth;first = srcIp & OxOOFF;seco nd = (srcIp >> 8)& OxOOFF;third = (srcIp >> 16) & OxOOFF;fourth = (src
22、Ip >> 24) & OxOOFF;return (first << 24) | (second << 16) | (third << 8) | fourth; /將IP內(nèi)的IP轉(zhuǎn)化成一個(gè)一個(gè)unsigned long類型存在數(shù)組中int GetIpToScan(conststring &StartIp, const string&EndIp, vector<unsignedlong &vec_ip)/判斷輸入的IP是否合法un sig ned long ulStartIp = in et_addr(Sta
23、rtlp.c_str();un sig ned long ulE ndlp = in et_addr(E ndlp.c_str();if(INADDR_NONE = ulStartIpIIINADDR_NONE = ulE ndlp)cout << "請(qǐng)輸入合法的IP" << endl;return -1;/判斷查詢的是一個(gè)IP 還是 IP 段/if (ulStartIp = ulE ndlp && ulStartlp !=0)vec_ip.push_back(ulStartlp);return 0;if (ulStartIp = 0
24、 && ulE ndlp = 0)return 0;if (ulStartIp = 0)vec_ip.push_back(ulE ndlp);return 0;if (ulE ndlp = 0)vec_ip.push_back(ulStartIp);return 0;/ 將IP轉(zhuǎn)換成可以遞增比較的類型ulStartIp = In vertlp(ulStartlp);ulE ndlp = In vertIp(ulE ndlp);/指定前后順序,ulEndlp較大un sig ned long max_ip;if (ulStartIp > ulE ndlp)max_ip =
25、ulStartIp;ulStartIp = ulE ndlp;ulE ndlp = max_ip;int ipnums = ulEndlp - ulStartlp;for(i nt i = 0;i <= ipnu ms;+i)/將每個(gè)IP的unsigned long型存到數(shù)組中供掃描vec_ip.push_back(l nvertlp(ulStartlp+);return 0;/功能:輸入一個(gè)IP段,輸出該IP段內(nèi)的端口開放情況信息int Scanlp(const string &start_lp, const string &endlp, multimap<uns
26、igned long, string>&ouputMap)/ 分解IP段內(nèi)的IP到全局?jǐn)?shù)組中去GetlpToSca n( start_lp,e ndlp,g_vec_lpToSca n);int sca nNum = g_vec_IpToSca n.size();/線程總數(shù)g_run ThreadNum = sca nNum;cout<<e ndl;cout<<e ndl;cout<<"*5cout << "共有 ”<< scanNum <<"個(gè) IP 要掃描"<
27、< en dl;/ 對(duì)每個(gè)IP開一個(gè)線程for (int i = 0; i < sca nNum; +i)CreateThread(NULL,O,ThreadFu nc,& g_vec_IpToSca n i,0,NULL);/要是不間隔時(shí)間的話,同時(shí)創(chuàng)建socket會(huì)出現(xiàn)10093錯(cuò)誤Sleep(50);return 0;/輸出掃描結(jié)果int OutPutSca nln fo()cout <<"掃描到 "<< g_map_Sca nResult.size() << "條記錄"<< en
28、 dl;multimapv un sig ned long, stri ng>:iterator iter = g_map_Sca nResult.begi n();ofstream out("out.txt");cout <<"顯示總"<< g_map_ScanResult.size() << "條記錄:"<< en dl;cout<<e ndl;for (; iter!=g_map_Sca nResult.e nd(); +iter)out << ite
29、r->sec ond << en dl;cout << iter->sec ond << en dl;return 0;/ void UserI nput() cout<<" "<<e ndl;*端口掃描器*cout<<" "<<e ndl;cout<<" "<<e ndl;cout<<" "<<e ndl;cout<<" "<<
30、e ndl;cout<<" "<<e ndl;cout<<" "<<e ndl;cout<<"*"<<e ndl;cout<<"*可掃描一個(gè)或多個(gè)IP,輸入同一網(wǎng)段的兩個(gè)IP。*"<<e ndl;cout<<"*"<<e ndl; cout<<"*"<<e ndl; cout<<"*"<<e
31、 ndl;格式為 54.只掃描一個(gè)IP時(shí),輸入兩個(gè)相同IP.掃描多個(gè)IP時(shí),輸入兩個(gè)不相同IP.cout<<"*"<< endl;cout<<e ndl;cout<<e ndl;cout<<"*5cout<<"現(xiàn)在請(qǐng)輸入需要掃描的IPcout<<"cin >> g_startlp;cout<<"cin >> g_en dIp;起始IP為:"結(jié)束IP為:"
32、cout<<"*"<< endl;/初始化相關(guān)信息void Ini tProc()/ 初始化socket相關(guān)信息int ws_result;ws_result = WSAStartup(MAKEWORD(2,2), &g_wsadata);if (ws_result != 0)cout << "socket WSAStartup初始化失敗"<< endl;/設(shè)置阻塞函數(shù)的超時(shí)時(shí)間g_timeout.tv_sec = TIMEOUT;g_PortMutex = CreateMutex(NULL, FA
33、LSE, "port mutex"); g_ThreadNumMutex= CreateMutex(NULL, FALSE, "thread nums mutex");g_ResultMutex = CreateMutex(NULL, FALSE, "result mutex");/ /清理void Clea nProc()/線程都執(zhí)行完后清理socket相關(guān)信息/while (1)WaitForSi ngleObject(g_ThreadNumMutex,INFINITE);if (g_r un ThreadNum = 0)brea
34、k;ReleaseMutex(g_ThreadNumMutex);Sleep(100);/ 清理socket相關(guān)信息WSAClea nup();int mai n() / 主函數(shù)clock_t start_time;clock_t en d_time;double cost_time = 0;start_time = clock();In itProc();初始化UserI nput();/ 輸入Scanl p(g_startIp,g_e ndlp,g_map_Sca nResult);/開始掃描Clea nProc(); 清理結(jié)束后進(jìn)程OutPutSca nln fo();/ 輸出結(jié)果/計(jì)算程序運(yùn)行時(shí)間en d_time = clock();cost_time = (double) (en d_time - start_time) / CLOCKS_PER_SEC;cout<<e ndl;cout <<"時(shí)間為:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 乳品安全監(jiān)管體系構(gòu)建考核試卷
- 教育文具在遠(yuǎn)程教育中的應(yīng)用考核試卷
- 樂器批發(fā)商的品牌市場渠道開發(fā)考核試卷
- 家用換氣扇產(chǎn)業(yè)鏈協(xié)同創(chuàng)新發(fā)展模式與實(shí)踐考核試卷
- 城市軌道交通的非折返運(yùn)行與列車調(diào)度考核試卷
- 辦公自動(dòng)化軟件綜合應(yīng)用考核試卷
- 絲印染在體育用品上的獨(dú)特應(yīng)用考核試卷
- 智能設(shè)備多模態(tài)交互設(shè)計(jì)考核試卷
- 工傷案例培訓(xùn)課件
- 快手代運(yùn)營合同范本
- 國際貿(mào)易地理 全套課件
- DB32-T 3129-2016適合機(jī)械化作業(yè)的單體鋼架塑料大棚 技術(shù)規(guī)范-(高清現(xiàn)行)
- 腸瘺治療PPT醫(yī)學(xué)課件(PPT 25頁)
- 員工轉(zhuǎn)正評(píng)價(jià)表
- 道路交通事故責(zé)任認(rèn)定行政復(fù)議申請(qǐng)書范例
- 鄭州大學(xué)圖書館平立剖面效果圖
- 高效液相含量測定計(jì)算公式
- 公安機(jī)關(guān)通用告知書模板
- 《小學(xué)數(shù)學(xué)課程與教學(xué)》教學(xué)大綱
- 《手機(jī)攝影》全套課件(完整版)
- 礦井無計(jì)劃停電停風(fēng)安全技術(shù)措施
評(píng)論
0/150
提交評(píng)論