基于多線程的端口掃描程序教材_第1頁(yè)
基于多線程的端口掃描程序教材_第2頁(yè)
基于多線程的端口掃描程序教材_第3頁(yè)
基于多線程的端口掃描程序教材_第4頁(yè)
基于多線程的端口掃描程序教材_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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、武漢理工大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)說明書武漢理工大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)課程論文題 目基于多線程的端口掃描程序作 者 學(xué)院專業(yè)學(xué)號(hào)指導(dǎo)教師二0五年七月六日3武漢理工大學(xué)信息工程學(xué)院課程論文誠(chéng)信聲明本人聲明:所呈交的課程論文,是本人在指導(dǎo)老師的指導(dǎo)下,獨(dú)立 開展工作所取得的成果,成果不存在知識(shí)產(chǎn)權(quán)爭(zhēng)議,除文中已經(jīng)注明引 用的內(nèi)容外,本課程論文不含任何其他個(gè)人或集體已經(jīng)發(fā)表或創(chuàng)作過的 作品成果。對(duì)本文工作做出重要貢獻(xiàn)的個(gè)人和集體均已在文中以明確方 式標(biāo)明。本人完全意識(shí)到本聲明的法律結(jié)果由本人承擔(dān)。本科課程論文作者簽名:二C一五年 月 日課程論文成績(jī)?cè)u(píng)定表質(zhì)量評(píng)價(jià)指標(biāo)(在相應(yīng)欄目打)評(píng)價(jià)項(xiàng)目論文與設(shè)計(jì)評(píng)價(jià)質(zhì)量按對(duì)

2、應(yīng)項(xiàng)目打分工作量和態(tài)度(10分)分析問題能力(10分)解決問題能力(10分)內(nèi)容完整層次分明(10分)設(shè)計(jì)、實(shí)驗(yàn)正確性(10分)書寫規(guī)范(10分)流程圖或拓?fù)鋱D(10分)論證充分(10分)測(cè)試結(jié)果情況(10分)總體評(píng)價(jià)(10分)評(píng)定成績(jī)(100分制)指導(dǎo)教師簽名年 月日武漢理工大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)說明書、課題背景隨著In ternet的不斷發(fā)展,信息技術(shù)已成為促進(jìn)經(jīng)濟(jì)發(fā)展、社會(huì)進(jìn)步的巨大推動(dòng)力。端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)一個(gè)重要的網(wǎng)絡(luò)安全技術(shù)。與防火墻、入侵 檢測(cè)系統(tǒng)互相配合,能夠有效提高網(wǎng)絡(luò)的安全性。安全掃描是安全技術(shù)領(lǐng)域中重要的 一類。通過掃描能自動(dòng)檢測(cè)遠(yuǎn)端或本地主機(jī)系統(tǒng)信息,包括主

3、機(jī)的基本信息(如計(jì)算機(jī)名、域名、組名、操作系統(tǒng)型等)、服務(wù)信息、用戶信息以及漏洞信息,它的重要 性在于能夠?qū)W(wǎng)絡(luò)進(jìn)行安全評(píng)估,及時(shí)發(fā)現(xiàn)安全隱患,防患于未然。網(wǎng)絡(luò)的安全狀況取決于網(wǎng)絡(luò)中最薄弱的環(huán)節(jié), 任何疏忽都有可能引入不安全的因 素,最有效的方法是定期對(duì)網(wǎng)絡(luò)系統(tǒng)進(jìn)行安全分析,及時(shí)發(fā)現(xiàn)并修正存在的脆弱,保 證系統(tǒng)安全。國(guó)外安全掃描技術(shù)的歷史可以追溯到 20世紀(jì)90年代,當(dāng)時(shí)因特網(wǎng)剛剛起步,但 是在過去的十年內(nèi),掃描技術(shù)飛速發(fā)展,迄今為止,其掃描技術(shù)已經(jīng)非常完善,但是 在全面性,隱蔽性和智能性上還有待提高。安全掃描從最初專門為UNIX系統(tǒng)而編寫的一些只有簡(jiǎn)單功能的小程序發(fā)展到現(xiàn)在,已經(jīng)出現(xiàn)了可以運(yùn)

4、行多個(gè)操作系統(tǒng)平臺(tái)上的,具有復(fù)雜功能的系統(tǒng)程序。國(guó)內(nèi)的掃描技術(shù)是在國(guó)外的掃描器基礎(chǔ)上發(fā)展起來(lái)的。其中有一些專門從事安全技術(shù)的公司。這些公司的掃描器以硬件為主,其特點(diǎn)是執(zhí)行速度快,不像軟件一樣受 到安裝主機(jī)系統(tǒng)的限制。然而對(duì)于更多的基于主機(jī)的端口掃描而言,簡(jiǎn)單,實(shí)用,可 靠才是它們的長(zhǎng)處。3二、設(shè)計(jì)理念每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可 能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊 段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上 是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)

5、線程的調(diào) 度和執(zhí)行。線程是程序中一個(gè)單一的順序控制流程在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程端口掃描的原理其實(shí)非常簡(jiǎn)單,只是簡(jiǎn)單的利用VC+提供庫(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ī)制,利用多線程掃描的好處就是速度快,如果對(duì)每個(gè)目標(biāo)端口以線性 的方式使用單獨(dú)的連接調(diào)用,那么將會(huì)花費(fèi)相當(dāng)長(zhǎng)的時(shí)間。多線程同時(shí)打開多個(gè)套接字, 從而加速掃描。在本設(shè)計(jì)中用戶可以自定義線程的個(gè)

6、數(shù)。此處用戶還可以自定義掃描方 式。用VC+6.0開發(fā)多線程應(yīng)用程序有兩種方法,一種是利用Win32API函數(shù),它的特點(diǎn)是 代碼小巧,執(zhí)行效率高,但開發(fā)難度大;另一種是利用MFC類庫(kù),它的特點(diǎn)是開發(fā)方便,但 代碼龐大。下面,以端口掃描程序?yàn)槔?,介紹利用目前較流行MFC類庫(kù)進(jìn)行多線程應(yīng)用程 序的開發(fā)方法。三、過程論述1. 過程流程圖圖1過程流程圖2. 程序設(shè)計(jì)過程(一) MFC多線程的類型MFC區(qū)分兩種類型的線程:用戶界面線程(user2intefacethreads)和工作者線程(workerthreads)。用戶界面線程通常用來(lái)處理用戶的輸入并響應(yīng)各種事件和消息。工 作者線程通常用來(lái)完成程序

7、的后臺(tái)處理任務(wù),比如計(jì)算、調(diào)度、后臺(tái)打印等,沒有消息機(jī) 制,不需要與用戶交互。這兩種線程類都是從CWinThread類派生而來(lái)的,不同的是,工作 者線程不用從CwinThread類派生來(lái)創(chuàng)建,而由函數(shù)AfxBe2ginThread()自動(dòng)創(chuàng)建。(二) 用戶界面線程的創(chuàng)建首先,從CWin Thread類派生出自己的線程類,必須確保用DECLARE_DYNCRE和TEIMPLEMENT_DYNCRE對(duì)該類進(jìn)行聲明和實(shí)現(xiàn),然后該類重載一些函數(shù),女口Exit In sta nce,I nit In sta nce,On Idle,PreTra ns2lateMessage,ProcessWndProc

8、Exception,Run 等等,最后調(diào)用 AfxBeginThread()創(chuàng)建并啟動(dòng)線 程,其原型如下:CWin Thread3AfxBegi nThread()CRuntimeClass3pThreadClass,/ 從 CWinThread派生的運(yùn)行類intn Priority = THREAD_PRIORITY_NORMAL, / 線程優(yōu)先級(jí)UINT nStackSize = 0,/線程堆棧大小,如為0,則與父線程堆棧大小相同DWORD dwCreateFlags = 0, /線程創(chuàng)建時(shí)的附加標(biāo)志LPSECURIT_YATTRIBUTES IpSecurityAttrs = NULL)

9、; / /安全屬性指針另外,還可以通過構(gòu)造函數(shù)創(chuàng)建類 CWinThread的一個(gè)對(duì)象,再調(diào)用函數(shù):CreateThread啟動(dòng)線程的方法來(lái)創(chuàng)建一個(gè)用戶界面線程。(三) 工作者線程的創(chuàng)建創(chuàng)建工作者線程相對(duì)比較簡(jiǎn)單,只需要兩步:編寫控制函數(shù)和啟動(dòng)線程。所謂控制函 數(shù),就是指想要并行運(yùn)行的子程序。當(dāng)進(jìn)入該函數(shù)時(shí),線程開始運(yùn)行,退出時(shí),線程終止, 其聲明如下:UINT MyCo ntrolli ngFu nction (LPVOID pParam);參數(shù)pParam是一個(gè)單精度32位值,是調(diào)用函數(shù)創(chuàng)建線程對(duì)象時(shí),傳遞給線程函數(shù)的武漢理工大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)說明書參數(shù)。它可以是一個(gè)數(shù)值,也可以是指向包

10、含多個(gè)參數(shù)的結(jié)構(gòu)指針,甚至可以忽略。如果 該參數(shù)是一個(gè)結(jié)構(gòu)指針,那么該結(jié)構(gòu)不僅用于調(diào)用函數(shù)傳遞參數(shù)給線程函數(shù),還可以將 數(shù)據(jù)從線程函數(shù)回傳給調(diào)用函數(shù)。如果使用該結(jié)構(gòu)回傳數(shù)據(jù),當(dāng)線程函數(shù)的數(shù)據(jù)準(zhǔn)備好的時(shí)候,要通知調(diào)用函數(shù)??刂坪瘮?shù)的返回值為 0,則表示成功,不為0,則表示發(fā)生了不 同類型的錯(cuò)誤。啟動(dòng)線程時(shí),調(diào)用函數(shù)AfxBeginThread()創(chuàng)建并初始化一個(gè)CWinThread對(duì)象,啟動(dòng) 并返回該線程的地址,以備后用。(四) 線程間的同步當(dāng)兩個(gè)或兩個(gè)以上的線程同時(shí)訪問同一個(gè)數(shù)據(jù)時(shí),可能會(huì)導(dǎo)致意想不到的或者非預(yù) 期的結(jié)果,例如,一個(gè)線程正在更新一個(gè)結(jié)構(gòu)的內(nèi)容,同時(shí)另一個(gè)線程正在讀取該結(jié)構(gòu)的 信

11、息,那么不知道讀取結(jié)構(gòu)的線程獲得的是更新之前的舊數(shù)據(jù)還是更新之后的新數(shù)據(jù),或者是兩者的混合。MFC提供了一組同步類和同步訪問類來(lái)解決這個(gè)問題。包括兩大類:同步對(duì)象(CsyncObject,Csemaphore,Cmutex,CcriticalSection和 Cevent)和同步訪問對(duì)象(CmultiLock和CsingleLock)。其中Csync2Object是其它四個(gè)同步對(duì)象的基類,不直接 使用。信號(hào)同步類CSemaphore允許有限數(shù)量的線程訪問一個(gè)資源,通常用于控制一定數(shù)量的用戶訪問共享資源;互斥同步類CMutex:允許一個(gè)線程以獨(dú)占的方式訪問一個(gè)資源,通常用于一次只允 許一個(gè)線程修

12、改數(shù)據(jù)或其它控制信息;臨界區(qū)同步類CCriticalSection: 允許一個(gè)線程以獨(dú)占的方式訪問一個(gè)資源,通常 用于一次只允許一個(gè)線程修改數(shù)據(jù)或其它控制信息,當(dāng)程序?qū)λ俣纫筝^高并且對(duì)共享 資源的訪問沒有超出進(jìn)程的范圍時(shí),可用CCriticalSection 代替CMutex;事件同步類CEvent:允許一個(gè)線程通知另一個(gè)線程某一事件已經(jīng)發(fā)生,通常用于當(dāng)一個(gè)線程需要知道它什么時(shí)候開始執(zhí)行某項(xiàng)操作的時(shí)候。四種同步對(duì)象的使用方法很簡(jiǎn)單,多數(shù)情況下不需要同步訪問類CSingleLock和CMultipleLock。首先在主程序中創(chuàng)建同步對(duì)象,然后在線程需要訪問共享資源的時(shí)候, 直接調(diào)用同步對(duì)象自身

13、的成員函數(shù) Lock()和Unlock()就可以了 ,例如:CriticalSectio n. Lock();ThreadNum+;CriticalSectio n.U nl ock();(五) 程序代碼功能實(shí)現(xiàn) 用AppWizard生成一個(gè)win32控制臺(tái)程序框架,并選擇支持MFC由于該程序用 到多線程和win sock;所以在頭文件當(dāng)中要加入:include “ afxmt.h ”in clude “ Win sock2.h ” 定義當(dāng)前線程計(jì)數(shù)器,初始值取 0;in tThreadNum=0; 因?yàn)槊總€(gè)線程都要對(duì)當(dāng)前的線程計(jì)數(shù)器進(jìn)行修改,所以要定義線程同步對(duì)象:CCriticalSect

14、io nCriticalSectio n; 編寫線程控制函數(shù),每個(gè)線程需要知道自已要對(duì)哪臺(tái)主機(jī)的哪個(gè)端口進(jìn)行掃描 因此定義如下線程參數(shù)結(jié)構(gòu):structThreadParamint iPot ;/被掃描的端口號(hào)int a,b,c,d; /ip地址的四個(gè)分段實(shí)現(xiàn)線程控制函數(shù)TestThread():UINTTestThread(LPVOIDpParam)charip16;用于存放ip地址in tiPort=(ThreadParam3)pParam)-iPort;從參數(shù)中取出被掃描端口號(hào)sprintf(ip,“ d.%d.%d.%”,(ThreadParam3)pParam)-a, (Thread

15、Param3)pParam)-b,(ThreadParam3)pParam)-c,(ThreadParam3)pParam)-d; / 將 4 個(gè)分段合并成 IP 地址SOCKET Win Socket;structsockaddrin local_si n;/定義端口和地址addr.sin_family=AF_INET; /tcp/ip協(xié)議族SOCKET sck_Co nn;/socket 描述符sck_Conn=socket(AF_INET,SOCK_STREAM,0); / 生成一個(gè) TCP的socket,命名為 sck_Connif(ddd=SOCKET_ERROR)if(REPORT

16、_FAILED)aa.Format(failed! port:%drn,i); /嘗試建立連接,失敗則返回“ failed ”elseif(REPORT_SUCCEED)aa.Format(succeed! port: %drn ,i); / 否則返回“ succeed” closesocket(sck_Conn);/關(guān)閉套接字 socket3. 設(shè)計(jì)步驟實(shí)現(xiàn)(一)首先使用 VC+勺應(yīng)用程序生成向?qū)?MFCAppWizardexe)創(chuàng)建一個(gè)基于對(duì)話框的工程,該工程的名稱 MyScanPort,如圖3.1所示。21文件工程工作區(qū)|其它文檔|遏血TL COM AppWIzard 同Cluster

17、Resource Type WizardjlCustom AppWizard占程名稱聞:MyS can PortDatabase Project nSiiidln Add-in Wizard Extended Stored Proc Wizard lSkAPl Extension Wizard idllvlakefile 衾 MFC ActiveX ConlrcIWianl bMFC AppWizard (dll) 53MFC AppWizard |exe氈置(g:|CAUserV1eskiopVadeft 上Y| Utility Project二%;Win32 ApplicationWin3

18、2 Coms de ApplicationWin32 Dynamic-Link LibraryWin32 Static Library席創(chuàng)建新的工件空間回 廣濟(jì)倒當(dāng)前工作空間國(guó)廠從屬于回:|MyS can Port乎臺(tái)舊: Win 就圖3.1建立工程(a)(二)單擊確定, 然后選擇基本對(duì)話框,如圖3.2所示。您要?jiǎng)?chuàng)建的應(yīng)用程序類型是:MFC應(yīng)用寫洋向?qū)?半蠶1廠單文檔罔 廠多重文檔閽|P文檔盾看體系結(jié)枸支持”基本對(duì)話框回您的資源使用的語(yǔ)言是:申文I簡(jiǎn)朿中國(guó)iappwzcAe.dlG*上一下一 主成取消圖3.2建立工程(b)(三)點(diǎn)擊下一步,再在 Win dowsSocketsW前打上勾,支持

19、Win sock編程,如圖3.3所示。圖3.3建立工程(c)(四)點(diǎn)擊完成,即完成了工程的創(chuàng)建(五)設(shè)計(jì)對(duì)話框,對(duì)話框界面如圖3.4所示圖3.4對(duì)話框設(shè)計(jì)(六)按快捷鍵Ctrl+W,添加相關(guān)變量,如圖3.5所示圖3.5添加變量(七)最后,在程序代碼區(qū)加入相關(guān)程序代碼,即可完成設(shè)計(jì)四、結(jié)果分析1調(diào)試并運(yùn)行程序之后,進(jìn)入如下圖所示界面圖4.1操作界面2、輸入目標(biāo)計(jì)算機(jī)的IP地址,所掃描端口的范圍以及線程數(shù),點(diǎn)擊查找,即 可開始掃描。計(jì)算機(jī)端口的空閑狀態(tài),可通過命令提示符中輸入“netstat -ano” 即可查找計(jì)算機(jī)端口狀態(tài),以本機(jī)為例,本機(jī)IP地址為27.17.133.25。端口狀 態(tài)如圖4.

20、2所示:曲 言理員 CLXWindDwsVsyfftemJXcrnd.eMe ui | 回 咗p p p F pCPCPFFFFPPPP c c27.17.133.25:51575 27.17.133.25:51576 27.17.133.25=51577133-25:5158?2?.17.133.2&:&1&88 12?.B.B.l:43aB 127.0=0.1:4301 127.0.0A-471B2 192.1681.125:139 :nnas f:=1=445=1=286? =1:49152=1:49153 =1:49154 C:=:4915S t:=1=491640.0.0.0:535

21、50.0.B.BS66&60US.8.0E9000 0.0.0.0=499670.0.0.0=54250 0.0.B.e=544n163.60.153,9? =80 103.60.153.99:80 183.60.153.99;80221.228.204.31:BU 22122 B211俎11:皆14:i:e :1:0 :0 =:0 :0 :0:J:0 U : 1:8TIME WAIT TIHE_WAIT TME_WfiIT Tll1E_WflIT TlME_WfiIT LISTENING LISTENING LISTENING LISTENING UTEHIHG LISTENING LIST

22、ENING LISTENING LLSIEHJHQ LISIEHJ HQ LISTENJHG LLSTEHJHG76 J &?b3b58469210G866RR7636660810687636圖4.2端口狀態(tài)3、由圖可知,135,445等端口是空閑的,在用戶界面中,輸入目標(biāo)計(jì)算機(jī)的IP地址,所掃描端口的范圍以及線程數(shù),得到端口情況,如下圖4.3所示。failfii! porClM failed!port;138曰訂電川port:1STfGlgdJport:136succeed?port:135failed!port;134軌 il 電 dJport:133failed* pwt:132 fai

23、ladlport;131bil 亡 dJport:130failedipar 匕129圖4.3運(yùn)行結(jié)果由運(yùn)行結(jié)果可知,135號(hào)端口為“ succeed”,即開放狀態(tài),與實(shí)際情況相符合五、總結(jié)本次設(shè)計(jì)的基于多線程的端口掃描程序基本滿足了課程設(shè)計(jì)的要求,能夠很好地 對(duì)本機(jī)或其他電腦端口進(jìn)行掃描,同時(shí)也處理了程序中可能出現(xiàn)的錯(cuò)誤。本次課程設(shè)計(jì), 使我對(duì)計(jì)算機(jī)網(wǎng)絡(luò)這門課程有了更深入的理解。計(jì)算機(jī)網(wǎng)絡(luò)是一門實(shí)踐性較強(qiáng) 的課程,為了學(xué)好這門課程,必須在掌握理論知識(shí)的同時(shí),加強(qiáng)上機(jī)實(shí)踐。要想把課程 設(shè)計(jì)做的更好,就要學(xué)會(huì)參考一定的資料,吸取別人的經(jīng)驗(yàn),多多思考。在本課程設(shè)計(jì)中,我明白了理論與實(shí)際應(yīng)用相結(jié)合的

24、重要性,并提高了自己組織 數(shù)據(jù)及編寫大程序的能力。培養(yǎng)了基本的、良好的程序設(shè)計(jì)技能以及合作能力。這次課 程設(shè)計(jì)同樣提高了我的綜合運(yùn)用所學(xué)知識(shí)的能力。課程設(shè)計(jì)程序的編寫需要有耐心,有 些事情看起來(lái)很復(fù)雜,但問題需要一點(diǎn)一點(diǎn)去解決,分析問題,把問題模塊化,劃分成 小塊以后就逐個(gè)去解決。再總體解決大的問題。這樣做起來(lái)不僅有條理也使問題得到了 輕松的解決。通過這段時(shí)間的課程設(shè)計(jì),我認(rèn)識(shí)到計(jì)算機(jī)網(wǎng)絡(luò)是一門比較難的課程。需要 多花時(shí)間學(xué)習(xí)。這次的課程設(shè)計(jì)培養(yǎng)了我們實(shí)際分析問題、編程和動(dòng)手能力,使我們掌 握了計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)的基本技能,提高了我們適應(yīng)實(shí)際,運(yùn)用于實(shí)際生活的能力。這次的課程設(shè)計(jì)提高了我對(duì)于專

25、業(yè)課的學(xué)習(xí)熱情,使我能夠更加深入的理解課本 內(nèi)容,對(duì)計(jì)算機(jī)網(wǎng)絡(luò)也有了進(jìn)一步的理解和認(rèn)識(shí),同時(shí)也理解了將課本內(nèi)容與實(shí)際 生活相結(jié)合的好處。六、參考文獻(xiàn)1 .謝希仁等計(jì)算機(jī)網(wǎng)絡(luò)(第六版)M.北京:人民郵電工業(yè)出版社,2015.;2 .肖微.端口掃描技術(shù)的原理及應(yīng)用.網(wǎng)絡(luò)安全技術(shù)與應(yīng)用.2006.10.3 吳功宜.計(jì)算機(jī)網(wǎng)絡(luò)(第二版).北京:清華大學(xué)出版社,2007。附件一:程序源代碼#i nclude stdafx.h/ 頭文件預(yù)編譯#include MyScanPort.h#include MyScanPortDIg.h#include afxmt.h/MFC多線程同步的一個(gè)擴(kuò)展頭文件,該頭文件

26、中聲明了用于MFC編程中多線程同步時(shí)所需要的類#ifdef _DEBUG#defi ne new DEBUG_NEW#un def THIS_FILEstatic char THIS_FILE = _FILE_;#en difBOOL REPORT_SUCCEED,REPORT_FAILED;/結(jié)構(gòu)體變量定義:線程參數(shù);/起始端口和終止端口目標(biāo)計(jì)算機(jī)ip地址的4個(gè)段/結(jié)構(gòu)體變量定義:端口參數(shù)typedef struct ThreadParam int StartPort; in t En dPort;HWND hwn d;byte a,b,c,d; THREADPARAM; typedef s

27、truct PortParamint iPort;HWND hwn d;byte a,b,c,d;PORTPARAM;THREADPARAM threadparam1; bool IsStop;HANDLE g_Busy;CStri ng g_message;bool ReleaseSmp;CCriticalSection criticalSection;int NowWhere;UINT GetPortMessage(LPVOID pParam);/ 獲取端口信息UINT MyThread(LPVOID pParam)/ 定義線程函數(shù)THREADPARAM* threadparam=(THR

28、EADPARAM*)pParam; sockaddr_i n addr;addr.sin_family=AF_INET; /tcp/ip 協(xié)議族 addr.s in _addr.S_ un.S_un _b.s_b1=threadparam-a; addr.s in _addr.S_ un.S_un _b.s_b2=threadparam-b; addr.sin_addr.S_u n.S_un_ b.s_b3=threadparam-c;addr.s in _addr.S_ un.S_un _b.s_b4=threadparam-d;for(i nti=threadparam-StartPort

29、;(iE ndPort )&(!lsStop )&(N owWhereE ndPort);i+)SOCKET sck_Co nn;/socket 描述符sck_Conn=socket(AF_INET,SOCK_STREAM,0); /生成一個(gè) TCP 的socket,命名為 sck_Conn if(sck_Conn=INVALID_SOCKET)如果為無(wú)效的 socket,則返回0,表示faildreturn 0; criticalSectio n Lock();調(diào)用同步對(duì)象成員函數(shù),進(jìn)行同步i=NowWhere;NowWhere+;criticalSect ion.Unl ock();add

30、r.s in _port=ht on s(i);sck_Co nn=socket(AF_INET,SOCK_STREAM,0);if(sck_Co nn=INVALID_SOCKET)return 0;int ddd=connect(sck_Conn,(sockaddr*)&addr,sizeof(addr); CStri ng aa=;char buffer80;strcpy(buffer,);if(ddd=SOCKET_ERROR)if(REPORT_FAILED)aa.Format(failed! port:%drn,i);elseif(REPORT_SUCCEED)aa.Format(

31、succeed! port:%drn,i);PORTPARAM *portparam=new PORTPARAM; portparam-a=threadparam-a;portparam-b=threadparam-b;portparam-c=threadparam-c;portparam-d=threadparam-d;將 4 個(gè)分段合并成 IP 地址portparam-hw nd=threadparam-hw nd;portparam-iPort=i;AfxBegi nThread(GetPortMessage,portparam,THREAD_PRIORITY_IDLE); closes

32、ocket(sck_Conn);關(guān)閉套接字 socketif(g_message.GetLe ngth()30000)g_message=;g_message=aa+g_message;if(i=threadparam-E ndPort)g_message=sca n port complete!rnrn+g_message;:SetWi ndowText(threadparam-hw nd,g_message);if(!ReleaseSmp)if(ReleaseSem aphore(g_Busy,1,NULL) ReleaseSmp=true;return 0;UINT GetPortMes

33、sage(LPVOID pParam)PORTPARAM* portparam 仁(PORTPARAM*)pParam;sockaddr_i n addr;addr.sin_family=AFN ET;addr.s in _addr.S_ un.S_un _b.s_b1=portparam1-a;addr.s in _addr.S_ un.S_un _b.s_b2=portparam1-b;addr.s in _addr.S_ un.S_un _b.s_b3=portparam1-c;addr.s in _addr.S_ un.S_un _b.s_b4=portparam1-d;addr.si

34、n_port=htons(portparam1-iPort);/建立 socket 套接字SOCKET sck_Co nn;sck_Co nn=socket(AFN ET,SOCK_STREAM,0);if(sck_Co nn=INVALID_SOCKET)delete pParam;return 0;sck_Co nn=socket(AFN ET,SOCK_STREAM,0);int ddd=c onn ect(sck_C onn ,(sockaddr*)&addr,sizeof(addr); if(ddd=SOCKET_ERROR)closesocket(sck_C onn);delete pParam;return 0;char buffer256;strcpy(buffer,);ddd=recv(sck_Co nn ,buffer,256,0); if(ddd=SOCKET_ERROR)closesocket(sck_C onn);delete pParam;return 0;if(strcmp(buffer,)!=0)CStri ng aa=;for(int i=0;i128|bufferiiPort,buffer); closesocket(sck_C onn);if(g_message.GetLe ngth()30000) _

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論