![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--解析IP數(shù)據(jù)包_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/11/c139e73c-2f40-4338-beb4-4de9efc85901/c139e73c-2f40-4338-beb4-4de9efc859011.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--解析IP數(shù)據(jù)包_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/11/c139e73c-2f40-4338-beb4-4de9efc85901/c139e73c-2f40-4338-beb4-4de9efc859012.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--解析IP數(shù)據(jù)包_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/11/c139e73c-2f40-4338-beb4-4de9efc85901/c139e73c-2f40-4338-beb4-4de9efc859013.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--解析IP數(shù)據(jù)包_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/11/c139e73c-2f40-4338-beb4-4de9efc85901/c139e73c-2f40-4338-beb4-4de9efc859014.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--解析IP數(shù)據(jù)包_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/11/c139e73c-2f40-4338-beb4-4de9efc85901/c139e73c-2f40-4338-beb4-4de9efc859015.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 沈陽(yáng)理工大學(xué)課程設(shè)計(jì)專(zhuān)用紙 No14目 錄1 課程設(shè)計(jì)目的12 課程設(shè)計(jì)要求13IP數(shù)據(jù)包的相關(guān)知識(shí)14課程設(shè)計(jì)分析35程序代碼76運(yùn)行結(jié)果與分析137參考文獻(xiàn)14沈陽(yáng)理工大學(xué)1 課程設(shè)計(jì)目的題目:解析IP數(shù)據(jù)包本章課程設(shè)計(jì)的目的就是設(shè)計(jì)一個(gè)解析IP數(shù)據(jù)包的程序,并根據(jù)這個(gè)程序,說(shuō)明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問(wèn)題,從而對(duì)IP層的工作原理有更好的理解和認(rèn)識(shí)。2 課程設(shè)計(jì)要求本設(shè)計(jì)的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫(xiě)入日志文件。程序的具體要求如下:1)以命令行形式運(yùn)行:ipparse logfile,其中ipparse是程序名, 而logfil
2、e則代表記錄結(jié)果的日志文件 2)在標(biāo)準(zhǔn)輸出和日志文件中寫(xiě)入捕獲的IP包的版本、頭長(zhǎng)度、服務(wù)類(lèi)型、數(shù)據(jù)包總長(zhǎng)度、數(shù)據(jù)包標(biāo)識(shí)、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類(lèi)型、頭校驗(yàn)和、源IP地址和目的IP地址等內(nèi)容3)當(dāng)程序接收到鍵盤(pán)輸入Ctrl+C時(shí)退出3 IP數(shù)據(jù)包相關(guān)知識(shí)互聯(lián)網(wǎng)絡(luò)層是TCP/IP協(xié)議參考模型中的關(guān)鍵部分。IP協(xié)議把傳輸層送來(lái)的消息組裝成IP數(shù)據(jù)包,并把IP數(shù)據(jù)包傳遞給數(shù)據(jù)鏈路層。IP協(xié)議在TCP/IP協(xié)議族中處于核心地位,IP協(xié)議制定了統(tǒng)一的IP數(shù)據(jù)包格式,以消除個(gè)通信子網(wǎng)間的差異,從而為信息發(fā)送方和接收方提供了透明的傳輸通道編制本程序前,首先要對(duì)IP包的格式有一定的了解。圖3
3、-1給出了IP協(xié)議的數(shù)據(jù)包格式版本報(bào)頭標(biāo)長(zhǎng)服務(wù)類(lèi)型總長(zhǎng)度標(biāo)識(shí)標(biāo)致片偏移生存時(shí)間協(xié)議頭校驗(yàn)和源IP地址目的IP地址選項(xiàng)填充域數(shù)據(jù)部分圖3-1IP數(shù)據(jù)包格式IP數(shù)據(jù)包的第一個(gè)字段是版本字段,其長(zhǎng)度為4位,表示所使用的IP協(xié)議的版本。本程序主要針對(duì)版本值為4的IP數(shù)據(jù)包的解析。 報(bào)頭標(biāo)長(zhǎng)(IHL)字段為4位,它定義了以4B為一個(gè)單位的IP包的報(bào)頭長(zhǎng)度。報(bào)頭中除了選項(xiàng)字段和填充域字段外,其他各字段是定長(zhǎng)的。因此,IP數(shù)據(jù)包的頭長(zhǎng)度在2040B之間,是可變的。 服務(wù)類(lèi)型字段共8位,用于指示路由器如何處理該數(shù)據(jù)包。該字段長(zhǎng)度由4位服務(wù)類(lèi)型(TOS)子域和3位優(yōu)先級(jí)(precedence)子域組成,1位為保
4、留位。該字段結(jié)構(gòu)如圖3-2所示。 b7 b6 b5 b4 b3 b2 b1 b0優(yōu)先級(jí)DTRC0圖3-2 服務(wù)類(lèi)型字段結(jié)構(gòu) 優(yōu)先級(jí)共有8種,優(yōu)先級(jí)越高表明數(shù)據(jù)包越重要。表3-3列出了各種優(yōu)先級(jí)所代表的意義。位數(shù)(b7 b6 b5) 意義111網(wǎng)絡(luò)控制110網(wǎng)絡(luò)間控制101重要(CRITIC/ECP)100即時(shí),優(yōu)先011即時(shí)010立刻001優(yōu)先000普通 表3-3 優(yōu)先級(jí)子域的說(shuō)明在4位服務(wù)類(lèi)型子域中,b4、b3、b2、b1分別表示D(延遲)、T(吞吐量)、R(可靠性)、與C(成本)。表3-4列出了服務(wù)類(lèi)型子域的構(gòu)成位數(shù)(b4 b3 b2 b1) 意義1111安全及最高1000延遲最小0100
5、吞吐量最大0010可靠性最大0001金錢(qián)成本最小0000普通服務(wù)表3-4 服務(wù)類(lèi)型子域 總長(zhǎng)度字段為2B,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長(zhǎng)度。IP數(shù)據(jù)包的最大長(zhǎng)度為216=65535B。 標(biāo)示字段長(zhǎng)度為16位,用于識(shí)別IP數(shù)據(jù)包的編號(hào)。每批數(shù)據(jù)都要有一個(gè)標(biāo)識(shí)值,用于讓目的主機(jī)判斷新來(lái)的數(shù)據(jù)屬于哪一組。 報(bào)頭中的標(biāo)致字段如圖3-5所示。標(biāo)志字段共3位,最高位是0.禁止分片標(biāo)志DF(do not fragment)字段的值若為1,表示不能對(duì)數(shù)據(jù)包分片;若DF值為0,則表明可以分片。分片標(biāo)志MF(more fragment)的值為1,表示接收到的不是最后一個(gè)分片;若MF值為0,表示接收到的是最后一
6、個(gè)分片。0DFMF 圖3-5 標(biāo)致字段的結(jié)構(gòu) 片偏移字段共13位,說(shuō)明分片在整個(gè)數(shù)據(jù)包中的相對(duì)位置。片偏移值是以8B為單位的計(jì)數(shù)的,因此選擇的分片長(zhǎng)度應(yīng)該是8B的整數(shù)倍。 生存時(shí)間(TTL)字段為8位,用來(lái)設(shè)置數(shù)據(jù)包在互聯(lián)網(wǎng)絡(luò)的傳輸過(guò)程的壽命,通常是用一個(gè)數(shù)據(jù)包可以經(jīng)過(guò)的最多的路由器跳步數(shù)來(lái)限定的。 協(xié)議字段為8位,表示使用此IP數(shù)據(jù)包的高層協(xié)議類(lèi)型,常用的協(xié)議號(hào)如表3-6所示。序號(hào) 協(xié)議名稱(chēng) 序號(hào)協(xié)議名稱(chēng)1ICMP17UDP2IGMP41IPv64IP inIP46RSVP6TCP89OSPF8EGP表3-6 典型的協(xié)議號(hào)頭校驗(yàn)和字段為16位,用于存放檢查報(bào)頭錯(cuò)誤的校驗(yàn)碼。校驗(yàn)的范圍是整個(gè)I
7、P包的報(bào)頭。校驗(yàn)和按如下方法計(jì)算:1) 將頭校驗(yàn)和的字段置為0。2) 將報(bào)頭部分的所有數(shù)據(jù)以16位為單位進(jìn)行累加,累加方式是求異或。3) 將累加的結(jié)果取反碼,就是頭校驗(yàn)和。 當(dāng)收到一個(gè)IP包時(shí),要檢查報(bào)頭是出錯(cuò),就把報(bào)頭中的所有數(shù)據(jù)以16位為單位進(jìn)行累加,若累加的結(jié)果為0,則報(bào)頭沒(méi)有出錯(cuò)。 地址字段包括源地址和目的地址。源地址和目的地址的長(zhǎng)度都是32位,分別表示發(fā)送數(shù)據(jù)包的源主機(jī)和目的主機(jī)的IP地址。 選項(xiàng)字段的長(zhǎng)度范圍是040B,主要用于控制和測(cè)試。在使用選項(xiàng)字段的過(guò)程中,有可能出現(xiàn)報(bào)頭部分的長(zhǎng)度不是32位的整數(shù)倍的情況。如果出現(xiàn)這種情況,就需要通過(guò)填充位來(lái)湊齊。4 課程設(shè)計(jì)分析4.1網(wǎng)卡設(shè)
8、置 為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必須對(duì)網(wǎng)卡進(jìn)行編程,在這里使用套接字(socket)進(jìn)行編程。但是,在通常情況下,網(wǎng)絡(luò)通信的套接字程序只能響應(yīng)與自己硬件地址相匹配的數(shù)據(jù)包或是以廣播形式發(fā)出的數(shù)據(jù)包。對(duì)于其他形式的數(shù)據(jù)包,如已到達(dá)網(wǎng)絡(luò)接口,但卻不是發(fā)送到此地址的數(shù)據(jù)包,網(wǎng)絡(luò)接口在投遞地址并非自身地址之后將不引起響應(yīng),也就是說(shuō)應(yīng)用程序無(wú)法收取與自己無(wú)關(guān)的數(shù)據(jù)包。我們要想獲取網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就是需要將網(wǎng)卡設(shè)置為混雜模式。 本程序主要由三部分構(gòu)成:初始化原始套接字,反復(fù)監(jiān)聽(tīng)捕獲數(shù)據(jù)包和解析數(shù)據(jù)包。下面就結(jié)合核心代碼對(duì)程序的具體實(shí)現(xiàn)進(jìn)行解析,同時(shí)使程序流程更加清晰,去掉了錯(cuò)誤檢查等保護(hù)性代碼。4.
9、2使用原始套接字 套接字分為三種,即流套接字(Stream socket)、數(shù)據(jù)報(bào)套接字(Datagram Socket)和原始套接字(Raw Socket)。要進(jìn)行IP層數(shù)據(jù)包的接收和發(fā)送,應(yīng)使用原始套接字。創(chuàng)建原始套接字的代碼如下: SOCKET sock: sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO-IP,NULL,0,WSA-FLAG-OVERAPPED);在WSASoccket函數(shù)中,第一個(gè)參數(shù)指定通信發(fā)生的區(qū)字段,AF_INET是指針對(duì)Interest的,允許在遠(yuǎn)程主機(jī)之間的通信。第二個(gè)參數(shù)是套接字的類(lèi)型,在AF_INET地址族下,有SOCK_S
10、TREAM,SOCK_DGRAM,SOCK_RAM三種套接字類(lèi)型。第三個(gè)參數(shù)依賴(lài)于第二個(gè)參數(shù),用于指定套接字所用的特定協(xié)議,這里使用IP協(xié)議。第四個(gè)參數(shù)為WSAPROTOCOL_INFO位,該位可以置空。第五個(gè)參數(shù)保留,永遠(yuǎn)置0。第六個(gè)參數(shù)是標(biāo)志位,WSA-FLAG-OVERAPPED表明可以使用發(fā)送接收超時(shí)設(shè)置,本課程設(shè)計(jì)也可以把這個(gè)標(biāo)志位設(shè)置為NULL,因?yàn)楸驹O(shè)計(jì)不用考慮超時(shí)情況。 創(chuàng)建原始套接后,IP頭就會(huì)包含在接收數(shù)據(jù)包中。然后,可以設(shè)置IP頭操作選項(xiàng),調(diào)用setsockopt函數(shù)。其中flag設(shè)置為true,并設(shè)定IP-HDRINCL選項(xiàng),表明用戶(hù)可以親自對(duì)IP頭進(jìn)行處理。 最后使用
11、bind()函數(shù)將socket綁定到本地網(wǎng)卡上。 綁定網(wǎng)卡后,需用WSAIoctl()函數(shù)把網(wǎng)卡設(shè)置為混雜模式,使網(wǎng)卡能夠接收所有的網(wǎng)絡(luò)數(shù)據(jù)。如果接收的數(shù)據(jù)包中的協(xié)議類(lèi)型和定義的原始套接字匹配,那么接收的數(shù)據(jù)就拷貝到套接字中,因此,網(wǎng)卡就可以接收所有經(jīng)過(guò)的IP包。4.3接收IP數(shù)據(jù)包 在程序中可使用recv()函數(shù)接收經(jīng)過(guò)的IP包。該函數(shù)有四個(gè)參數(shù),第一個(gè)參數(shù)接收操作所用的套接字描述符;第二個(gè)參數(shù)接收緩沖區(qū)的地址;第三個(gè)參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個(gè)參數(shù)是一個(gè)附加標(biāo)志,如果對(duì)所發(fā)送的數(shù)據(jù)沒(méi)特殊要求,直接設(shè)為0。因?yàn)镮P數(shù)據(jù)包的最大長(zhǎng)度是65535B,因此緩沖區(qū)的大小不能小
12、于65535B。設(shè)置緩沖區(qū)后,可利用循環(huán)來(lái)反復(fù)監(jiān)聽(tīng)接收IP包,用recv()函數(shù)實(shí)現(xiàn)接收功能。4.4定義IP頭部的數(shù)據(jù)結(jié)構(gòu) 程序需要定義一個(gè)數(shù)據(jù)結(jié)構(gòu)表示IP頭部。其代碼如下: typedef struct _IP_HEADER /定義IP頭 union BYTE Version; /版本(前4位) BYTE HdrLen; /IHL(后4位),報(bào)頭標(biāo)長(zhǎng) ; BYTE ServiceType; /服務(wù)類(lèi)型 WORD TotalLen; /總長(zhǎng) WORD ID; /標(biāo)識(shí) union WORD Flags; /標(biāo)志(前3位) WORD FragOff; /分段偏移(后13位) ; BYTE Time
13、ToLive; /生命期 BYTE Protocol; /協(xié)議 WORD HdrChksum; /頭校驗(yàn)和 DWORD SrcAddr; /源地址 DWORD DstAddr; /目的地址 BYTE Options; /選項(xiàng) IP_HEADER; 這里我們只考慮IP頭部結(jié)構(gòu),不考慮數(shù)據(jù)部分。在捕獲IP數(shù)據(jù)包后,可以通過(guò)指針把緩沖區(qū)的內(nèi)容強(qiáng)制轉(zhuǎn)化為IP_HEADER數(shù)據(jù)結(jié)構(gòu)。 IP_HEADER ip=*(IP_HEADER *)buffer;4.5IP包的解析解析IP包的字段有兩種策略。針對(duì)長(zhǎng)度為8位、16位和32位的字段(或子字段)時(shí),可以利用IP-HEADER的成員直接獲取。要解析長(zhǎng)度不是
14、8位倍數(shù)的字段(或子字段)時(shí),可以利用C語(yǔ)言中的移位以人、及與、或操作完成。下面給出了通過(guò)IP_HEADER解析IP頭各個(gè)字段的代碼。/*獲取版本字段*/ip.Version>>4;/*獲取頭部長(zhǎng)度字段*/ip.HdrLen & 0x0f;/*獲取服務(wù)類(lèi)型字段中的優(yōu)先級(jí)子域*/ip.ServiceType>>5;/*獲取服務(wù)類(lèi)型字段中的TOS子域*/(ip.ServiceType>>1)&0x0f;/*獲取總長(zhǎng)度字段*/ip.TotalLen;/*獲取標(biāo)識(shí)字段*/ip.ID;/*獲取標(biāo)識(shí)字段*/DF=(ip.Flags>>14)&
15、amp;0x01;MF=(ip.Flags>>13)&0x01;/*獲取分段偏移字段*/ ip.FragOff &0x1fff;/*獲取生存時(shí)間字段*/ip.TimeToLive;/*獲取協(xié)議字段*/*獲取頭校驗(yàn)和字段*/ip.HdrChksum;/*解析源IP地址字段*/inet_ntoa(*(in_add*)&ip.SrcAddr;/*解析目的地址字段*/inet_ntoa(*(in_add*)&ip.DstAddr;4.6協(xié)議的定義(包含相應(yīng)的頭文件#include #include): DWORD dwIoControlCode=S
16、IO_RCVALL, /*接收所有的IP包*/dwProtocol=IPPROTO_IP; /*協(xié)議類(lèi)型為IP*/4.7捕獲處理1.加載 Winsock;2.創(chuàng)建一個(gè)接收原始IP包的socket連接;3.綁定到一個(gè)接口;4.進(jìn)行WSAIoctl設(shè)置,接收所有的IP數(shù)據(jù)包。代碼如下:if (WSAIoctl(s, dwIoControlCode, &optval, sizeof(optval),NULL, 0, &dwBytesRet, NULL, NULL) = SOCKET_ERROR)5.接著設(shè)定一個(gè)線程進(jìn)行捕獲:(1)創(chuàng)建一個(gè)接收IP包的鏈表頭;(2)設(shè)置一個(gè)標(biāo)識(shí),為真,
17、則不斷進(jìn)行IP包的捕獲;(3)建立一個(gè)新的結(jié)點(diǎn),將捕獲的數(shù)據(jù)包加入到該結(jié)點(diǎn);(4)如果鏈表的長(zhǎng)度達(dá)到指定的長(zhǎng)度,創(chuàng)建一個(gè)線程對(duì)該鏈表的IP包進(jìn)行解析;再設(shè)置一個(gè)在IP數(shù)據(jù)包鏈表不足給定的長(zhǎng)度,而又中止IP捕獲時(shí),對(duì)鏈表的處理;(5)為下一個(gè)IP包鏈表創(chuàng)建一個(gè)鏈表頭。6.建立一個(gè)進(jìn)行IP包解析并顯示的線程,進(jìn)行解析IP數(shù)據(jù)包,然后顯示IP數(shù)據(jù)包。4.8流程圖開(kāi)始構(gòu)造程序運(yùn)行環(huán)境,生成輸出文件創(chuàng)造原始套接字,并初始化捕獲IP包解析IP包輸出IP包信息結(jié)束YNCtrl+C圖4-1程序流程圖5 程序代碼#include "winsock2.h"#include "ws2t
18、cpip.h"#include "iostream.h"#include "stdio.h"#pragma comment(lib,"ws2_32.lib")/*定義IP頭部數(shù)據(jù)結(jié)構(gòu)*/typedef struct _IP_HEADER union BYTE Version; /版本(前四位) BYTE HdrLen; /報(bào)頭標(biāo)長(zhǎng)(后四位),IP頭長(zhǎng)度 ; BYTE ServiceType; /服務(wù)類(lèi)型 WORD TotalLen; /總長(zhǎng)度 WORD ID; /標(biāo)志 union WORD Flags; WORD FragO
19、ff; ; BYTE TimeToLive; /生存時(shí)間 BYTE Protocol; /協(xié)議 WORD HdrChksum; /首部檢驗(yàn)和 DWORD SrcAddr; /源地址 DWORD DstAddr; /目的地址 BYTE Options; IP_HEADER;/*逐位解析IP頭中的信息,獲取版本號(hào)*/void getVersion(BYTE b, BYTE & version)version=b>>4; void getIHL(BYTE b,BYTE & result)result=(b&0x0f)*4; /*解析服務(wù)類(lèi)型*/char * par
20、seServiceType_getProcedence(BYTE b)switch(b>>5) case 7: return "Network Control" break;case 6:return "Internet work Control" break;case 5:return "CRITIC/ECP" break;case 4:return "Flash Override" break;case 3:return "Flsah" break;case 2:return &
21、quot;Immediate" break;case 1:return "Priority" break;case 0:return "Routine" break;default:return "Unknow"break;char * parseServiceType_getTOS(BYTE b)b=(b>>1)&0x0f; switch(b) case 0:return "Normal service" break;case 1:return "Minimize mone
22、tary cost" break;case 2:return "Maximize reliability" break;case 4:return "Maximize throughput" break;case 8:return "Minimize delay" break;case 15:return "Maximize security" break; default:return "Unknow" /* 獲取禁止分片標(biāo)志和分片標(biāo)志 */void getFlags(WORD w,
23、BYTE & DF,BYTE & MF) DF=(w>>14)&0x01;MF=(w>>13)&0x01;/* 獲取分片偏移量 */void getFragOff(WORD w,WORD & fragOff) fragOff=w&0x1fff;/*獲取協(xié)議*/char * getProtocol(BYTE Protocol) switch(Protocol) case 1:return "ICMP" case 2:return "IGMP"case 4: return "I
24、P in IP"case 6:return "TCP"case 8:return "EGP"case 17:return "UDP" case 41:return "IPv6"case 46:return "RSVP"case 89:return "OSPF"default:return "UNKNOW"/* 解析IP數(shù)據(jù)包 */void ipparse(FILE* file,char* buffer) IP_HEADER ip=*(IP_HEA
25、DER*)buffer; fseek(file,0,SEEK_END); BYTE version; getVersion(ip.Version,version); fprintf(file,"版本號(hào)=%drn",version); BYTE headerLen; getIHL(ip.HdrLen,headerLen); fprintf(file,"報(bào)頭標(biāo)長(zhǎng)=%d(BYTE)rn",headerLen); fprintf(file,"服務(wù)類(lèi)型=%s,%srn", parseServiceType_getProcedence(ip.Se
26、rviceType), parseServiceType_getTOS(ip.ServiceType); fprintf(file,"總長(zhǎng)度=%d(BYTE)rn",ip.TotalLen); fprintf(file,"標(biāo)識(shí)=%drn",ip.ID); BYTE DF,MF; getFlags(ip.Flags,DF,MF); fprintf(file,"標(biāo)志 DF=%d,MF=%drn",DF,MF); WORD fragOff; getFragOff(ip.FragOff,fragOff); fprintf(file,"
27、;分段偏移值=%drn",fragOff); fprintf(file,"生存期=%d(hopes)rn",ip.TimeToLive); fprintf(file,"協(xié)議=%srn",getProtocol(ip.Protocol); fprintf(file,"頭校驗(yàn)和=0x%0xrn",ip.HdrChksum); fprintf(file,"源IP地址=%srn",inet_ntoa(*(in_addr*)&ip.SrcAddr); fprintf(file,"目的IP地址=%s
28、rn",inet_ntoa(*(in_addr*)&ip.DstAddr); fprintf(file,"-rn");/主程序開(kāi)始main()int nRetCode = 0;FILE * file;if(file=fopen("logfile.txt","wb+")=NULL)printf("fail to open file %s");return -1;WSADATA wsData;/* 啟動(dòng)2.2版本的Socket,并將Socket版本信息保存到wsData中 */WSAStartup(M
29、AKEWORD(2,2),&wsData);SOCKET sock;/* 創(chuàng)建原始套接字 */sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);BOOL flag=TRUE;/* 設(shè)置IP頭操作選項(xiàng) */setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag);char hostName128;/* 獲取本地主機(jī)名 */gethostname(hostName,100);hostent * pHostIP;/* 根據(jù)主機(jī)名獲取主機(jī)信息 */pHostIP=gethostbyname(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年特種功能焊接材料合作協(xié)議書(shū)
- 2025年P(guān)P改性新材料合作協(xié)議書(shū)
- 2025年玻璃纖維仿形織物合作協(xié)議書(shū)
- 2025年水質(zhì)監(jiān)測(cè)系統(tǒng)合作協(xié)議書(shū)
- 八年級(jí)英語(yǔ)下冊(cè) Unit 3 單元綜合測(cè)試卷(人教版 2025年春)
- 2024-2025學(xué)年河北省石家莊市高新區(qū)四年級(jí)(上)期末數(shù)學(xué)試卷
- 三年級(jí)作文詩(shī)歌:乒乓球賽
- 2025年個(gè)體工商戶(hù)雇傭合同(2篇)
- 2025年人才培訓(xùn)勞動(dòng)合同樣本(2篇)
- 2025年中學(xué)高三年級(jí)下學(xué)期班級(jí)工作總結(jié)(三篇)
- 2025年初級(jí)社會(huì)工作者綜合能力全國(guó)考試題庫(kù)(含答案)
- 兩淮礦區(qū)地面定向多分支水平井鉆進(jìn)作業(yè)技術(shù)規(guī)程
- vc約起來(lái)史上最全180個(gè)知名投資人聯(lián)系方式
- 中國(guó)酒文化英文介紹
- 社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告風(fēng)險(xiǎn)評(píng)估參考
- GB/T 14343-2008化學(xué)纖維長(zhǎng)絲線密度試驗(yàn)方法
- 制冷操作證培訓(xùn)教材-制冷與空調(diào)設(shè)備運(yùn)行操作作業(yè)培課件
- 市級(jí)臨床重點(diǎn)專(zhuān)科申報(bào)書(shū)
- 中交與機(jī)械竣工區(qū)別
- 《醫(yī)院重點(diǎn)專(zhuān)科建設(shè)專(zhuān)項(xiàng)資金管理辦法》
- 第三章:王實(shí)甫與《西廂記》PPT課件(完整版)
評(píng)論
0/150
提交評(píng)論