計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第1頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第2頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第3頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第4頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機網(wǎng)絡(luò)課程設(shè)計報告姓名:學(xué)號:班級:指導(dǎo)老師:湖南科技大學(xué)計算機科學(xué)與工程學(xué)院2013年6月實驗一1. 實驗名稱:網(wǎng)絡(luò)聊天程序的設(shè)計與實現(xiàn)2. 實驗?zāi)康模和ㄟ^本實驗?zāi)軌蛄私鈙ocket通信的原理并在此基礎(chǔ)上編寫一個聊天程序了解TCP/IP的基礎(chǔ)知識,發(fā)現(xiàn)TCP與UDP勺優(yōu)缺點以及在網(wǎng)絡(luò)通信的應(yīng)用。3. 實驗原理:從通信和信息處理的角度看,運輸層向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層,同時也是用戶功能中的最低層。當(dāng)網(wǎng)絡(luò)的邊緣部分中的兩個主機使用網(wǎng)絡(luò)的兩個主機使用網(wǎng)絡(luò)的核心部分進(jìn)行端到端的通信時,只有主機的協(xié)議棧才有運輸層,而網(wǎng)絡(luò)核心部分中的路由器在轉(zhuǎn)發(fā)分組時都只用到下三層的

2、功能。從IP層來說,通信的兩端是兩個主機,IP數(shù)據(jù)報的首部明確的標(biāo)志了這兩個主機的IP地址。但是嚴(yán)格的講,兩個主機進(jìn)行通信就是兩個主機中的應(yīng)用進(jìn)程互相通信。根據(jù)應(yīng)用程序的不同需求,運輸層需要有兩種不同的運輸協(xié)議,即是面向連接的TCP和無連接的UDR在使用這兩個協(xié)議時運輸層向高層用戶屏蔽了下面的網(wǎng)絡(luò)核心的細(xì)節(jié),它使應(yīng)用進(jìn)程看見的就是好像在兩個運輸層實體間有一條端到端的邏輯通信信道,但這條邏輯通信信道對上層的表現(xiàn)卻因運輸層使用的不同協(xié)議而有很大的差別。當(dāng)運輸層采用面向連接的TCP協(xié)議時,盡管下面的網(wǎng)絡(luò)是不可靠的,但這種邏輯通信信道就相當(dāng)于一條全雙工的可靠信道。但當(dāng)運輸層采用無連接的UDPB議時,這

3、種邏輯通信信道仍然是一條不可靠信道。由于我在課程設(shè)計中采用的是UDPW議進(jìn)行通信的,這里就只簡述一下一些關(guān)于UDP的內(nèi)容,UDP在傳送數(shù)據(jù)之前不需要先建立連接。遠(yuǎn)地主機的運輸層在收到UDPM文后,不需要給出任何確認(rèn)。雖然UD%提供可靠的交付,但在某些情況下UDP是一種最有效的工作方式。為此當(dāng)我們使用UTPtH使兩個計算機中的進(jìn)程要互相通信,不僅必需知道對方的IP地址(為了找到對方的計算機),而且還要知道對方的端口號(為了找到對方計算機中的應(yīng)用進(jìn)程)。我們的計算機通信時采用客戶-服務(wù)器方式。客戶在發(fā)起通信請求時,必需先知道對方的服務(wù)器的IP地址和端口號,因此通過IP地址和端口號我們就能將兩臺主機

4、連接起來,然后通過輸入輸出流將信息發(fā)送到對方的主機上。這樣就能實現(xiàn)網(wǎng)絡(luò)的聊天程序。4.流程圖:5.實驗步驟:通過使用原理我們知道若要實現(xiàn)兩主機間的通信最重要的是獲得對方的IP地址和設(shè)置端口號,在實驗中我們假定已經(jīng)知道了要通信主機的IP地址,故在編程中主要的是套接字socke的編程步驟,在這個程序中,將兩個工程添加到一個工作區(qū)。要鏈接一個ws2_32.lib的庫文件。服務(wù)器編程步驟:1、加載數(shù)據(jù)庫,創(chuàng)建套接字(WSAStrartup()/socket();2、綁定套接字到一個IP地址和一個端口上(bind();3、將套接字設(shè)置為監(jiān)聽模式等待請求(listen。);4、請求到來后,接受鏈接請求,返

5、回一個新的對應(yīng)于此次連接的套接字(accept。);5、用返回的套接字和客戶端進(jìn)行通信(send()/rec();6、返回,等待另一個請求;7、關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup().其次是客戶端的編程步驟:1、加載數(shù)據(jù)庫,創(chuàng)建套接字(WSAStrartup()/socket();2、向服務(wù)器發(fā)送連接請求(connect。);3、和服務(wù)器端進(jìn)行通信(send()/recv();4、關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup().6.實驗過程中的問題:首先是在編寫代碼時考慮了是用TCP還是用UD的議,通過翻看了原

6、來計算機網(wǎng)絡(luò)的書后舉得利用TCP來編寫聊天程序的話,由于TCP議相對于UDPB議復(fù)雜了許多且是面向連接的運輸層協(xié)議在每次建立與斷開連接的時候都要不停的進(jìn)行確認(rèn)十分占用網(wǎng)絡(luò)資源,但UDR1不用那么繁瑣,且效率相對的要高出許多。但是在代碼測試時老師說到作為一個聊天工具重點是信息的交流對于UDP容易出現(xiàn)丟包的現(xiàn)象,且TCP協(xié)議具有很高的可靠性,對于網(wǎng)絡(luò)的占用也并非想象中的那么嚴(yán)重,故對于編寫此類程序還是用TCP的好一些。其次是在編程過程中發(fā)現(xiàn)在通信過程中由于端口號只設(shè)定一個所以一旦服務(wù)器與一臺客戶端連接時,其他的的客戶端就不能與服務(wù)器進(jìn)行連接了,因為先前的客戶端占用的端口號。通過與老師的交流后知道了

7、,在使用TCP/UDPB議時有兩條連接時,突然就有種豁然開朗的感覺。實驗二:1 .實驗名稱:Ping程序上設(shè)計與實現(xiàn)2 .實驗要求:用C語言實現(xiàn)Ping命令程序,能實現(xiàn)基本的Ping操作,發(fā)送ICMP回顯請求報文,用于測試一個主機到只一個主機之間的連通情況。要求:1)獨立完成程序的設(shè)計、編碼和調(diào)試。2)系統(tǒng)利用C語言實現(xiàn),程序調(diào)試環(huán)境為TurboC或VC;3)按照課程設(shè)計規(guī)范書寫課程設(shè)計報告。4)采用VC環(huán)境進(jìn)行調(diào)試運行。3.實驗內(nèi)容本程序主要分為四個模塊(功能模塊圖見圖1.1):初始化模塊,功能控制模塊,數(shù)據(jù)報解讀模塊,Ping測試模塊。初始化模塊:該模塊用于定義及初始化各個全局變量,為wi

8、nsock加載winsock體。功能控制模塊:該模塊是被其他模塊調(diào)用,其功能包括解析參數(shù)、計算ICMP數(shù)據(jù)報文檢驗和、清除SOCKET,ICM四數(shù)據(jù)以及接受緩沖區(qū)。數(shù)據(jù)報解讀模塊:數(shù)據(jù)報解析模塊提供了解讀IP選項和解讀ICMP報文的功能。Ping測試模塊:該模塊是本程序的核心模塊,調(diào)用其他模塊實現(xiàn)其功能,進(jìn)而實現(xiàn)Ping的功能。4.流程圖:開始5.實驗中遇到的問題及解決方案:問題1:提示庫函數(shù)名為未標(biāo)示符?分析:在程序開頭只有以下頭文件,#include<winsock2.h>#include<stdio.h>#include<stdlib.h>忘記打開&l

9、t;ws2tcpip.h>頭文件;問題2:提示出現(xiàn)內(nèi)存(0x000000)錯誤?分析:voidDecodeICMPHeader(char*buf,intbytes,SOCKADDR_IN*from)buf動態(tài)指針指向錯誤。問題3:連接時所有有關(guān)winsock的庫函數(shù)連接不上?分析:一定是缺少了某個頭文件或沒打開動態(tài)庫,解決辦法是在開頭加上一下代碼:#pragmacomment(lib,"ws2_32.lib");實驗三1 .實驗名稱:基于IP多播組的網(wǎng)絡(luò)會議2 .實驗內(nèi)容:了解IP多播的基本原理,參照局域網(wǎng)IP多播程序,設(shè)計一個簡易的網(wǎng)絡(luò)會議程序。3 .實驗?zāi)康模?、

10、加深對計算機局域網(wǎng)IP多播工作原理的理解,通過編寫計算機程序?qū)崿F(xiàn)、模擬其功能,使學(xué)生理解并掌握其基本原理及工作過程。2、提高網(wǎng)絡(luò)編程和應(yīng)用的能力。提高實際編程能力和靈活運用所學(xué)知識解決問題的能力。4 .實驗要求:編寫一個簡易的局域網(wǎng)IP多播網(wǎng)絡(luò)會議程序,理解IP多播的基本概念和工作原理,程序由Sender和Receiver兩個部分組成,Sender用戶從控制臺上輸入多播發(fā)送數(shù)據(jù),Receiver端都要求加入同一個多播組,完成接收Sender發(fā)送的多播數(shù)據(jù)。5 .實驗原理:IP多播技術(shù),也常稱為組播通信,它是基于IP層的通信技術(shù)。是一種允許一臺或多臺主機(多播源)發(fā)送單一數(shù)據(jù)包到多臺主機(一次的

11、,同時的)的TCP/IP網(wǎng)絡(luò)技術(shù),是一點對多點的通信。采用多播通信技術(shù),不僅可以實現(xiàn)一個發(fā)送者和多個接收者之間進(jìn)行通信的功能,而且可以有效減輕網(wǎng)絡(luò)通信的負(fù)擔(dān),避免資源的無謂浪費。并不是所有的協(xié)議都支持多播通信,通常多播通信應(yīng)用都建立在TCP/IP協(xié)議之上,IP地址采用D類地址來支持多播,由特殊的多播路由器來實現(xiàn)。IP多播提供兩類服務(wù):1)向多個目的地址傳送數(shù)據(jù)。有許多向多個接收者傳送信息的應(yīng)用:例如交互式會議系統(tǒng)和向多個接收者分發(fā)郵件或新聞。如果不采用多播,目前這些應(yīng)用大多采用TCP來完成(向每個目的地址傳送一個單獨的數(shù)據(jù)復(fù)制)。然而,即使使用多播,某些應(yīng)用可能繼續(xù)采用TCP來保證它的可靠性。

12、2)客戶對服務(wù)器的請求。例如,無盤工作站需要確定啟動引導(dǎo)服務(wù)器。目前,這項服務(wù)是通過廣播來提供的,但是使用多播可降低不提供這項服務(wù)主機的負(fù)擔(dān)。6 .實驗過程:1、啟動VisualC+6.0,創(chuàng)建一個控制臺項目工程。在此項目工程中添加Sender和Receiver兩個項目。Receiver項目實現(xiàn)步驟:(1)、創(chuàng)建一個SOCK_DGRAW的Socket。(2)、將此Socket綁定到本地的一個端口上,為了接收服務(wù)器端發(fā)送的多播數(shù)據(jù)。(3)、加入多播組。(4)、接收多播數(shù)據(jù)。Sender實現(xiàn)步驟:(1)、創(chuàng)建一個SOCK_DGRAW的Socket。(2)、加入多播組。(3)、發(fā)送多播數(shù)據(jù).2、編譯

13、兩個項目,在局域網(wǎng)中按如下步驟測試:(1)、將Sender.exe拷貝到發(fā)送多播數(shù)據(jù)的PC上。(2)、將Receiver.exe拷貝到多個要求接收多播數(shù)據(jù)的PC上.(3)、各自運行相應(yīng)的程序。(4)、在SenderPC上輸入多播數(shù)據(jù)后,你就可以在ReceiverPC上看到輸入的多播數(shù)據(jù)。實驗四1 .實驗名稱:網(wǎng)絡(luò)嗅探器2 .實驗原理:嗅探器作為一種網(wǎng)絡(luò)通訊程序,也是通過對網(wǎng)卡的編程來實現(xiàn)網(wǎng)絡(luò)通訊的,對網(wǎng)卡的編程也是使用通常的套接字(socket)方式來進(jìn)行。但是,通常的套接字程序只能響應(yīng)與自己硬件地址相匹配的或是以廣播形式發(fā)出的數(shù)據(jù)幀,對于其他形式的數(shù)據(jù)幀比如已到達(dá)網(wǎng)絡(luò)接口但卻不是發(fā)給此地址的

14、數(shù)據(jù)幀,網(wǎng)絡(luò)接口在驗證投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取到達(dá)的數(shù)據(jù)包。而網(wǎng)絡(luò)嗅探器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包即可以是發(fā)給它的也可以是發(fā)往別處的。顯然,要達(dá)到此目的就不能再讓網(wǎng)卡按通常的正常模式工作,而必須將其設(shè)置為混雜模式。具體到編程實現(xiàn)上,這種對網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(rawsocket)來實現(xiàn)的,這也有別于通常經(jīng)常使用的數(shù)據(jù)流套接字和數(shù)據(jù)報套接字。在創(chuàng)建了原始套接字后,需要通過setsockopt()函數(shù)來設(shè)置IP頭操作選項,然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過

15、ioctlsocket()來進(jìn)行設(shè)置,而且還可以指定是否親自處理IP頭。至此,實際就可以開始對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行嗅探了,對數(shù)據(jù)包的獲取仍象流式套接字或數(shù)據(jù)報套接字那樣通過recv()函數(shù)來完成。但是與其他兩種套接字不同的是,原始套接字此時捕獲到的數(shù)據(jù)包并不僅僅是單純的數(shù)據(jù)信息,而是包含有IP頭、TCP頭等信息頭的最原始的數(shù)據(jù)信息,這些信息保留了它在網(wǎng)絡(luò)傳輸時的原貌。通過對這些在低層傳輸?shù)脑夹畔⒌姆治隹梢缘玫接嘘P(guān)網(wǎng)絡(luò)的一些信息。由于這些數(shù)據(jù)經(jīng)過了網(wǎng)絡(luò)層和傳輸層的打包,因此需要根據(jù)其附加的幀頭對數(shù)據(jù)包進(jìn)行分析。下面先給出結(jié)構(gòu).數(shù)據(jù)包的總體結(jié)構(gòu):數(shù)據(jù)包IP頭TCP頭(或其他信息頭)數(shù)據(jù)數(shù)據(jù)在從應(yīng)用層到

16、達(dá)傳輸層時,將添加TCP數(shù)據(jù)段頭,或是UDP數(shù)據(jù)段頭。其中UDP數(shù)據(jù)段頭比較簡單,由一個8字節(jié)的頭和數(shù)據(jù)部分組成,具體格式如下:16位16位源端口目的端口UDPK度UDP校驗和而TCP數(shù)據(jù)頭則比較復(fù)雜,以20個固定字節(jié)開始,在固定頭后面還可以有一些長度不固定的可選項,下面給出TCP數(shù)據(jù)段頭的格式組成:16位16位源端口目的端口順序號確認(rèn)號TCP頭長(保留)7位URGACKPSHRSTSYNFIN窗口大小校驗和緊急指針可選項(0或更多的32位字)數(shù)據(jù)(可選項)對于此TCP數(shù)據(jù)段頭的分析在編程實現(xiàn)中可通過數(shù)據(jù)結(jié)構(gòu)_TCP來定義:typedefstruct_TCPWORDSrcPort;/源端口WO

17、RDDstPort;/目的端口DWORDSeqNum;/順序號DWORDAckNum;/確認(rèn)號BYTEDataOff;/TCP頭長BYTEFlags;標(biāo)志(URGACK等)WORDWindow;/窗口大小WORDChksum;/校驗和WORDUrgPtr;/緊急指針TCP;typedefTCP*LPTCP;typedefTCPUNALIGNED*ULPTCP;在網(wǎng)絡(luò)層,還要給TCP數(shù)據(jù)包添加一個IP數(shù)據(jù)段頭以組成IP數(shù)據(jù)報。IP數(shù)據(jù)頭以大端點機次序傳送,從左到右,版本字段的高位字節(jié)先傳輸(SPARC是大端點機;Pentium是小端點機)。如果是小端點機,就要在發(fā)送和接收時先行轉(zhuǎn)換然后才能進(jìn)行傳

18、輸。IP數(shù)據(jù)段頭格式如下:16位16位版本IHL服務(wù)類型總長標(biāo)識標(biāo)志分段偏移生命期協(xié)議頭校驗和源地址目的地址選項(0或更多)同樣,在實際編程中也需要通過一個數(shù)據(jù)結(jié)構(gòu)來表示此IP數(shù)據(jù)段頭,下面給出此數(shù)據(jù)結(jié)構(gòu)的定義:typedefstruct_IPunionBYTEVersion;/版本BYTEHdrLen;/IHL;BYTEServiceType;/服務(wù)類型WORDTotalLen;/總長WORDID;/標(biāo)識unionWORDFlags;/標(biāo)志W(wǎng)ORDFragOff;/分段偏移;BYTETimeToLive;/生命期BYTEProtocol;/協(xié)議WORDHdrChksum;/頭校驗和DWORD

19、SrcAddr;/源地址DWORDDstAddr;/目的地址BYTEOptions;/選項IP;typedefIP*LPIP;typedefIPUNALIGNED*ULPIP;在明確了以上幾個數(shù)據(jù)段頭的組成結(jié)構(gòu)后,就可以對捕獲到的數(shù)據(jù)包進(jìn)行分析了。嗅探器的具體實現(xiàn)根據(jù)前面的設(shè)計思路,不難寫出網(wǎng)絡(luò)嗅探器的實現(xiàn)代碼,下面就給出一個簡單的示例,該示例可以捕獲到所有經(jīng)過本地網(wǎng)卡的數(shù)據(jù)包,并可從中分析出協(xié)議、IP源地址、IP目標(biāo)地址、TCP源端口號、TCP目標(biāo)端口號以及數(shù)據(jù)包長度等信息。由于前面已經(jīng)將程序的設(shè)計流程講述的比較清楚了,因此這里就不在贅述了,下面就結(jié)合注釋對程序的具體是實現(xiàn)進(jìn)行講解,同時為程

20、序流程的清晰起見,去掉了錯誤檢查等保護(hù)性代碼。主要代碼實現(xiàn)清單為:/檢查Winsock版本號,WSAData為WSADATA構(gòu)對象WSAStartup(MAKEWORD(2,2),&WSAData);/創(chuàng)建原始套接字sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);/設(shè)置IP頭操作選項,其中flag設(shè)置為ture,親自對IP頭進(jìn)行處理setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag);/獲取本機名gethostname(char*)LocalName,sizeof(Lo

21、calName)-1);/獲取本地IP地址pHost=gethostbyname(char*)LocalName);/填充SOCKADDR_M構(gòu)addr_in.sin_addr=*(in_addr*)pHost->h_addr_list0;/IPaddr_in.sin_family=AF_INET;addr_in.sin_port=htons(57274);/把原始套接字sock綁定到本地網(wǎng)卡地址上bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in);/dwValue為輸入輸出參數(shù),為1時執(zhí)行,0時取消DWORDdwValue=1;/設(shè)置SO

22、CK_RAMSIO_RCVALL以便接收所有的IP包。其中SIO_RCVALL/的定義為:#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)ioctlsocket(sock,SIO_RCVALL,&dwValue);前面的工作基本上都是對原始套接字進(jìn)行設(shè)置,在將原始套接字設(shè)置完畢,使其能按預(yù)期目的工作時,就可以了。3 .IP數(shù)據(jù)報頭的結(jié)構(gòu)體:structipheaderunsignedcharip_hl:4;/*headerlength(報頭長度)*/unsignedcharip_v:4;/*version(版本)*/unsigned char ip_tos;

23、unsigned short int ip_len;unsigned short int ip_id;unsigned short int ip_off;unsigned char ip_ttl;unsigned char ip_p;unsigned short int ip_sum;unsigned int ip_src;unsigned int ip_dst;4.TCP報頭結(jié)構(gòu)體:typedef struct tcpheader unsigned short int sport;unsigned short int dport;unsigned int th_seq;unsigned in

24、t th_ack;unsigned char th_x:4;unsigned char th_off:4;unsigned char Flags;unsigned short int th_win;unsigned short int th_sum;unsigned short int th_urp;TCP_HDR;5.UDP 報頭結(jié)構(gòu)體:typedef struct udphdr unsigned short sport;unsigned short dport;unsigned short len;unsigned short cksum;UDP_HDR;5 .變量/*type os se

25、rvice 服務(wù)類型 */*total length ( 總長度 )*/*identification ( 標(biāo)識符 )*/*fragment offset field( 段移位域 )*/*time to live ( 生存時間 )*/*protocol( 協(xié)議 )*/*checksum( 校驗和 )*/*source address(源地址廣/*destination address( 目的地址 )*/* total ip header length: 20 bytes (=160 bits) */*source port ( 源端口號 )*/*destination port( 目的端口號)

26、*/"sequence number(包的序列號)*/*acknowledgement number( 確認(rèn)應(yīng)答號)*/*unused(未使用)*/*data offset( 數(shù)據(jù)偏移量)*/* 標(biāo)志全 */*windows( 窗口 )*/*checksum( 校驗和 )*/*urgent pointer( 緊急指針 )*/*source port( 源端口號 )*/*destination port( 目的端口號)*/*udp length(udp 長度 )*/*udp checksum(udp 校驗和 )*/SOCKETsock;/*進(jìn)行網(wǎng)絡(luò)通信的套接字*/SOCKETsocke

27、t(intaf,inttype,intprotocol);應(yīng)用程序調(diào)用socket函數(shù)來創(chuàng)建一個能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。*第一個參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于TCP/IP協(xié)議族,該參數(shù)置AF_INET;第二個參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報套接字類型為SOCK_DGRAM;第三個參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。該函數(shù)如果調(diào)用成功就返回新創(chuàng)建的套接字的描述符,如果失敗就返回INVALID_SOCKET套接字描述符是一個整數(shù)類型的值。每個進(jìn)程的進(jìn)程空間里都有一個套接字描述符表,該表中存放著套接字描述符和套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的對應(yīng)關(guān)系。該表中有一個

28、字段存放新創(chuàng)建的套接字的描述符,另一個字段存放套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的地址,因此根據(jù)套接字描述符就可以找到其對應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。每個進(jìn)程在自己的進(jìn)程空間里都有一個套接字描述符表但是套接字?jǐn)?shù)據(jù)結(jié)構(gòu)都是在操作系統(tǒng)的內(nèi)核緩沖里。WSADATAwsd;存儲被WSAstartup函數(shù)調(diào)用后返回的Windowssockets數(shù)據(jù),即存放windowssocket初始化信息DWORDdwBytesRet;32bit的無符號整數(shù)unsignedintoptval=1;unsignedchar*dataudp,*datatcp;inti,pCount=0,lentcp,lenudp;SOCKADDR_INsa,saS

29、ource,saDest;用來指定ip地址和端口信息structhostentFAR*pHostent;主機指針charFARnameMAX_HOSTNAME_LAN;charszSourceIPMAX_ADDR_LEN,szDestIPMAX_ADDR_LEN,RecvBuf655350;structudphdr*pUdpheader;structipheader*pIpheader;structtcpheader*pTcpheader;WSAStartup(MAKEWORD(2,1),&wsd);MAKEWORD(2,1)創(chuàng)建一個被指針變量連接而成的word變量6.過濾規(guī)則:if(

30、sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)=SOCKET_ERROR)exit(1);gethostname(name,MAX_HOSTNAME_LAN);pHostent=gethostbyname(name);sa.sin_family=AF_INET;sa.sin_port=htons(6000);memcpy(&sa.sin_addr.S_un.S_addr,pHostent->h_addr_list0,pHostent->h_length);bind(sock,(SOCKADDR*)&sa,sizeof(sa);/*bind()設(shè)定自己主機的IP地址和端口號*/if(WSAGetLastError()=10013)exit(1);WSAIoctl(sock,SIO_RCVALL,&optval,sizeof(optval),NULL,0,&dwBytesRet,NULL,NULL);pIpheader=(structipheader*)RecvBuf;pTcpheader=(structtcpheader*)(RecvBuf+sizeof(structipheader);pUdpheader=(structudphdr*)(RecvBuf+sizeof(structiphe

溫馨提示

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

評論

0/150

提交評論