最新計算機網絡課程設計基于ICMPTCP的網段端口掃描C語言編寫 免費下載.doc_第1頁
最新計算機網絡課程設計基于ICMPTCP的網段端口掃描C語言編寫 免費下載.doc_第2頁
最新計算機網絡課程設計基于ICMPTCP的網段端口掃描C語言編寫 免費下載.doc_第3頁
最新計算機網絡課程設計基于ICMPTCP的網段端口掃描C語言編寫 免費下載.doc_第4頁
最新計算機網絡課程設計基于ICMPTCP的網段端口掃描C語言編寫 免費下載.doc_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

最新計算機網絡課程設計基于ICMPTCP的網段端口掃描C語言編寫 免費下載.doc.doc 免費下載

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

文檔簡介

ronnie課 程 設 計 任 務 書【設計目的】 加深對TCP/IP協(xié)議的理解,熟悉Socket編程【設計任務】 實現一個掃描器,必須能夠完成以下所有功能:使用TCP connect、TCP SYN和TCP FIN進行端口掃描,使用ICMP echo 掃描實現IP掃描。并把結果記錄下來?!驹O計要求】l Windows或Linux環(huán)境下,程序在單機上運行。l 演示:使用端口掃描對一臺主機進行掃描,并顯示結果(一臺主機上有哪些端口是打開的)。對一個網段進行IP掃描,顯示結果(一個網段內有哪些主機是開機的)。l 友好的用戶界面【設計要求】l 程序源代碼,必須有詳細的注釋。l 項目設計報告。32網段和端口掃描程序一、 概述11.1端口掃描11.2端口掃描常用技術簡介21.2.1 connect()掃描21.2.2 SYN掃描31.2.3 XMAS-TREE掃描31.3網段掃描4二、需求分析52.1 設計功能52.2 設計要求5三、概要設計53.1設計概念和處理流程53.2 結構設計73.2.1 數據結構及定義73.2.2 接口函數8四、細設設計94.1 實現原理94.1.1 connect()函數端口掃描的原理94.1.2 ICMP網段掃描的原理114.2 函數實現144.2.1 初始化winsock動態(tài)鏈接庫144.2.3地址解析154.2.4 計算檢驗和154.2.5 網段掃描164.2.6 端口掃描17五、 總結與體會195.1 程序運行與調試195.2 體會20六、 參考文獻216.1 參考書目216.2 引用網址211、 概述1.1端口掃描端口掃描是指利用TCP協(xié)議的面向連接的特性,使用本地計算機試圖與目的主機的某個端口建立連接,以此來試探目的主機的一些端口的具體狀態(tài),如是否打開,若是打開的又運行什么樣的程序(利用熟知端口很容易知道)。端口掃描有很多技術實現。其中最常用的有:connect()掃描,TCP SYN掃描,TCP FIN掃描,TCP NULL掃描,XMAS- TREE掃描(圣誕樹掃描)等等。在本程序中使用的是connect()掃描。1.2端口掃描常用技術簡介1.2.1 connect()掃描此掃描的原理是,本地計算機利用TCP協(xié)議的三次握手原理(RFC 793)試圖與網絡上一臺主機或服務器建立TCP連接。如果目的主機或服務器回送SYN/ACK則說明該端口開放,否則該端口關閉。具體的過程:1. Client端發(fā)送SYN2. Server端發(fā)送SYN/ACK(該端口開放),或Server端發(fā)送RST/ACK(該端口關閉),若無應答可能目的主機或服務器不可達。3. Client端發(fā)送ACK,連接建立。4. Client端主動斷開連接,連接關閉。過程圖如下:1.2.2 SYN掃描SYN掃描前兩步與connect()掃描相同,只是最后一步,Client端發(fā)送的不是ACK確認報文而是RST報文,這樣三次握手過程就沒有完成,Client與Server也就沒有建立TCP連接,因此前述過程不會被Sever端記錄到系統(tǒng)日志中,掃描更加隱蔽。過程圖如下:1.2.3 XMAS-TREE掃描通過發(fā)送帶有以下標志位TCP數據包URG,PSH,FIN來試探主機。在目標端口開放的情況下不放回任何信息。端口開放:發(fā)送URG/PSH/FIN,沒有響應。端口關閉:1.發(fā)送URG/PSH/FIN,沒有響應。2響應RST。1.3網段掃描網段掃描是指利用ICMP(因特網控制報文協(xié)議)對某一網段的所有IP地址發(fā)送ICMP報文,測試IP地址所對應的主機具體情況(如是否開機等)。所以對目的主機回答的ICMP報文進行分析是網段掃描的關鍵。常見的報文類型有:類型(type)代碼(code)描述差錯查詢00回顯回答*31主機不可達*3端口不可達*80請求回顯*二、需求分析2.1 設計功能實現一個掃描器,使用TCP connect、TCP SYN或TCP SYN進行端口掃描,使用 ICMP echo掃描實現IP掃描,并記錄結果。2.2 設計要求Windows或Linux環(huán)境下,程序應在單機上運行。使用端口掃描對一臺主機進行掃描,并顯示結果,在一定的端口范圍內,該主機由哪些端口是打開的。對一個網段進行IP掃描,顯示結果,該網段的哪些主機是開機的。友好的界面,便于用戶操作,完成全部設計功能。三、概要設計3.1設計概念和處理流程程序使用Windows Sockets API編程,利用winsock2庫函數提供的函數實現與主機間的連接,發(fā)送ICMP報文。詳見Winsock Referen:/en-us/library/windows/desktop/ms741416(v=vs.85).aspx用戶首先選擇要使用的功能,程序共有兩大功能:端口掃描和IP網段掃描。端口掃描的主要功能有,根據用戶輸入的主機名或IP地址以及端口范圍進行connect()掃描。當用戶輸入完必要的信息并擊確認后,程序進行掃描,不過不建議端口區(qū)間過于龐大,等待一段時間后用戶界面會顯示所指定IP地址主機的端口使用情況,哪些端口是打開的,哪些是關閉的。IP網段掃描的主要功能有,用戶輸入某個網段起始IP地址和結束IP地址,確認后,程序根據所輸入的網段號,對網段類的每一個IP地址發(fā)送ICMP請求回顯報文,如果主機處于開機狀態(tài)那么將會回送回答報文;如果主機不可達(在同一個網內),則就能夠判斷該IP所對應的主機處于關機狀態(tài)。當用戶選擇退出功能時,釋放資源,程序關閉。程序流程圖3.2 結構設計3.2.1 數據結構及定義所使用的宏定義,#define ICMP_ECHO_REQUEST_TYPE 8 /ICMP請求類型#define ICMP_ECHO_REQUEST_CODE 0 /ICMP請求代碼#define ICMP_ECHO_REPLY_TYPE 0#define ICMP_ECHO_REPLY_CODE 0#define ICMP_MINIMUM_HEADER 8IP數據報首部,首部固定20字節(jié),數據結構定義如下:typedef struct ip_hdrunsigned char iphVerLen; / 版本號和頭長度(各占4位)unsigned char ipTOS; / 服務類型 unsigned short ipLength; / 封包總長度,即整個IP報的長度unsigned short ipID; / 封包標識,惟一標識發(fā)送的每一個數據報unsigned short ipFlags; / 標志unsigned char ipTTL; / 生存時間,就是TTLunsigned char ipProtocol; / 協(xié)議,可能是TCP、UDP、ICMP等unsigned short ipChecksum; / 校驗和unsigned long ipSource; / 源IP地址unsigned long ipDestination; / 目標IP地址IP_HDR,*PIP_HDR;IP數據報格式ICMP報文首部格式,8個字節(jié),數據結構定義如下:typedef struct icmp_hdrunsigned char icmp_type; /類型unsigned char icmp_code; /代碼unsigned short icmp_checksum; /檢驗和unsigned short icmp_id; /唯一請求ID,通常使用進程PIDunsigned short icmp_sequence; /序列號unsigned long icmp_timestamp; /時間戳 ICMP_HDR,*PICMP_HDR;3.2.2 接口函數Void InitializeWinsock(),初始化Winsock動態(tài)鏈接庫。Void Resolove(char hostname),解析主機名(或IP地址),該函數是公共接口函數,端口掃描和IP網段掃描都使用該函數解析地址。函數首先判斷用戶輸入的IP是十進制點分地址還是域名地址,然后分別調用inet_addr()和gethostbyname()庫函數處理成unsigned long型數據。Void ResoloveIPAddr(char starthost,char endhost,int *start,int *end),此函數用戶IP網段掃描,將用戶輸入的起始IP地址和結束IP地址轉換為int類型數據。Char * Assemble(char startehost,int cur),將當前IP地址轉化為字符串類型的IP地址。void SegmentScan(char starthost,char endhost),通過發(fā)送ICMP,檢測某個網段上主機的具體狀態(tài)。函數的兩個參數starthost、endhost分別代表用戶給定的起始IP地址和結尾IP地址。該函數內部調用了InitializeWinsock()、Resolove()、ResoloveIPAddr()、Assemble()、以及庫函數sendto()和recvfrom()。通過這些函數的調用實現了對指定網絡區(qū)間的ICMP掃描。connectScan(char startport,char endport,hostname),該函數把用戶輸入的主機名(或IP地址)寫入sin_addr.s_addr,起始端口寫入sin_port中。函數調用了InitializeWinsock()、Resolove()以及庫函數connect()、shutdown()。實現了利用connect()系統(tǒng)函數對指定主機端口區(qū)間掃描。四、細設設計4.1 實現原理4.1.1 connect()函數端口掃描的原理首先要明白TCP報文段的首部格式。現在分別介紹各個字段的具體含義。(1)源端口和目的端口 各占兩個字節(jié)。端口是運輸層與應用層的服務。(2)序號 占4個字節(jié)。TCP把傳送的數據流中的每一個字節(jié)都編上一個序號。(3)確認號 占4個字節(jié)。是指期望對方的下一個報文段的數據的第一個字節(jié)的序號。(5)數據偏移 占4位。它指出TCP報文段的數據起始處距離TCP報文段的起始距離有多遠。(6)保留。(7)緊急比特URG 當URG=1時,表明緊急指針字段有效。告訴系統(tǒng)有緊急數據,應盡快發(fā)送。(8)確認比特ACK 只有當ACK=1時確認號字段才有效。(9)推送比特PSH 將數據流盡快的推送給應用進程。而不是等到緩沖區(qū)滿后才將數據送至應用程序。(10)復位比特RST 當RST=1時,表明TCP出現錯誤,必須釋放連接,然后重新建立運輸連接。復位比特還用來拒絕一個非法報文或拒絕打開一個連接。(11)同步比特SYN 當SYN=1而ACK=0是表明這是一個請求連接報文,若同意連接則對方應該回送SYN=1,ACK=1。(12)終止比特 FIN。用于釋放一個連接。(13)檢驗和 占2個字節(jié)。設客戶進程運行在本地計算機上。它首先向其TCP發(fā)出主動打開(active open)命令,表明要與某個IP地址的某個端口建立運輸連接。首先發(fā)送SYN=1,SEQ=X的報文給目標主機的某端口,當本地計算機收到SYN=1,ACK=1的報文時,表明對方主機同意連接,這是還需發(fā)送一個ACK以確認連接。這樣,經過三次握手,一條TCP連接鏈路就建立完成。在Winsock2環(huán)境下,系統(tǒng)類庫提供了connect()接口函數。一下是函數原型:connect functionint connect( _In_ SOCKET s, _In_ const struct sockaddr *name, _In_ int namelen);s表示一個為連接的socket,name表示一個指向sockaddr的結構體指針,namelen是sockaddr中name域的比特長度。利用此函數,可以非常方便的連接一個套接字。4.1.2 ICMP網段掃描的原理因特網控制報文協(xié)議ICMP(Internet Control Message Protocol)【RFC792】。ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP報文作為IP層數據報的數據,加上數據報的首部,組成數據發(fā)送出去。ICMP報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文。ICMP報文的前4個字節(jié)是統(tǒng)一格式,共有三個字段:類型,代碼和檢驗和。對網段的主機掃描就是利用了這三個字段。根據主機發(fā)回的不同類型和代碼對主機的狀態(tài)進行判斷。ICMP的差錯報文共有5種:(1) 終點不可達 終點不可達分為:網絡不可達,主機不可達,協(xié)議不可達,端口不可達。(2) 源站抑制 當路由器或主機由于擁塞而丟棄數據包時,就向源站發(fā)生源站抑制報文。(3) 時間超時 當路由器手打生存時間為零的數據包時,除丟棄該數據報外,還向源站發(fā)送時間超過報文。(4) 參數問題(5) 改變路由(重定向)對一個網段掃描時,主要利用(1)和(3)兩種報文。ICMP的詢問報文主要有4種:(1) 回送請求和回答(Ping)(2) 時間戳和回答(常用來記錄一個主機到另一個主機的延遲)(3) 掩碼請求和回答(4) 路由詢問和回答同樣,主要利用(1)和(2)兩種報文。Winsock2提供sendto()和recvfrom()兩個函數分別來發(fā)送IP層數據報。函數原型分別為:sendto functionint sendto( _In_ SOCKET s, _In_ const char *buf, _In_ int len, _In_ int flags, _In_ const struct sockaddr *to, _In_ int tolen);recvfrom functionint recvfrom( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags, _Out_ struct sockaddr *from, _Inout_opt_ int *fromlen);結合原始套接字可以很方便做到將一個ICMP數據包封裝到IP數據包中,以及從一個IP數據報中解析出包含ICMP報文。下面對原始套接字做下簡單的介紹。原始套接字提供普通的TCP和UDP套接字所不提供的一下3個功能。v 有了原始套接字,進程可以讀寫ICMP和IGMP等分組。舉例來說ping程序就是使用原始套接字收發(fā)ICMP分組,網段掃描也是基于這個原理。v 有了原始套接字,進程可以讀寫內核不處理其協(xié)議字段的IPv4數據包。v 有了原始套接字,進程還可以使用IP_HDRINCL套接字選項自行構造IPv4首部。這一點是非常強大的。在利用Winsock編寫原始套接字時要注意程序應該取得管理員權限,因為大多數操作系統(tǒng)對原始套接字的創(chuàng)建有較為嚴格的限制。如果沒有取得管理員權限,那么在創(chuàng)建原始套接字的時候會報出10013-Permission denied.的錯誤,從而無法創(chuàng)建套接字。4.2 函數實現4.2.1 初始化winsock動態(tài)鏈接庫void InitializeWinsock()int status;WSADATA wsa;if (status=WSAStartup(MAKEWORD(2,2),&wsa)!=0)printf(Failed to WSAStartup(): %d.n,WSAGetLastError();exit(EXIT_FAILURE);函數調用Winsock2提供的WSAStartup()函數,初始化動態(tài)鏈接庫。4.2.2 初始化ICMP首部void InitIcmpHeader(ICMP_HDR* icmp_hdr)char buffsizeof(ICMP_HDR) + 32; /ICMP報文類型,類型為8,代碼為0icmp_hdr-icmp_type = ICMP_ECHO_REQUEST_TYPE; / 請求回顯icmp_hdr-icmp_code = ICMP_ECHO_REQUEST_CODE;icmp_hdr-icmp_id = (USHORT)GetCurrentProcessId();icmp_hdr-icmp_checksum = 0;icmp_hdr-icmp_sequence = 0;icmp_hdr-icmp_timestamp= GetTickCount();/往ICMP頭部填充信息memset(&buffsizeof(ICMP_HDR), E, 32);函數為ICMP報文首部中各個字段賦值,達到初始化的目的。其中比較重要的語句有icmp_hdr-icmp_type = ICMP_ECHO_REQUEST_TYPE; / 請求回顯icmp_hdr-icmp_code = ICMP_ECHO_REQUEST_CODE;這樣賦值后,就把ICMP報文設置成ICMP詢問報文,回送請求和回答。4.2.3地址解析void Resolove(char hostname)if(isdigit(hostname0)/判斷主機名是否為數字 /printf(執(zhí)行inet_addr().n);dest.sin_addr.s_addr = inet_addr(hostname); /將主機地址寫入s_addr/printf(%dn,WSAGetLastError(); else if( (host=gethostbyname(hostname) != 0)/判斷所給主機名是否與host中的一致/printf(執(zhí)行gethostbyname().n);strncpy(char *)&dest.sin_addr , (char *)host-h_addr_list0 , sizeof dest.sin_addr);/printf(完成。n);elseprintf(解析主機失敗。n);exit(EXIT_FAILURE);根據用戶輸入地址字符串轉化成相應的地址字段,寫入dest.sin_addr中。如果用戶輸入的點分十進制。則就會調用相應的inet_addr()函數,否則調用gethostbyname(),在寫入地址字段。4.2.4 計算檢驗和unsigned short checksum(unsigned short *buffer, int size) unsigned long cksum=0;while (size 1) cksum += *buffer+;size -= sizeof(USHORT);if (size) cksum += *(UCHAR*)buffer;cksum = (cksum 16) + (cksum & 0xffff);cksum += (cksum 16);return (USHORT)(cksum);根據TCP/IP協(xié)議,IP數據報在傳輸過程前必須計算檢驗和,對收到的數據也要計算檢驗和。該函數實現了首部的檢驗和計算。4.2.5 網段掃描主要語句如下:for(i = startport ; i= endport ; i+)sock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP); /創(chuàng)建一個Socketif(sock=INVALID_SOCKET) printf(Create socket failed: %dn,WSAGetLastError(); exit(EXIT_FAILURE); /主機字節(jié)序轉換為網絡字節(jié)序dest.sin_port = htons(i);/用此Socket連接目的主機,核心代碼status = connect(sock , (struct sockaddr *)&dest , sizeof dest);if(status = SOCKET_ERROR) /連接失敗switch(WSAGetLastError()case 10060:printf(%st%dtERRORttConnection timed outn , hostname , i );break;case 10061:printf(%st%dtERRORttConnection refusedn , hostname , i );break;default:printf(%st%dtERRORtCode:n,WSAGetLastError();break;/fflush(stdout);else /連接成功printf(%st%dtPORT OPENn , hostname ,i);/關閉收發(fā)服務if( shutdown( sock ,SD_BOTH ) = SOCKET_ERROR )printf(Failed to shutdown the connect: %dn,WSAGetLastError();exit(EXIT_FAILURE); closesocket(sock); /關閉Socket,回收資源/WSACleanup();利用一個for(;)循環(huán),對確定的起始和終止IP地址的內的所有可能存在的主機發(fā)送,請求回顯的ICMP報文,并對返回的ICMP報文進行分析,提取出type和code字段,根據ICMP報文格式所定義的數值,對各個主機判斷,并打印信息。4.2.6 端口掃描for(i = startport ; i= endport ; i+)sock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP); /創(chuàng)建一個Socketif(sock=INVALID_SOCKET) printf(Create socket failed: %dn,WSAGetLastError(); exit(EXIT_FAILURE); /主機字節(jié)序轉換為網絡字節(jié)序dest.sin_port = htons(i);/用此Socket連接目的主機,核心代碼status = connect(sock , (struct sockaddr *)&dest , sizeof dest);if(status = SOCKET_ERROR) /連接失敗switch(WSAGetLastError()case 10060:printf(%st%dtERRORttConnection timed outn , hostname , i );break;case 10061:printf(%st%dtERRORttConnection refusedn , hostname , i );break;default:printf(%st%dtERRORtCode:n,WSAGetLastError();break;/fflush(stdout);else /連接成功printf(%st%dtPORT OPENn , hostname ,i);/關閉收發(fā)服務if( shutdown( sock ,SD_BOTH ) = SOCKET_ERROR )printf(Failed to shutdown the connect: %dn,WSAGetLastError();exit(EXIT_FAILURE); closesocket(sock); /關閉Socket,回收資源/WSACleanup();函數同樣利用一個for(;)循環(huán)對給定的主機的端口區(qū)間掃描。調用WSAGetLastError()庫函數判斷端口是否連接,根據相應的ERROR CODE判斷端口的具體情況。以下是主要的ERROR CODE:WSAETIMEDOUT10060Connection timed out.A connection attempt failed because the connected party did not properly respond after a period of time, or the established connection failed because the connected host has failed to respond.WSAECONNREFUSED10061Connection refused.No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign hostthat is, one with no server application running.WSAELOOP10062Cannot translate name.Cannot translate a name.摘自:/en-us/library/windows/desktop/ms740668(v=vs.85).aspx5、 總結與體會5.1 程序調試與運行程序主界面IP網段掃描端口掃描5.2 體會通過本次的課程設計加深了本人對TCP/IP協(xié)議特別是網絡層協(xié)議,IP首部格式,ICMP首部格式的理解。對Windows網絡編程也有初步的了解,掌握了基本的套接字程序的編寫。理解原始套接字的運行機制,加深一些協(xié)議字段的理解。編寫過程遇到的困難也不少,但是依靠鉆研精神,逐步對網絡編程步驟產生了整體的印象,這對以后的學習也是一筆寶貴的財富。以前學習總是停留在紙面上理論上,雖然貌似一些概念是清楚了,但是這樣的記憶是不長久的。只有通過理論聯(lián)系實際,編寫一些代碼,實現一些功能,才能加強記憶,學以致用。6、 參考文獻6.1 參考書目1 W.Richard Stevens,Bill Fenner,Andrew M.Rudoff. Unix Network Programming Volume1:The Sockets Networking API,Third Edition. Pearson Education,20102 Wnthony Jones,Jim Ohlund. Network Programming for Microsoft Windows,Second Edition.Microsoft Press,20023 謝希仁.計算機網絡(第四版).電子工業(yè)出版社,20034 周鳴爭,嚴楠,丁剛等.計算機網絡教程.清華大學出版社,20116.2 引用網址/en-us/library/windows/desktop/ms741416(v=vs.85).aspx/en-us/library/windows/desktop/ms740668(v=vs.85).aspx/rfc.html/doc/rfc792//view/700108.htm/view/30564.htm/zh-cn/RFC源代碼Scanner,h/IP首部typedef struct ip_hdrunsigned char iphVerLen; / 版本號和頭長度(各占4位)unsigned char ipTOS; / 服務類型 unsigned short ipLength; / 封包總長度,即整個IP報的長度unsigned short ipID; / 封包標識,惟一標識發(fā)送的每一個數據報unsigned short ipFlags; / 標志unsigned char ipTTL; / 生存時間,就是TTLunsigned char ipProtocol; / 協(xié)議,可能是TCP、UDP、ICMP等unsigned short ipChecksum; / 校驗和unsigned long ipSource; / 源IP地址unsigned long ipDestination; / 目標IP地址IP_HDR,*PIP_HDR;/ICMP首部typedef struct icmp_hdrunsigned char icmp_type; /類型unsigned char icmp_code; /代碼unsigned short icmp_checksum; /檢驗和unsigned short icmp_id; /唯一請求ID,通常使用進程PIDunsigned short icmp_sequence; /序列號unsigned long icmp_timestamp; /時間戳 ICMP_HDR,*PICMP_HDR;Scanner.c#include #include #include #include #include #pragma comment(lib,ws2_32.lib);#include Scanner.h#define ICMP_ECHO_REQUEST_TYPE 8 /ICMP請求類型#define ICMP_ECHO_REQUEST_CODE 0 /ICMP請求代碼#define ICMP_ECHO_REPLY_TYPE 0#define ICMP_ECHO_REPLY_CODE 0#define ICMP_MINIMUM_HEADER 8struct hostent *host; /記錄主機信息struct sockaddr_in dest; /存儲目的主機信息struct sockaddr_in from; /用于回顯/注釋:常見的ICMP報文類型/ 類型 代碼 描述/ 0 0 回顯回答/ 3 1 主機不可達/ 3 3 端口不可達/ 8 0 請求回顯/初始化winsock動態(tài)鏈接庫void InitializeWinsock()int status;WSADATA wsa;if (status=WSAStartup(MAKEWORD(2,2),&wsa)!=0)printf(Failed to WSAStartup(): %d.n,WSAGetLastError();exit(EXIT_FAILURE);/初始化ICMP首部void InitIcmpHeader(ICMP_HDR* icmp_hdr)char buffsizeof(ICMP_HDR) + 32; /ICMP報文類型,類型為8,代碼為0icmp_hdr-icmp_type = ICMP_ECHO_REQUEST_TYPE; / 請求回顯icmp_hdr-icmp_code = ICMP_ECHO_REQUEST_CODE;icmp_hdr-icmp_id = (USHORT)GetCurrentProcessId();icmp_hdr-icmp_checksum = 0;icmp_hdr-icmp_sequence = 0;icmp_hdr-icmp_timestamp= GetTickCount();/往ICMP頭部填充信息memset(&buffsizeof(ICMP_HDR), E, 32);/地址解析,解析IP地址或域名void Resolove(char hostname)if(isdigit(hostname0)/判斷主機名是否為數字 /printf(執(zhí)行inet_addr().n);dest.sin_addr.s_addr = inet_addr(hostname); /將主機地址寫入s_addr/printf(%dn,WSAGetLastError(); else if( (host=gethostbyname(hostname) != 0)/判斷所給主機名是否與host中的一致/printf(執(zhí)行gethostbyname().n);strncpy(char *)&dest.sin_addr , (char *)host-h_addr_list0 , sizeof dest.sin_addr);/printf(完成。n);elseprintf(解析主機失敗。n);exit(EXIT_FAILURE);/提取目的地址低三位,用于網段掃描void ResoloveIPAddr(char starthost,char endhost,int *start,int *end)int cd1=0;int cd2=0;int ci1=0;int ci2=0;char c14,c24;while (*starthost!=0&*endhost!=0)if (*starthost!=0)if (cd13)if(*starthost=.)+cd1; elsec1ci1=*starthost;+ci1;+starthost; if(*endhost!=0)if (cd23)if(*endhost=.)+cd2; elsec2ci2=*endhost;+ci2;+endhost;c13=c23=0;*start=atoi(c1);*end=atoi(c2);/將當前IP低三位與網段號組裝,用于發(fā)送ICMP的目的主機IP地址char* Assemble(char starthost,int cur)int i=0,cd=0;char appendix4,*tmp=starthost;itoa(cur,appendix,10);/printf(%sn,appendix);while (cd 1) cksum += *buffer+;size -= sizeof(USHORT);if (size) cksum += *(UCHAR*)buffer;cksum = (cksum 16) + (cksum & 0xffff);cksum += (cksum 16);return (USHORT)(cksum);/利用TCP connect()方法對目的主機的指定端口范圍掃描void ConnectScan(int startport,int endport,char hostname)int i,status;SOCKET sock=INVALID_SOCKET;strncpy(char *)&dest,s

溫馨提示

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

評論

0/150

提交評論