某網(wǎng)站端口信息工作的設(shè)計(jì)_第1頁(yè)
某網(wǎng)站端口信息工作的設(shè)計(jì)_第2頁(yè)
某網(wǎng)站端口信息工作的設(shè)計(jì)_第3頁(yè)
某網(wǎng)站端口信息工作的設(shè)計(jì)_第4頁(yè)
某網(wǎng)站端口信息工作的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩36頁(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、某網(wǎng)站端口信息工作的設(shè)計(jì)某網(wǎng)站端口信息工作的設(shè)計(jì) 摘摘要要 端口掃描技術(shù)是一種融合了信息安全、信息科學(xué)、和計(jì)算機(jī)技術(shù)為一體的綜 合性技術(shù)。本系統(tǒng)建立在 WINDOWS 操作系統(tǒng)上,有 Ping 和 scan 兩個(gè)模塊???以探測(cè)目標(biāo)主機(jī)是否開(kāi)機(jī)和對(duì)目標(biāo)主機(jī)的端口信息進(jìn)行探測(cè),并獲取端口是否開(kāi) 放等信息。全文對(duì) TCP 建立連接的原理,WINSOCK 原理,端口掃描技術(shù)的基本原 理和掃描方式都進(jìn)行了比較詳細(xì)的介紹。在具體的實(shí)現(xiàn)過(guò)程中,結(jié)合面向?qū)ο蟮?程序設(shè)計(jì)思想,采用典型的 TCP connect()掃描技術(shù)。通過(guò)本程序的實(shí)現(xiàn),用戶可 以對(duì)一臺(tái)目標(biāo)主機(jī)進(jìn)行端口掃描,獲取端口信息。 關(guān)鍵詞關(guān)鍵詞:

2、 端口;探測(cè);掃描 Design and Implementation of a Port Information Probe Tool Abstract Scanning technique of port is a Synthetic technique which involves information security, information science, and computer technology .This system is build on the WINDOWS operate system. It has the Ping and scan modules .I

3、t can probe into whether a target host is opening and Probe into the port information of the target host, and obtain the information with whether a port is opening. The full text explain in detail with principle of the TCP connection, principle of the WINSOCK, the basic principle of the port scan an

4、d the scan method .When implementing, it combine the thought of the face to object, use the typical method which is the TCP connect .Through the realization of this procedure, the user can scan the port with a target host, and obtain information. Key word: Port;Probe;Scan 目目 錄錄 論文總頁(yè)數(shù):28 頁(yè) 1 引言 .1 1.

5、1 端口信息探測(cè)的背景 .1 1.2 端口信息探測(cè)工具的設(shè)計(jì)要求 .1 1.2.1 研究?jī)?nèi)容 .1 1.2.2 開(kāi)發(fā)工具 .1 1.2.3 軟件功能設(shè)計(jì) .1 1.3 端口信息探測(cè)工具的設(shè)計(jì)原則 .1 2 理論基礎(chǔ) .2 2.1 TCP 傳輸控制協(xié)議 .2 2.1.1TCP 概述 .2 2.1.2 TCP 首部 .2 2.1.3 TCP 連接的建立 .3 2.1.4 TCP 連接的終止 .4 2.2 端口掃描技術(shù).5 2.2.1 概述 .5 2.2.2 端口掃描原理 .5 2.2.3 端口掃描常用方式介紹 .5 2.3 WINSOCK 套接字 .7 2.3.1 WINSOCK.7 2.3.2

6、WINSOCK 原理 .7 2.3.3 套接字類型 .8 2.3.4 使用套接字流程 .8 3 總體設(shè)計(jì) .9 3.1 模塊劃分 .9 3.1.1 功能模塊圖 .9 3.1.2 主要功能模塊介紹 .9 3.2 設(shè)計(jì)實(shí)現(xiàn)流程圖 .10 4 端口信息探測(cè)工具的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn).10 4.1 軟件界面.10 4.2 PING 按鈕實(shí)現(xiàn) .11 4.2.1 ping 按鈕實(shí)現(xiàn)流程圖 .11 4.2.2 ping 按鈕總體實(shí)現(xiàn)過(guò)程 .12 4.3 SCAN按鈕實(shí)現(xiàn) .13 4.3.1 scan 按鈕實(shí)現(xiàn)流程圖 .13 4.3.2 scan 按鈕總體實(shí)現(xiàn)過(guò)程 .14 5 軟件測(cè)試 .16 5.1 測(cè)試的目的

7、和定義 .16 5.1.1 測(cè)試的目的 .16 5.1.2 測(cè)試的定義 .17 5.2 端口信息探測(cè)工具測(cè)試計(jì)劃 .17 5.2.1 測(cè)試環(huán)境 .17 5.2.2 測(cè)試項(xiàng)目及說(shuō)明 .17 5.3 端口信息探測(cè)工具測(cè)試計(jì)劃執(zhí)行情況 .17 5.3.1 ping 模塊測(cè)試結(jié)果 .17 5.3.2 scan 模塊測(cè)試結(jié)果 .19 5.4 端口信息探測(cè)工具需求測(cè)試結(jié)論 .20 5.5 評(píng)價(jià) .20 結(jié) 論.20 參考文獻(xiàn).20 附 錄.21 1 1 引言引言 1.11.1 端口信息探測(cè)的背景端口信息探測(cè)的背景 信息技術(shù)的廣泛應(yīng)用,深刻的改變了人們的生活方式,推動(dòng)著文明的的進(jìn)步。 隨著信息化的普及和發(fā)展

8、,互聯(lián)網(wǎng)覆蓋了社會(huì)政治,經(jīng)濟(jì),文化,生產(chǎn)的各個(gè)領(lǐng) 域,網(wǎng)絡(luò)攻擊充斥著大大小小的網(wǎng)絡(luò)中。無(wú)論黑客和紅客,應(yīng)用各種網(wǎng)絡(luò)攻擊方 式,對(duì)目標(biāo)方進(jìn)行,刺探,偵聽(tīng),欺騙和侵入,已達(dá)到己方的目的。而在網(wǎng)絡(luò)攻 擊之前,如何有效查知被攻擊方的有用信息是必要的不可缺少的,所以端口掃描 技術(shù)孕育而生。 1.21.2 端口信息探測(cè)工具的設(shè)計(jì)要求端口信息探測(cè)工具的設(shè)計(jì)要求 1.2.11.2.1 研究?jī)?nèi)容研究?jī)?nèi)容 (1)TCP/IP 協(xié)議,TCP 連接的建立與終止的過(guò)程。 (2)WINDOWS 網(wǎng)絡(luò)編程,winsocket 的使用。 (3)端口掃描原理,各種端口掃描方式。 (4)研究對(duì)一個(gè)端口信息探測(cè)工具的需求分析,模塊

9、劃分,功能實(shí)現(xiàn)、開(kāi)發(fā) 步驟等,并能夠?qū)υO(shè)計(jì)的過(guò)程進(jìn)行總結(jié)、說(shuō)明。 1.2.21.2.2 開(kāi)發(fā)工具開(kāi)發(fā)工具 本軟件采用 Microsoft Visual C+ 6.0 進(jìn)行開(kāi)發(fā),完成一個(gè)能夠獲得端口 信息的探測(cè)工具。 1.2.31.2.3 軟件功能設(shè)計(jì)軟件功能設(shè)計(jì) (1)ping: 輸入目標(biāo)主機(jī) ip,能夠測(cè)試 ping 目標(biāo)主機(jī)是否成功,判斷目標(biāo)主機(jī)是否開(kāi) 機(jī)。 (2)scan: 輸入起止端口號(hào),當(dāng) ping 測(cè)試成功后進(jìn)行掃描,得到目標(biāo)主機(jī)的端口信息。 可以知道那些端口是開(kāi)放的,哪些沒(méi)有開(kāi)放。 (3) 將結(jié)果信息輸出到列表。 1.31.3 端口信息探測(cè)工具的設(shè)計(jì)原則端口信息探測(cè)工具的設(shè)計(jì)原則

10、 (1)應(yīng)用性: 設(shè)計(jì)本軟件,應(yīng)首先考慮能滿足使用者的功能要求和實(shí)際應(yīng)用的需要。 (2)易操作性: 軟件以一個(gè)簡(jiǎn)潔的界面,簡(jiǎn)單的幾個(gè)按鈕就能夠?qū)崿F(xiàn)測(cè)定目標(biāo)主機(jī)和端口的 掃描,以及信息列表等。方便與用戶的操作。 (3)可靠性和穩(wěn)定性: 在系統(tǒng)設(shè)備、網(wǎng)絡(luò)設(shè)計(jì)、軟件設(shè)計(jì)等各個(gè)方面要充分考慮可靠性和穩(wěn)定性。 在設(shè)備方面,要保證軟件、硬件的可靠性。必須考慮采用成熟的技術(shù)和產(chǎn)品。在 設(shè)備和程序設(shè)計(jì)的各個(gè)方面都盡量減少故障的發(fā)生。 (4)整體性: 系統(tǒng)的整體性,涉及到方方面面,對(duì)于端口掃描這樣的軟件必須對(duì)這些因素 統(tǒng)籌考慮,以構(gòu)成一個(gè)有機(jī)的整體。 2 2 理論基礎(chǔ)理論基礎(chǔ) 2.1TCP2.1TCP:傳輸控制

11、協(xié)議:傳輸控制協(xié)議 2.1.1TCP2.1.1TCP 概述概述 2.1.22.1.2 TCPTCP 首首部部 TCP 向應(yīng)用層提供一種面向連接的,可靠的字節(jié)流服務(wù)。每個(gè) TCP 段都包含 源端和目的端的端口號(hào),用來(lái)尋找發(fā)端和收端的應(yīng)用進(jìn)程。這兩個(gè)值加上 IP 首 部中的源 IP 地址和目的端的 IP 地址唯一確定一個(gè) TCP 連接。 數(shù)據(jù)被封裝在一個(gè) IP 數(shù)據(jù)報(bào)中,TCP 首部的數(shù)據(jù)格式如圖 1, 16 位源端口號(hào) 32 位序號(hào) 32 位確認(rèn)序號(hào) FIN SYN RST PSH ACK URG 保留 6位 4 位首 部長(zhǎng)度 16 位窗口大小 16 位緊急指針16 位檢驗(yàn)和 選項(xiàng) 數(shù)據(jù) 16

12、位目的端口號(hào) 圖 1 TCP 首部 2.1.32.1.3 TCPTCP 連接的建立連接的建立 TCP 是面向連接的協(xié)議。運(yùn)輸連接是用來(lái)傳送 TCP 報(bào)文的。TCP 的運(yùn)輸連接 的建立和釋放是每一次面向連接的通信中必不可少的過(guò)程。因此,TCP 的數(shù)據(jù)傳 輸過(guò)程就有三個(gè)階段,即:連接建立、數(shù)據(jù)傳送和連接釋放。 在這三個(gè)過(guò)程中,TCP 首部的 6 位標(biāo)志字段起到了非常重要的控制作用,下 面就是他們的代表的意義(均是置 1 有效): URG:和緊急指針配合使用,發(fā)送緊急數(shù)據(jù); ACK:確認(rèn)號(hào)是否有效; PSH:指示發(fā)送方和接收方將數(shù)據(jù)不做緩存,立刻發(fā)送或接收; RST:由于不可恢復(fù)的錯(cuò)誤重置連接; S

13、YN:用于連接建立指示; FIN:用于連接釋放指示。 在連接建立階段,首先需要解決的問(wèn)題便是建立連接的延遲重復(fù)問(wèn)題。在 復(fù)雜的網(wǎng)絡(luò)拓?fù)洵h(huán)境下,重復(fù)分組有可能因?yàn)闀r(shí)延而被存儲(chǔ)在子網(wǎng)中,并在很久 以后突然出現(xiàn)。這就使出現(xiàn)重復(fù)連接成為可能。為解決這一點(diǎn),TCP 建立連接就 采用了三次握手的方式。如圖 2: SYN,ACK,SEQ=y,ACK=x+1 ACK,SEQ=x+1,ACK=y+1 確認(rèn) 確認(rèn) 連接請(qǐng)求 主機(jī) A主機(jī) B SYN,SEQ=x 圖 2 連接建立 在三次握手連接建立過(guò)程中,首先,客戶端(圖中主機(jī) A)要向服務(wù)器端 (圖中主機(jī) B)發(fā)送連接請(qǐng)求報(bào)文段,其首部的同步比特 SYN 應(yīng)置為

14、 1,同時(shí)選 擇一個(gè)序號(hào) x,表明在后面?zhèn)魉蛿?shù)據(jù)時(shí)的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)是 x。在圖中一 個(gè)從 A 到 B 的箭頭上標(biāo)有“SYN,SEQ=x”就是這個(gè)意思。服務(wù)器端在收到連接請(qǐng) 求報(bào)文后,如同意,則發(fā)回確認(rèn)。在確認(rèn)報(bào)文段中應(yīng)將 SYN 置為 1,確認(rèn)號(hào)應(yīng)為 x+1,同時(shí)也為自己選擇一個(gè)序號(hào) y。最后,客戶端在收到此報(bào)文后,還要向 B 發(fā) 出確認(rèn),其確認(rèn)號(hào)為 y+1。 2.1.42.1.4 TCPTCP 連接的終止連接的終止 2.22.2 端口掃描技術(shù)端口掃描技術(shù) 2.2.12.2.1 概述概述 端口掃描就是一種檢查目標(biāo)系統(tǒng)開(kāi)放的 TCP 或者 UDP 端口的信息收集技術(shù)。 他的基本方法是向目標(biāo)

15、機(jī)器的各個(gè)端口發(fā)送連接的請(qǐng)求,根據(jù)返回的響應(yīng),判斷 在目標(biāo)機(jī)器上是否開(kāi)放了這個(gè)端口。 而當(dāng)前比較有名的掃描工具有 superscan、nmap 等。 2.2.22.2.2 端口掃描原理端口掃描原理 TCP 由于其 connection oriented 的特性,為端口的掃描提供了基礎(chǔ)。從上 一節(jié)介紹 TCP 時(shí)我們知道,TCP 建立連接時(shí)有三次握手。先是 client 端往 server 某端口發(fā)送請(qǐng)求連接的 sym 包,server 的該端口如果允許連接,會(huì)給 client 端發(fā)一個(gè)回包 ack,client 端收到 server 的 ack 包后再給 server 端發(fā)一 個(gè) ack 包,

16、TCP 連接正式建立。基于連接的建立過(guò)程,可以想到,假如要掃描某 一個(gè) TCP 端口,可以往該端口發(fā)一個(gè) sym 包,如果該端口處于打開(kāi)狀態(tài),我們就 可以收到一個(gè) ack,也就是說(shuō),如果收到 ack,就可以判斷目標(biāo)掃描出于打開(kāi)狀 態(tài),否則,目標(biāo)端口處于關(guān)閉狀態(tài)。這就是 TCP 端口掃描的基本原理。 2.2.32.2.3 端口掃描常用方式介紹端口掃描常用方式介紹 2.32.3 WINSOCKWINSOCK 套接字套接字 2.3.12.3.1 WINSOCKWINSOCK Windows Sockets 是從 Berkeley Sockets 擴(kuò)展而來(lái)的,其在繼承 Berkeley Sockets

17、 的基礎(chǔ)上,又進(jìn)行了新的擴(kuò)充。這些擴(kuò)充主要是提供了一些 異步函數(shù),并增加了符合 WINDOWS 消息驅(qū)動(dòng)特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。 Windows Sockets 由兩部分組成:開(kāi)發(fā)組件和運(yùn)行組件。 開(kāi)發(fā)組件:Windows Sockets 實(shí)現(xiàn)文檔、應(yīng)用程序接口(API)引入庫(kù)和一些 頭文件。 運(yùn)行組件:Windows Sockets 應(yīng)用程序接口的動(dòng)態(tài)鏈接庫(kù)(WINSOCK.DLL)。 2.3.22.3.2 WINSOCKWINSOCK 原理原理 在 TCP/IP 網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式 (Client/Server model)。該模式的建立基于以下兩

18、點(diǎn):1、非對(duì)等作用;2、通 信完全是異步的??蛻魴C(jī)/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)示方式: 首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù):(過(guò)程如下) (1)打開(kāi)一通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶 請(qǐng)求。 (2)等待客戶請(qǐng)求到達(dá)該端口。 (3)接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。 (4)返回第二步,等待另一客戶請(qǐng)求。 (5)關(guān)閉服務(wù)器。 客戶方: (1)打開(kāi)一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。 (2)向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求。 (3)請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。 2.3.32.3.3 套接字類型套接字類型 (1)

19、SOCKET_STREAM:雙向可靠數(shù)據(jù)流,對(duì)應(yīng) TCP (2)SOCKET_DGRAM:雙向不可靠數(shù)據(jù)報(bào),對(duì)應(yīng) UDP (3)SOCKET_RAW:是低于傳輸層的低級(jí)協(xié)議或物理網(wǎng)絡(luò)提供的套接字類型, 可以訪問(wèn)內(nèi)部網(wǎng)絡(luò)接口。例如接收和發(fā)送 ICMP 報(bào)。 2.3.42.3.4 使用套接字流程使用套接字流程 Socket 建立流式套接字返回 套接字號(hào) S Bind 套接字 S 與本地地址相 連 Listen()通知 TCP 服務(wù)器準(zhǔn) 備接收連接 Accept()接收連接準(zhǔn)備客戶 端的連接 建立連接,accept()返回,得 到新套接字如 NS Recv()/send()在套接字 ns 上 讀寫數(shù)

20、據(jù),數(shù)據(jù)交換 Closesocket()關(guān)閉套接字 ns Closesocket()關(guān)閉最初套接 S,連接結(jié)束 Closesocket()關(guān)閉套接字 ns ,結(jié)束 TCP 對(duì)話 send()/Recv()在套接字 ns 上 讀寫數(shù)據(jù),數(shù)據(jù)交換 Connect()將套接字 S 與遠(yuǎn)程 主機(jī)連接 Socket()建立流式套接字號(hào) S 服務(wù)端客戶端 圖 4 面向連接的套接字流程 Socket()建立流式套接字,返 回套接字號(hào) S Bind()套接字 S 與本地地址 相連 Recv()/send(),在套接字 ns 上讀/寫數(shù)據(jù) Closesocket()關(guān)閉套接字 ns Socket()建立流式套接

21、字, 返回套接字號(hào) S Bind()將套接字 S 與遠(yuǎn)程 主機(jī)相連 Send()/recv(),在套接字上 寫/讀數(shù)據(jù) Closesocket()關(guān)閉套接字 S,結(jié)束 TCP 對(duì)話 服務(wù)端客戶端 圖 5 無(wú)連接協(xié)議套接字流程 3 3 總體設(shè)計(jì)總體設(shè)計(jì) 3.1 模塊劃分模塊劃分 3.1.13.1.1 功能模塊圖功能模塊圖 端口信息探測(cè)工具 pingscan 目標(biāo) ip 地址 開(kāi)始端口 號(hào) 結(jié)果顯示清空列表 list 結(jié)束端口 號(hào) 圖 6 功能模塊圖 3.1.23.1.2 主要功能模塊介紹主要功能模塊介紹 本設(shè)計(jì)主要包含 Ping 和 Scan 兩大功能。 (1)Ping 模塊 能夠檢測(cè)目標(biāo)主機(jī)的

22、狀態(tài),看目標(biāo)主機(jī)是否可達(dá)。由用戶輸入一個(gè)目標(biāo)主機(jī) 的 IP 地址,點(diǎn)擊 ping 按鈕后,能夠進(jìn)行測(cè)試,連接成功或不成功都回返回信息 到軟件的列表框。 (2)Scan 完成對(duì)指定 IP 主機(jī)的端口信息的掃描,能夠測(cè)試哪些端口開(kāi)放,哪些端口 關(guān)閉。并把結(jié)果輸出到列表框。在 Ping 測(cè)試完成后,這個(gè)模塊方可使用。 3.23.2 設(shè)計(jì)實(shí)現(xiàn)流程圖設(shè)計(jì)實(shí)現(xiàn)流程圖 開(kāi)始 是 否 輸入目標(biāo) IP 重新輸入 IP PING清空列表 結(jié)果列表 開(kāi)始和結(jié)束端口SCAN 是否通過(guò) 退出 圖 7 設(shè)計(jì)實(shí)現(xiàn)流程圖 4 4 端口信息探測(cè)工具的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)端口信息探測(cè)工具的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 4.14.1 軟件界面軟件界面

23、 本軟件編譯通過(guò),界面如下圖: 圖 8 界面 4.24.2 PINGPING 按鈕實(shí)現(xiàn)按鈕實(shí)現(xiàn) 4.2.1 ping 按鈕實(shí)現(xiàn)流程圖按鈕實(shí)現(xiàn)流程圖 開(kāi)始 圖 9 PING 按鈕實(shí)現(xiàn)流程 4.2.2 ping 按鈕總體實(shí)現(xiàn)過(guò)程按鈕總體實(shí)現(xiàn)過(guò)程 (1)調(diào)用 UPDATEDATE(TRUE)函數(shù),更新成員變量。 (2)然后用 GetAddress()函數(shù)來(lái)獲取輸入的 IP 地址,并且判斷輸入的 IP 地址 是否合法,合法的話,把輸入的 IP 地址轉(zhuǎn)換成標(biāo)準(zhǔn)的 IP 地址格式,并存入字符 串 RouteIP 中。 (3) NewPing(),帶入?yún)?shù)目標(biāo) IP 地址,跳躍數(shù),往返時(shí)間,完成一個(gè)測(cè)試連

24、接。 (4)調(diào)用 GetRTTAndHopCount()函數(shù),是一個(gè) WIN32API 標(biāo)準(zhǔn)函數(shù),能夠在規(guī) 定的時(shí)間內(nèi)檢查網(wǎng)絡(luò)是否暢通。它包含四個(gè)參數(shù),分別為:目標(biāo) IP 地址,到目的 地的跳躍數(shù),最大跳數(shù)和到目的地的往返時(shí)間。如果返回 1,則說(shuō)明網(wǎng)絡(luò)暢通, 這時(shí)輸出某某 IP 地址測(cè)試成功;如果返回 0,就說(shuō)明網(wǎng)絡(luò)不暢通。 是 否 輸入目標(biāo) IP 重新輸入 IP 點(diǎn)擊 PING 按鈕 掃描按鈕有效 是否通過(guò)測(cè)試 結(jié)束 (5) GetDlgItem(IDC_BTN_SCAN)-EnableWindow(TRUE),使得掃描按鈕有 效。如果前面某某 IP 地址測(cè)試不通過(guò),掃描按鈕不起效。 PIN

25、G 按鈕主要源程序如下: this-UpdateData(TRUE); DWORD dwip=0; m_EditScanIP.GetAddress(dwip); if(dwip24) ia = inet_addr(RouteIP); rc = NewPing(ia,(ULONG*) m_destip=RouteIP; if (rc = 1) CString info; info.Format(IP 地址:%d.%d.%d.%d 連接測(cè)試通過(guò)!, (dwip24) m_ListRichEdit.AddString(info); GetDlgItem(IDC_BTN_SCAN)-EnableWin

26、dow(TRUE); else CString info; info.Format(IP 地址:%d.%d.%d.%d 測(cè)試未通過(guò)!, (dwip24) m_ListRichEdit.AddString(info); AfxMessageBox(輸入的 IP 地址不存在); GetDlgItem(IDC_BTN_SCAN)-EnableWindow(FALSE); int NewPing(IPAddr ia, ULONG *hops_count, ULONG *rtt) boolean IsOk; IsOk = GetRTTAndHopCount(ia, hops_count,128, rtt

27、); if (IsOk = TRUE) return 1; return 0; 4.3 scan 按鈕實(shí)現(xiàn)按鈕實(shí)現(xiàn) 4.3.1 scan 按鈕實(shí)現(xiàn)流程圖按鈕實(shí)現(xiàn)流程圖 圖 10 SCAN 按鈕實(shí)現(xiàn)流程 4.3.2 scan 按鈕總體實(shí)現(xiàn)過(guò)程按鈕總體實(shí)現(xiàn)過(guò)程 (1)依舊調(diào)用 UPDATEDATE(TRUE)函數(shù),更新成員變量。 (2)接著判斷輸入的斷口值,輸入端口范圍是 0-65530,不符合或者開(kāi)始端口 大于結(jié)束端口,都回彈出錯(cuò)誤信息。 (3)如果符合標(biāo)準(zhǔn),則開(kāi)始調(diào)用 WIN32API 的標(biāo)準(zhǔn)創(chuàng)建線程函數(shù) 否 是 開(kāi)始和結(jié)束端口 輸入是否正 確 點(diǎn)擊 SCAN 按鈕 重新輸入端口號(hào) 掃描端口

28、輸出結(jié)果 AfxBeginThread(),創(chuàng)建一個(gè)線程。 (4)然后創(chuàng)建一個(gè)定時(shí)器 SetTimeOut()。 (5)調(diào)用 AfxSocketInit(),初始化 WINSOCKET (6)初始化成功以后,調(diào)用 Create 元函數(shù),之后后會(huì)構(gòu)造一個(gè) socket 對(duì)象來(lái)創(chuàng) 建 WINDOWS socket ,然后 Create 會(huì)自動(dòng)調(diào)用 Bind,把 socket 和指定的地址綁 定,然后 socket 就會(huì)提供 SOCK_STREAM 和 SOCK_GDREAM 兩種模式。本設(shè) 計(jì)用的是基于 TCP 的 STREAM 模式。 (7)成功以后調(diào)用 Connect(),將套接字 S 與目標(biāo)

29、主機(jī)建立連接。如果連接成 功,則在 LIST 中輸出某某端口已開(kāi)啟。 (8)調(diào)用 KillTimeOut(),關(guān)閉連接,銷毀記時(shí)器。 (9)delete sock (10)端口地址自加 1。 SCAN 按鈕主要源程序如下: this-UpdateData(TRUE); if(m_EditEndPort65530) m_EditEndPort=65530; else if(m_EditEndPort65530) m_EditStartPort=65530; else if(m_EditStartPortm_EditEndPort) AfxMessageBox(開(kāi)始端口大于結(jié)束端口,請(qǐng)重新輸入掃描

30、端口段!); return ; this-UpdateData(FALSE); scanthread = AfxBeginThread(PortScanThreadProc, this); UINT PortScanThreadProc(LPVOID pParam) CPortScanView *sview=(CPortScanView *)pParam; DWORD beginport=sview-m_EditStartPort; DWORD endport=sview-m_EditEndPort; CString info; CString RouteIP; RouteIP=sview-m

31、_destip; CTimeOutSocket* sock=NULL; AfxSocketInit(); while (1) sock = new CTimeOutSocket(); sock-SetTimeOut(5000); if (!sock-Create() return 1; if (sock-Connect(RouteIP,beginport) info.Format(IP 地址:%s 端口%d 已開(kāi)啟!,RouteIP,beginport); sview-m_ListRichEdit.AddString(info); else info.Format(IP 地址:%s 端口%d

32、未開(kāi)啟!,RouteIP,beginport); sview-m_ListRichEdit.AddString(info); sock-KillTimeOut(); delete sock; sock=NULL; beginport+=1; if(beginportendport) return 0; BOOL CTimeOutSocket:SetTimeOut(UINT uTimeOut) m_nTimerID = SetTimer(NULL, 0, uTimeOut, NULL); return m_nTimerID; BOOL CTimeOutSocket:KillTimeOut() r

33、eturn KillTimer(NULL, m_nTimerID); 5 5 軟件測(cè)試軟件測(cè)試 5.15.1 測(cè)試的目的和定義測(cè)試的目的和定義 5.1.15.1.1 測(cè)試的目的測(cè)試的目的 經(jīng)過(guò)軟件分折與設(shè)計(jì)后。就可以根據(jù)現(xiàn)有的設(shè)計(jì)在具體的環(huán)境中實(shí)現(xiàn),生成 系統(tǒng)的源代碼、可執(zhí)行程序。然后需要對(duì)軟件進(jìn)行測(cè)試和排錯(cuò),保證軟件符合預(yù) 定的要求。獲得一個(gè)無(wú)錯(cuò)的實(shí)現(xiàn),調(diào)試的結(jié)果將確認(rèn)所完成的軟件可以真正使用。 最后,軟件測(cè)試的任務(wù)是在真實(shí)的使用運(yùn)行環(huán)境中配置,調(diào)試軟件,解決軟件正 式使用前,可能存在的任何問(wèn)題。 5.1.25.1.2 測(cè)試的定義測(cè)試的定義 主要方法有審閱,檢查。對(duì)軟件進(jìn)行靜態(tài)測(cè)試。因?yàn)楸拒?/p>

34、件是自己設(shè)計(jì)的, 自己參與了其全部的設(shè)計(jì)過(guò)程,對(duì)軟件的邏輯結(jié)構(gòu),編程思想,代碼編寫都熟悉。 從 ping 按鈕開(kāi)始,逐步查看各功能模塊的設(shè)計(jì)及完成功能的技巧和編程思路, 代碼實(shí)現(xiàn) 5.25.2 端口信息探測(cè)工具測(cè)試計(jì)劃端口信息探測(cè)工具測(cè)試計(jì)劃 5.2.15.2.1 測(cè)試環(huán)境測(cè)試環(huán)境 一臺(tái)計(jì)算機(jī),在系統(tǒng)中安裝 Microsoft Visual C+ 6.0. 計(jì)算機(jī)配置:奔騰 4 2.4G 256M 內(nèi)存 操作系統(tǒng):Windows 2000/XP/2003 5.2.25.2.2 測(cè)試項(xiàng)目及說(shuō)明測(cè)試項(xiàng)目及說(shuō)明 (1)ping 模塊測(cè)試 主要測(cè)試 ping 按鈕完成的功能。在輸入 IP 后,能不能將

35、目標(biāo)主機(jī)返回的信 息反映在 LIST 中。 (2)Scan 模塊測(cè)試 測(cè)試能不能對(duì)目標(biāo)主機(jī)進(jìn)行端口掃描。將獲得的端口信息反映到 LIST 表中。 5.35.3 端口信息探測(cè)工具測(cè)試計(jì)劃執(zhí)行情況端口信息探測(cè)工具測(cè)試計(jì)劃執(zhí)行情況 5.3.15.3.1 pingping 模塊測(cè)試結(jié)果模塊測(cè)試結(jié)果 在軟件的 IP 地址欄內(nèi)輸入需要掃描主機(jī)的 IP 地址,比如 192.168.1.231, 輸入想要掃描的起始端口和結(jié)束端口號(hào),比如 130-140。如下圖: 圖 11 輸入端口號(hào) 點(diǎn)擊 ping 按鈕,ping 通會(huì)提示成功信息,失敗會(huì)提示失敗信息: 圖 12 ping 測(cè)試成功 此時(shí)提示連接成功,并且掃

36、描按鈕有效。失敗會(huì)提示連接測(cè)試未通過(guò)。 如果輸入的端口號(hào)或 IP 有誤會(huì)提示: 圖 13 輸入端口號(hào)錯(cuò)誤 5.3.25.3.2 scanscan 模塊測(cè)試結(jié)果模塊測(cè)試結(jié)果 ping 測(cè)試成功以后,在開(kāi)始端口和結(jié)束端口處輸入端口號(hào),比如 130-140, 點(diǎn)擊掃描按鈕,結(jié)果如下: 圖 14 掃描結(jié)果 在 LIST 表中會(huì)顯示出目標(biāo) IP 的哪些端口是開(kāi)放的,而哪些端口是關(guān)閉的。 點(diǎn)擊清空列表按鈕,清空列表信息。 5.45.4 端口信息探測(cè)工具需求測(cè)試結(jié)論端口信息探測(cè)工具需求測(cè)試結(jié)論 經(jīng)過(guò)軟件的測(cè)試,系統(tǒng)基本上達(dá)到需求定義階段設(shè)計(jì)目標(biāo)所提出的要求。 5.55.5 評(píng)價(jià)評(píng)價(jià) 軟件基本達(dá)到設(shè)計(jì)要求,軟

37、件功能完整,用戶界面良好,錯(cuò)誤處理正確,且 能正確提示錯(cuò)誤種類。 但是在測(cè)試中也發(fā)現(xiàn)軟件的一些不足與缺陷,比如考慮不周全,沒(méi)有起用多 線程等等一些缺陷,需要在軟件進(jìn)一步修改和維護(hù)時(shí)予以糾正。 總的來(lái)說(shuō),軟件通過(guò)測(cè)試。 結(jié)結(jié) 論論 端口信息探測(cè)工具,從技術(shù)和實(shí)現(xiàn)兩個(gè)方面,對(duì) TCP 協(xié)議,端口掃描原理, 套接字原理進(jìn)行了深入的分析和設(shè)計(jì),并對(duì)開(kāi)發(fā)思想和技術(shù)實(shí)現(xiàn)情況做了詳細(xì)描 述。首先介紹了當(dāng)前開(kāi)發(fā)端口信息探測(cè)工具的意義,接著分析了 TCP 三次握手建 立連接的原理以及過(guò)程,以及端口掃描的主要原理和過(guò)程,套接字的原理。選取 了一個(gè)研究的主要問(wèn)題怎樣利用三次握手來(lái)進(jìn)行端口掃描,然后就具體的設(shè)計(jì)方 面

38、的內(nèi)容做了一定介紹,給出了設(shè)計(jì)的實(shí)現(xiàn)方法并最后對(duì)本設(shè)計(jì)進(jìn)行了一些測(cè)試。 本項(xiàng)目已經(jīng)完成端口探測(cè)工具的基本開(kāi)發(fā)。其功能基本符合設(shè)計(jì)目標(biāo),能夠 完成通過(guò)對(duì)目標(biāo)端口進(jìn)行掃描來(lái)獲得端口信息的預(yù)期功能。 在本次設(shè)計(jì)中,由于自己此方面知識(shí)不夠全面和時(shí)間上的問(wèn)題,使得軟件還 存在一些不足。比如沒(méi)有打開(kāi)多個(gè)線程。 本設(shè)計(jì)今后主要工作重點(diǎn)是完整實(shí)現(xiàn),在打開(kāi)多個(gè)線程方面,能夠用這種方 法來(lái)加快掃描的速度。 參考文獻(xiàn)參考文獻(xiàn) 1 W.Richard Stevens(美).TCP/IP 詳解M.北京:機(jī)械工業(yè)出版社,2005。 2 鄭麗,董淵C+語(yǔ)言程序設(shè)計(jì)M.北京:清華大學(xué)出版社,2004。 3 張炯.window

39、s 網(wǎng)絡(luò)編程實(shí)用技術(shù)與實(shí)例分析M.北京:清華大學(xué)出版社,2002。 4 Stanley,BLippman Barbara E,Moo Jose Lajoie(美).C+primer 中文版M.北京: 人民郵電出版社,2006。 5 蔣愛(ài)軍,李師賢,梅小勇.C+primer 習(xí)題解答M.北京:人民郵電出版社,2007。 6 賈斌.網(wǎng)絡(luò)編程技巧與實(shí)例M.北京:人民郵電出版社,2004。 附附 錄錄 系統(tǒng)源代碼: #include stdafx.h #include PortScan.h #include TimeOutSocket.h #include PortScanDoc.h #include

40、 PortScanView.h #include /winsock API 的頭文件 #include iphlpapi.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif int NewPing(IPAddr ia, ULONG *hops_count, ULONG *rtt); /創(chuàng)建線程 / / CPortScanView /scanthread callback /Win32AIP 標(biāo)準(zhǔn)函數(shù),回調(diào)函數(shù),由操作系統(tǒng)自己負(fù)責(zé)函數(shù)的調(diào)用 UINT PortS

41、canThreadProc(LPVOID pParam) /lpvoid 定義為 far 類型,32 字節(jié)指 向未指明的類型 /不管代入的參數(shù)是否是個(gè)從 CWinThread 繼承來(lái)的線程類還是一以標(biāo)準(zhǔn)的 線程函數(shù)地址及參數(shù) /(UINT ThreadProc(LPVOID pParam)的形式) ,都返回了一 CWinThread 指 針?lè)奖懔宋覀兪褂?CPortScanView *sview=(CPortScanView *)pParam; /設(shè)置視圖類指 針 DWORD beginport=sview-m_EditStartPort; /得到編輯框?qū)?性 DWORD endport=sv

42、iew-m_EditEndPort; /同上 CString info; CString RouteIP; RouteIP=sview-m_destip; /設(shè)置編輯框?qū)?性 CTimeOutSocket* sock=NULL; /初始化一個(gè)測(cè)試 端口超時(shí)對(duì)象 AfxSocketInit(); /afx 前綴的函數(shù)為應(yīng)用程序框架函數(shù),幫助我們生成應(yīng) 用程序,他們是全局函數(shù), /初始化 socket /可以在任何地方調(diào)用他們 /成功返回 1,bool 類型 /標(biāo)準(zhǔn) Win32API 初始化 Windows Socket while (1) sock = new CTimeOutSocket();

43、 /創(chuàng)建一個(gè)新的類的對(duì)象,賦 給 SOCK。 sock-SetTimeOut(5000); /設(shè)置連接超時(shí)時(shí) 間 if (!sock-Create() /創(chuàng)建 Socket 對(duì)象, 同時(shí)這個(gè) Socket 綁定到指定的 IP /他支持 2 中模式,一種是流模式,一種是數(shù)據(jù)報(bào)文 return 1; if (sock-Connect(RouteIP,beginport) /如果能夠建立 Socket 連接,同 樣是一種是流,一種數(shù)據(jù)包 info.Format(IP 地址:%s 端口%d 已開(kāi)啟!,RouteIP,beginport); /如果端口打開(kāi)。格式化輸出 routeip,beginport

44、 的值 sview-m_ListRichEdit.AddString(info); /把掃描到的 IP 地址綁定到 CListBox else /如果端口關(guān)閉 info.Format(IP 地址:%s 端口%d 未開(kāi)啟!,RouteIP,beginport); sview-m_ListRichEdit.AddString(info); sock-KillTimeOut(); /關(guān)閉連接,銷毀記時(shí) 器 delete sock; sock=NULL; beginport+=1; if(beginportendport) return 0; /ping 掃描實(shí)現(xiàn) / CPortScanView me

45、ssage handlers /在視圖類中測(cè)試掃描按鈕 void CPortScanView:OnBtnScan() / TODO: Add your control notification handler code here this-UpdateData(TRUE); /This 指針是一隱含的指針,指向?qū)ο蟊旧恚?代表了對(duì)象的地址 /初始化對(duì)話框里的數(shù)據(jù),也可是使對(duì)話框 里的數(shù)據(jù)有效 if(m_EditEndPort65530) /IDC_EDIT_ENDPORT m_EditEndPort=65530; else if(m_EditEndPort65530) /測(cè)試端口的開(kāi)始范圍 m

46、_EditStartPort=65530; else if(m_EditStartPortm_EditEndPort) AfxMessageBox(開(kāi)始端口大于結(jié)束端口,請(qǐng)重新輸入掃描端口段!); return ; this-UpdateData(FALSE); /已經(jīng)初始化。ture 為重新得到 scanthread = AfxBeginThread(PortScanThreadProc, this); /傳入線程函數(shù)名 和參數(shù) void CPortScanView:OnBtnPing() / TODO: Add your control notification handler code here this-UpdateData

溫馨提示

  • 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)論