端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告(共25頁(yè))_第1頁(yè)
端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告(共25頁(yè))_第2頁(yè)
端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告(共25頁(yè))_第3頁(yè)
端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告(共25頁(yè))_第4頁(yè)
端口掃描與設(shè)計(jì)實(shí)驗(yàn)報(bào)告(共25頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上北京理工大學(xué)珠海學(xué)院課程設(shè)計(jì)說(shuō)明書20132014學(xué)年第1學(xué)期題目: 端口掃描器的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 院: 計(jì)算機(jī) 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)4班 學(xué) 號(hào): 5/019 學(xué)生姓名: 官?gòu)V昌 黃晨豪 指導(dǎo)教師: 劉玉仙 成 績(jī): 時(shí) 間: 2013年12月28 專心-專注-專業(yè)北京理工大學(xué)珠海學(xué)院課程設(shè)計(jì)任務(wù)書 2013 2014 學(xué)年第 1 學(xué)期學(xué)生姓名: 官?gòu)V昌 黃晨豪 專業(yè)班級(jí): 11計(jì)算機(jī)科學(xué)與技術(shù)4班 指導(dǎo)教師: 劉玉仙 工作部門: 計(jì)算機(jī)學(xué)院 一、課程設(shè)計(jì)題目端口掃描器的設(shè)計(jì)與實(shí)現(xiàn)二、課程設(shè)計(jì)內(nèi)容對(duì)ip端口進(jìn)行掃描,分析結(jié)果。三、進(jìn)度安排(1)1-4學(xué)時(shí),選定

2、題目、分析需求、理解需求;(2)5-8學(xué)時(shí),制定設(shè)計(jì)方案;(3)9-16學(xué)時(shí),編寫程序、調(diào)試、測(cè)試;(4)17-20學(xué)時(shí),編寫設(shè)計(jì)報(bào)告;(5)21-24學(xué)時(shí),答辯。四、基本要求1 網(wǎng)絡(luò)安全設(shè)計(jì)方案具有實(shí)用價(jià)值;2 根據(jù)指導(dǎo)教師給出的題目進(jìn)行分配,每個(gè)題目最多不超過(guò)2個(gè)人完成。3 題目可以相同,但參數(shù)要求不同,每人必須獨(dú)立完成。4、 寫出課程設(shè)計(jì)報(bào)告,應(yīng)不少于3000字(不含附錄),同一組學(xué)生只需提交1份, 但必須在報(bào)告中列明分工。 課程負(fù)責(zé)人簽名: 年 月 日課程設(shè)計(jì)成績(jī)?cè)u(píng)定表姓 名成績(jī)?cè)u(píng)定權(quán)重總分總成績(jī)(五分制)平時(shí)成績(jī)20報(bào)告成績(jī)50答辯成績(jī)30官?gòu)V昌黃晨豪分工:官?gòu)V昌黃晨豪1、 上網(wǎng)搜索

3、資料2、程序編寫3、寫實(shí)驗(yàn)報(bào)告1、總體架構(gòu)設(shè)計(jì)2、程序修改3、制作ppt 端口掃描器的設(shè)計(jì)與實(shí)現(xiàn)摘 要計(jì)算機(jī)信息網(wǎng)絡(luò)的發(fā)展加速了信息化時(shí)代的進(jìn)程,但是隨著社會(huì)網(wǎng)絡(luò)化程度的增加,對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的依賴也越來(lái)越大,網(wǎng)絡(luò)安全問(wèn)題也日益明顯。端口掃描技術(shù)是發(fā)現(xiàn)安全問(wèn)題的重要手段之一。本程序是在Windows系統(tǒng)中使用C語(yǔ)言完成的一個(gè)端口掃描程序。此程序主要完成了ip端口的掃描功能。掃描能對(duì)單個(gè)指定的主機(jī)進(jìn)行掃描或?qū)χ付ňW(wǎng)段內(nèi)的主機(jī)進(jìn)行逐個(gè)掃描。掃描結(jié)果以列表的形式直觀地展現(xiàn)出來(lái)。通過(guò)對(duì)掃描結(jié)果的分析知道了,有哪些端口是開(kāi)放的。關(guān)鍵詞:端口掃描 ip端口 網(wǎng)絡(luò)安全 ip掃描目錄第一章 課程設(shè)計(jì)的目的1.1、

4、課題的背景及意義網(wǎng)絡(luò)中每臺(tái)計(jì)算機(jī)猶如一座城堡,這些城堡中,有些是對(duì)外完全開(kāi)放的,有些卻是大門緊閉的。入侵者們是如何找到,并打開(kāi)它們的城門呢?這些城門究竟通向何處?在網(wǎng)絡(luò)中,把這些城堡的“城門”稱之為計(jì)算機(jī)的“端口”。端口掃描是入侵者搜索信息的幾種常用方法之一,也正是這一種方法最容易暴露入侵者的身份和意圖。一般說(shuō)來(lái),掃描端口有以下目的:判斷目標(biāo)主機(jī)上開(kāi)放了哪些服務(wù)判斷目標(biāo)主機(jī)的操作系統(tǒng)如果入侵者掌握了目標(biāo)主機(jī)開(kāi)放了哪些服務(wù),運(yùn)行何種操作系統(tǒng),他們就能使用相應(yīng)的手段實(shí)現(xiàn)入侵。而如果管理員先掌握了這些端口服務(wù)的安全漏洞,就能采取有效的安全措施,防范相應(yīng)的入侵。1.2、端口掃描現(xiàn)狀計(jì)算機(jī)信息網(wǎng)絡(luò)的發(fā)展

5、加速了信息化時(shí)代的進(jìn)程,但是隨著社會(huì)網(wǎng)絡(luò)化程度的增加,對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的依賴也越來(lái)越大,網(wǎng)絡(luò)安全問(wèn)題也日益明顯。端口掃描技術(shù)是發(fā)現(xiàn)安全問(wèn)題的重要手段之一。一個(gè)端口就是一個(gè)潛在的通信通道,也就是一個(gè)入侵通道。對(duì)目標(biāo)計(jì)算機(jī)進(jìn)行端口掃描,能得到許多有用的信息。掃描器通過(guò)選用遠(yuǎn)程TCP/IP不同的端口的服務(wù),并記錄目標(biāo)給予的回答,通過(guò)這種方法,可以搜集到很多關(guān)于目標(biāo)主機(jī)的各種有用的信息,從而發(fā)現(xiàn)目標(biāo)機(jī)的某些內(nèi)在的弱點(diǎn)。 第二章 功能模塊與系統(tǒng)結(jié)構(gòu)作為端口掃描程序,首先需要完成的功能就是對(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)程I

6、P的系統(tǒng)服務(wù)端口進(jìn)行掃描。有些時(shí)候,用戶并不需要去掃描整個(gè)系統(tǒng)的所有端口,因?yàn)檫@樣的話不僅會(huì)浪費(fèi)大量的時(shí)間,而且可能導(dǎo)致難以找到自己需要了解的端口的掃描結(jié)果。所以,對(duì)于選擇性地對(duì)端口進(jìn)行掃描也非常重要。所以我們只對(duì)21端口進(jìn)行掃描。用戶在等待掃描的時(shí)候,往往希望知道它的工作進(jìn)度。這樣用戶可以更好地控制自己的操作。站在用戶的角度思考,設(shè)置進(jìn)度是程序需要完成的,這樣就能知道程序掃描的進(jìn)度。系統(tǒng)必須提供的服務(wù)是功能需求的基本,本著站在用戶角度思考的原則,做出如上敘述需求,從簡(jiǎn)列舉如下:掃描功能;Ip判斷功能;計(jì)算時(shí)間功能;顯示功能; 第三章 相關(guān)知識(shí)3.1、端口的基本概念: 我們這里所說(shuō)的端口,不是

7、計(jì)算機(jī)硬件的i/o端口,而是軟件形式上的概念。服務(wù)器可以向外提供多種服務(wù),比如,一臺(tái)服務(wù)器可以同時(shí)是web服務(wù)器,也可以是ftp服務(wù)器,同時(shí),它也可以是郵件服務(wù)器。為什么一臺(tái)服務(wù)器可以同時(shí)提供那么多的服務(wù)呢?其中一個(gè)很主要的方面,就是各種服務(wù)采用不同的端口分別提供不同的服務(wù)。 根據(jù)提供服務(wù)類型的不同,端口分為兩種,一種是tcp端口,一種是udp端口。計(jì)算機(jī)之間相互通信的時(shí)候,分為兩種方式:一種是發(fā)送信息以后,可以確認(rèn)信息是否到達(dá),也就是有應(yīng)答的方式,這種方式大多采用tcp協(xié)議;一種是發(fā)送以后就不管了,不去確認(rèn)信息是否到達(dá),這種方式大多采用udp協(xié)議。對(duì)應(yīng)這兩種協(xié)議的服務(wù)提供的端口,也就分為tc

8、p端口和udp端口。那么,如果攻擊者使用軟件掃描目標(biāo)計(jì)算機(jī),得到目標(biāo)計(jì)算機(jī)打開(kāi)的端口,也就了解了目標(biāo)計(jì)算機(jī)提供了那些服務(wù)。3.2、常見(jiàn)端口介紹 端口:21 服務(wù):FTP 說(shuō)明:FTP服務(wù)器所開(kāi)放的端口,用于上傳、下載。最常見(jiàn)的攻擊者用于尋找打開(kāi)anonymous的FTP服務(wù)器的方法。這些服務(wù)器帶有可讀寫的目錄。木馬Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所開(kāi)放的端口。 端口:23 服務(wù):Telnet 說(shuō)明:遠(yuǎn)程登錄,入侵者在搜索遠(yuǎn)程登錄UNIX的服務(wù)。大多數(shù)情況下掃描這一端口是為了找到機(jī)器運(yùn)行的操作系統(tǒng)。還有使用其他技

9、術(shù),入侵者也會(huì)找到密碼。木馬Tiny Telnet Server就開(kāi)放這個(gè)端口。 端口:25 服務(wù):SMTP 說(shuō)明:SMTP服務(wù)器所開(kāi)放的端口,用于發(fā)送郵件。入侵者尋找SMTP服務(wù)器是為了傳遞他們的SPAM。入侵者的帳戶被關(guān)閉,他們需要連接到高帶寬的E-MAIL服務(wù)器上,將簡(jiǎn)單的信息傳遞到不同的地址。木馬Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都開(kāi)放這個(gè)端口。 端口:80 服務(wù):HTTP 說(shuō)明:用于網(wǎng)頁(yè)瀏覽。木馬Executor開(kāi)放此端口。3.3、常用端口掃描技術(shù):1、 TCP conne

10、ct()掃描: 這是最基本的TCP掃描,操作系統(tǒng)提供的connect()系統(tǒng)調(diào)用可以用來(lái)與每一個(gè)感興趣的目標(biāo)計(jì)算機(jī)的端口進(jìn)行連接。如果端口處于偵聽(tīng)狀態(tài),那么connect()就能成功。否則,這個(gè)端口是不能用的,即沒(méi)有提供服務(wù)。這個(gè)技術(shù)的一個(gè)最大的優(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)長(zhǎng)的時(shí)間,使用者可以通過(guò)同時(shí)打開(kāi)多個(gè)套接字來(lái)加速掃描。使用非阻塞I/O允許你設(shè)置一個(gè)低的時(shí)間用盡周期,同時(shí)觀察多個(gè)套接字。但這種方法的缺點(diǎn)是很容易被察覺(jué),并且被防火墻將掃描信息包過(guò)濾掉。目

11、標(biāo)計(jì)算機(jī)的logs文件會(huì)顯示一連串的連接和連接出錯(cuò)消息,并且能很快使它關(guān)閉。2、TCP SYN掃描: 這種技術(shù)通常認(rèn)為是“半開(kāi)放”掃描,這是因?yàn)閽呙璩绦虿槐匾蜷_(kāi)一個(gè)完全的TCP連接。掃描程序發(fā)送的是一個(gè)SYN數(shù)據(jù)包,好象準(zhǔn)備打開(kāi)一個(gè)實(shí)際的連接并等待反應(yīng)一樣(參考TCP的三次握手建立一個(gè)TCP連接的過(guò)程)。一個(gè)SYN|ACK的返回信息表示端口處于偵聽(tīng)狀態(tài):返回RST表示端口沒(méi)有處于偵聽(tīng)?wèi)B(tài)。如果收到一個(gè)SYN|ACK,則掃描程序必須再發(fā)送一個(gè)RST信號(hào),來(lái)關(guān)閉這個(gè)連接過(guò)程。這種掃描技術(shù)的優(yōu)點(diǎn)在于一般不會(huì)在目標(biāo)計(jì)算機(jī)上留下記錄,但這種方法的缺點(diǎn)是必須要有root權(quán)限才能建立自己的SYN數(shù)據(jù)包。3、

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

13、數(shù)據(jù)包分成兩個(gè)較小的IP段。這樣就將一個(gè)TCP頭分成好幾個(gè)數(shù)據(jù)包,從而過(guò)濾器就很難探測(cè)到。但必須小心:一些程序在處理這些小數(shù)據(jù)包時(shí)會(huì)有些麻煩。5、 TCP 反向 ident掃描: ident 協(xié)議允許(rfc1413)看到通過(guò)TCP連接的任何進(jìn)程的擁有者的用戶名,即使這個(gè)連接不是由這個(gè)進(jìn)程開(kāi)始的。例如掃描者可以連接到http端口,然后用identd來(lái)發(fā)現(xiàn)服務(wù)器是否正在以root權(quán)限運(yùn)行。這種方法只能在和目標(biāo)端口建立了一個(gè)完整的TCP連接后才能看到。 6、FTP 返回攻擊: FTP協(xié)議的一個(gè)有趣的特點(diǎn)是它支持代理(proxy)FTP連接,即入侵者可以從自己的計(jì)算機(jī)和目標(biāo)主機(jī)的FTP server

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

15、描端口顯示。 4.清理結(jié)束后進(jìn)程,輸出結(jié)果。 5.計(jì)算所用時(shí)間。 程序中主要的函數(shù): int main()/主函數(shù) InitProc();/初始化 UserInput();/輸入 ScanIp(g_startIp,g_endIp,g_map_ScanResult);/開(kāi)始掃描 CleanProc();/清理結(jié)束后進(jìn)程 OutPutScanInfo();/輸出結(jié)果 DWORD WINAPI ThreadFunc(LPVOID th_para)/掃描線程每一個(gè)ip unsigned long InvertIp(unsigned long srcIp) /將ip化為可比較的 int GetIpToS

16、can(const string &StartIp, const string &EndIp, vector<unsigned long> &vec_ip)/將所有ip排序放在一個(gè)數(shù)組內(nèi)4.2、流程圖: ThreadFunc函數(shù): 主流程圖:結(jié)束計(jì)算時(shí)間ScanIp掃描輸入ip斷 初始化 開(kāi)始第五章 結(jié)果 開(kāi)始界面: 掃描界面:結(jié)果界面:Ip錯(cuò)誤時(shí)的界面:第六章 源程序源程序:#pragma comment(lib,"ws2_32.lib")#pragma warning (disable:4786)#include <iostre

17、am>#include <strstream>#include <winsock2.h>#include <string>#include <vector>#include <map>#include <fstream>#include <time.h>/#include "IpScan.h"using namespace std;/全局變量:/待掃描的端口short g_portsTOscan= 20,21,22,23,25,42,43,47,53,63,67,68,79,80,95

18、,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,8080 ;const short PORTSNUM = sizeof(g_portsTOscan) / sizeof(short);/端口個(gè)數(shù)/等掃描的IPvector<unsigned long> g_vec_IpToScan;string g_startIp;string g_endIp;/開(kāi)啟的線程數(shù),目前為1個(gè)IP1個(gè)線程long

19、g_runThreadNum;/socket相關(guān)TIMEVAL g_timeout; /阻塞等待時(shí)間/FD_SET g_mask; /socket模式設(shè)置,儲(chǔ)存socket信息const short TIMEOUT = 1; /阻塞等待時(shí)間WSADATA g_wsadata; /socket版本信息/線程中的互斥體HANDLE g_PortMutex; HANDLE g_ThreadNumMutex; HANDLE g_ResultMutex; /輸入結(jié)果的互斥量/保存IP掃描的結(jié)果multimap<unsigned long, string> g_map_ScanResult;/

20、-/線程函數(shù),掃描每一個(gè)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

21、) port = 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失敗:錯(cuò)誤號(hào)為: " << GetLastError() << endl; WaitForSingleObject(g_ThreadNumMutex,INFINITE); g_runThreadNum-; ReleaseMutex(g_ThreadNumM

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

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

24、(select_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 主機(jī)地址為:" << pStrIp << "t找到開(kāi)放的端口: " << port <<'0' string s

25、tr_result(stream_result.str(); /將掃描結(jié)果儲(chǔ)存到輸出變量中去 WaitForSingleObject(g_ResultMutex,INFINITE); g_map_ScanResult.insert(make_pair(ulScanIp,str_result); ReleaseMutex(g_ResultMutex); +index; /掃描完一個(gè)線程 shutdown(link_sock, 0); closesocket(link_sock); WaitForSingleObject(g_ThreadNumMutex,INFINITE); g_runThrea

26、dNum-; ReleaseMutex(g_ThreadNumMutex); /cout << "*還有_"<< g_runThreadNum << "_個(gè)掃描線程進(jìn)行中*"<< endl; return 0;/-/將IP轉(zhuǎn)化成能直接遞增和遞減的地址unsigned long InvertIp(unsigned long srcIp) unsigned char first; unsigned char second; unsigned char third; unsigned char fourth; f

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

28、g &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 << " 請(qǐng)輸入合法的IP" << endl

29、; return -1; /判斷查詢的是一個(gè)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轉(zhuǎn)換成可以遞增比較的

30、類型 ulStartIp = InvertIp(ulStartIp); ulEndIp = InvertIp(ulEndIp); /指定前后順序,ulEndIp較大 unsigned long max_ip; if (ulStartIp > ulEndIp) max_ip = ulStartIp; ulStartIp = ulEndIp; ulEndIp = max_ip; int ipnums = ulEndIp - ulStartIp; for(int i = 0;i <= ipnums;+i) /將每個(gè)IP的unsigned long型存到數(shù)組中供掃描 vec_ip.push

31、_back(InvertIp(ulStartIp+); return 0;/-/功能: 輸入一個(gè)IP段,輸出該IP段內(nèi)的端口開(kāi)放情況信息int ScanIp(const string &start_Ip, const string &endIp, multimap<unsigned long, string> &ouputMap) /分解IP段內(nèi)的IP到全局?jǐn)?shù)組中去 GetIpToScan(start_Ip,endIp,g_vec_IpToScan); int scanNum = g_vec_IpToScan.size(); /線程總數(shù) g_runThrea

32、dNum = scanNum;cout<<endl;cout<<endl; cout<<"*" cout << " 共有 " << scanNum <<" 個(gè)IP要掃描 " << endl; /對(duì)每個(gè)IP開(kāi)一個(gè)線程 for (int i = 0; i < scanNum; +i) CreateThread(NULL,0,ThreadFunc,&g_vec_IpToScani,0,NULL); /要是不間隔時(shí)間的話,同時(shí)創(chuàng)建socket會(huì)出

33、現(xiàn)10093錯(cuò)誤 Sleep(50); return 0;/-/輸出掃描結(jié)果int OutPutScanInfo() cout <<" 掃描到 " << g_map_ScanResult.size() << " 條記錄 " << endl; multimap<unsigned long, string>:iterator iter = g_map_ScanResult.begin(); ofstream out("out.txt"); cout <<"

34、顯示總 " << g_map_ScanResult.size() << " 條記錄: " << endl;cout<<endl; for (; iter!=g_map_ScanResult.end(); +iter) out << iter->second << endl; cout << iter->second << endl; return 0;/-void UserInput() cout<<" "<<en

35、dl; cout<<" * "<<endl; cout<<" * * "<<endl; cout<<" * 端口掃描器 * "<<endl; cout<<" * * "<<endl; cout<<" * "<<endl; cout<<" "<<endl; cout<<"*"<<endl; c

36、out<<"* 可掃描一個(gè)或多個(gè)IP,輸入同一網(wǎng)段的兩個(gè)IP。 *"<<endl;cout<<"* 格式為 54. *"<<endl; cout<<"* 只掃描一個(gè)IP時(shí),輸入兩個(gè)相同IP. *"<<endl; cout<<"* 掃描多個(gè)IP時(shí),輸入兩個(gè)不相同IP. *"<<endl; cout<<"*"<< endl; cout&l

37、t;<endl;cout<<endl; cout<<"*" cout<<" 現(xiàn)在請(qǐng)輸入需要掃描的IP "cout<<" 起始IP為:" cin >> g_startIp; cout<<" 結(jié)束IP為:" cin >> g_endIp; cout<<"*"<< endl; /-/初始化相關(guān)信息void InitProc() /初始化socket相關(guān)信息 int ws_result; w

38、s_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, FALSE, "port mutex"); g_ThreadNumMutex= CreateMutex(NULL, FALSE, "threadnums mutex"); g_ResultMutex = CreateMutex(NULL, FALSE, "result mutex");/-/清理void CleanProc() /線程都執(zhí)行完后清理socket相關(guān)信息/ while (1) WaitForSingl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論