版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、- -網(wǎng)絡(luò)流量測(cè)量軟件的設(shè)計(jì)與實(shí)現(xiàn)摘摘 要:要:為了方便網(wǎng)絡(luò)編程,90 年代初,由 Microsoft 聯(lián)合了其他幾家公司共同制定了一套 WINDOWS 下的網(wǎng)絡(luò)編程接口,即 Windows Sockets 規(guī)范,它不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的 Windows 下的網(wǎng)絡(luò)編程接口。本篇論文主要是介紹了在 TCP/IP 基礎(chǔ)上利用 winsock2 對(duì)網(wǎng)卡進(jìn)行編程,以達(dá)到網(wǎng)絡(luò)流量監(jiān)測(cè)的目的。論文首先介紹了 TCP/IP 協(xié)議,旨在介紹 IP,TCP,UDP 等比較重要的協(xié)議。主要是介紹 IP 頭,TCP 頭,UDP 頭的特點(diǎn),以便從 IP 頭中可以獲取源地址,目的地址,協(xié)議類型
2、等信息。在隨后的章節(jié)中提出了Socket 的概念,Socket 實(shí)際上提供了一個(gè)通信端口使所有擁有 Socket的端口的計(jì)算機(jī)之間能夠相互通信,在本論文中主要說明了 socket的建立,監(jiān)聽和撤銷的過程。具體到程序?qū)崿F(xiàn)中,對(duì)網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(raw socket)來實(shí)現(xiàn)的。為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過將 SOCK_RAW 設(shè)置成SIO_RCVALL。對(duì)數(shù)據(jù)包的獲取通過 recv()函數(shù)來完成。最后要完成的工作就是對(duì)所捕獲的 IP 數(shù)據(jù)包進(jìn)行分析以提取出我們所需要的信息。在論文的最后是旨在說明進(jìn)一步工作的展開。關(guān)鍵字: TCP/IP,Winsock,原始套接字,
3、NetBios -Abstract: For convenience of network programming, in the early 1990s, a new set of network programming interface using under WINDOWS was established by some companies united by Microsoft. It is known as Windows Socket Norm. It isnt a kind of network protocol, but an open network programming
4、 interface support multiple protocols under WINDOWS. The main purpose of the thesis is to introduce how to use Winsock2 program on network adapter under the protocol of TCP/IP. This is for the purpose of measure the network discharge. At the beginning of the thesis, we introduce all important protoc
5、ols of TCP/IP, like IP, TCP, and UDP. We introduce IP header, TCP header and UDP header for the most important because we need acquire the information of source address, destination address, and protocol type from the IP header. In the following section, we give the concept of Socket. Sockets actual
6、ly provide a communication port to allow all the computers that have Socket port to communicate with each other. In the thesis, we talk on the process of the Sockets building listening and canceling. In the program, we use RAW Socket to set adapter on the mixed mode. To let the Socket receive all da
7、ta, we also need to set the on SIO_RCVALL. Then we use the function recv () to get data pack. At last we need analyze the data pack to get the -information we need.KEYKEY WORDSWORDS:TCP/IP, Winsock,RAW SOCKET, NetBIOS目目錄錄摘要.1Abstract.2前言.4第一章緒論51.1TCP/IP 協(xié)議及其協(xié)議分析方法.51.1.1分層.51.1.2IP 地址.61.1.3端口.61.1
8、.4TCP/IP 協(xié)議在 Windows 中的實(shí)現(xiàn).71.2Winsock 編程.71.3網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)原理.8第二章TCP/IP 協(xié)議集92.1TCP/IP 協(xié)議簡(jiǎn)介.92.2IP 協(xié)議.92.3TCP 協(xié)議.102.3.1TCP 服務(wù)模型.102.3.2TCP 數(shù)據(jù)段頭.112.3.3TCP 協(xié)議的建立.122.4UDP 協(xié)議.13第三章WINSOCK 編程概述143.1套接字的概念.143.2套接字的種類.143.3套接字的建立.14第四章網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn).164.1網(wǎng)卡初始化.164.1.1NetBios 概述164.1.2利用 NetBios 來初始化網(wǎng)卡.164.2原
9、始套接字的設(shè)置.164.3IP 包的協(xié)議分析17-4.4結(jié)果與測(cè)試.19結(jié) 論.21結(jié)束語.22參考文獻(xiàn)23前前 言言隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)日新月異的發(fā)展,Internet 的逐漸普及,網(wǎng)絡(luò)對(duì)于人們已經(jīng)不再是一個(gè)陌生的概念??梢哉f,網(wǎng)絡(luò)已經(jīng)在很多人的生活中占據(jù)了重要的地位。于是,各種各樣的軟件隨之誕生,使人們能夠更加方便,快捷的訪問網(wǎng)絡(luò),了解網(wǎng)絡(luò)以充分的利用網(wǎng)絡(luò)。本論文就是向大家介紹網(wǎng)絡(luò)中比較常用的技術(shù)網(wǎng)絡(luò)流量的監(jiān)測(cè)。在介紹具體的程序?qū)崿F(xiàn)之前,論文首先介紹了 TCP/IP 協(xié)議,可以說,任何網(wǎng)絡(luò)技術(shù)都與 TCP/IP 協(xié)議有著密切的關(guān)聯(lián),TCP/IP 協(xié)議給不同型號(hào)的計(jì)算機(jī),不同的操作系統(tǒng)之間提供
10、了相互通信的平臺(tái)。TCP/IP 起源于 60 年代末美國(guó)政府資助的一個(gè)分組交換網(wǎng)絡(luò)研究項(xiàng)目,到現(xiàn)在 90 年代已發(fā)展成為計(jì)算機(jī)之間最常應(yīng)用的組網(wǎng)形式。它是一個(gè)真正的開放系統(tǒng),因?yàn)閰f(xié)議組件的定義及其多種實(shí)現(xiàn)可以不用花錢或花很少的錢就可以公開地得到。在進(jìn)行網(wǎng)絡(luò)流量的測(cè)量之前,我們首先要對(duì)本地機(jī)的信息有一個(gè)了解。這些信息的獲取是通過 Netbios 來完成的。Netbios 利用其網(wǎng)絡(luò)控制快 NCB 來完成我們需要它去完成的對(duì)網(wǎng)卡的初始化工作。通過 ncb_command 來發(fā)出命令完成對(duì)網(wǎng)卡的操作。通過發(fā)送NCBENUM 命令獲取網(wǎng)卡的數(shù)目和每個(gè)網(wǎng)卡的內(nèi)部編號(hào);對(duì)選定的網(wǎng)卡發(fā)送一個(gè) NCBRESE
11、T 命令,以便進(jìn)行初始化;接著,可以發(fā)送 NCBASTAT 命令以獲取網(wǎng)卡的信息。這樣,我們可以讀出網(wǎng)卡的 MAC 地址以便進(jìn)行進(jìn)一步的工作。要實(shí)現(xiàn)網(wǎng)絡(luò)流量的測(cè)量,Winsock 給我們提供了一個(gè)接口,我們通過這個(gè)接口可以實(shí)現(xiàn)對(duì) IP 層以上的層的數(shù)據(jù)包的監(jiān)測(cè)。我們通過建立原始套接字,利用 Winsock 提供給我們的一些特定的函數(shù)就可以完成對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲。首先需要建立一個(gè) socket,將它設(shè)置成為是對(duì) ip 頭的操作,然后利用 gethostname,phost 獲取本機(jī)名,本機(jī) ip 地址。將本機(jī)地址與 IP 地址綁定之后,將網(wǎng)卡設(shè)置為混雜模式,以便對(duì)所有經(jīng)過它的數(shù)據(jù)包進(jìn)行接收。在這
12、些準(zhǔn)備工作已經(jīng)做好之后,余下的就是利用 recv()來捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包。到現(xiàn)在為止,我們所作的工作都是分析工作的鋪墊。我們最后所要看到的就是網(wǎng)絡(luò)數(shù)據(jù)包的分析結(jié)果。在數(shù)據(jù)包的分析過程中,用戶一般想得到的主要信息不外乎是包的協(xié)議類型,源/目的地址,發(fā)送/接收端口以及包的大小,定義指針,分別指向數(shù)據(jù)包的相對(duì)應(yīng)-的位置就可以得到這些信息。將得到的信息羅列并顯示出來之后,我們就完成了對(duì)網(wǎng)絡(luò)中數(shù)據(jù)包的流量監(jiān)測(cè)過程。在論文的最后對(duì)整篇論文進(jìn)行了總結(jié),說明了一些不足之處,并對(duì)所有對(duì)這篇論文知道并建議的老師等表示感謝。第一章第一章緒論緒論1.11.1TCP/IPTCP/IP 協(xié)議及其協(xié)議分析方法協(xié)議及其協(xié)議分
13、析方法TCP/IP 起源于 60 年代末美國(guó)政府資助的一個(gè)分組交換網(wǎng)絡(luò)的研究項(xiàng)目,到現(xiàn)在 90 年代已發(fā)展成為計(jì)算機(jī)之間最常用的組網(wǎng)形式。它是一個(gè)真正的開放系統(tǒng),因?yàn)閰f(xié)議組件的定義及其多種實(shí)現(xiàn)可以不用花錢或花很少的錢就可以公開地得到。它成為被稱作“全球互聯(lián)網(wǎng)”或“因特網(wǎng)”(Internet)的基礎(chǔ)。.1分層分層協(xié)議分層的概念的提出是為了減少協(xié)議設(shè)計(jì)的復(fù)雜性,每一層都建立到它的下層之上,每一層的目的就是為了向上一層提供特定的服務(wù)。一臺(tái)機(jī)器的第 n 層向另一臺(tái)機(jī)器的第 n層會(huì)話,通話的規(guī)則稱為協(xié)議。分層和協(xié)議構(gòu)成了網(wǎng)絡(luò)體系結(jié)構(gòu)。在提到了分層的概念時(shí)就不能不提一下 OSI 參考模型。
14、該模型基于國(guó)際化標(biāo)準(zhǔn)組織,共分為七層:物理層:涉及到通信在信道上傳輸?shù)脑急忍亓鳌?shù)據(jù)鏈路層:加強(qiáng)物理層傳輸原始比特流的功能,使之對(duì)網(wǎng)絡(luò)層顯現(xiàn)為一條無錯(cuò)線路網(wǎng)絡(luò)層:關(guān)系到子網(wǎng)的運(yùn)行控制,其中一個(gè)關(guān)鍵的問題就是路由選擇。傳輸層:為用戶提供端到端的數(shù)據(jù)傳送服務(wù)。會(huì)話層:允許不同機(jī)器上的用戶建立會(huì)話關(guān)系,為用戶提供會(huì)話控制服務(wù)。表示層:為用戶提供數(shù)據(jù)轉(zhuǎn)換和表示服務(wù)。應(yīng)用層:為用戶提供訪問 OSI 的接口,其中包括大量的常見的協(xié)議。TCP/IP 通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng),每一層負(fù)責(zé)不同的功能。數(shù)據(jù)鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口卡。-它們一起處理與電纜(或其他任何傳
15、輸媒介)的物理接口細(xì)節(jié)。網(wǎng)絡(luò)層,處理分組在網(wǎng)絡(luò)中的活動(dòng),例如分組的路由選擇。在 TCP/IP 協(xié)議組件中,網(wǎng)絡(luò)層協(xié)議包括 IP 協(xié)議(網(wǎng)際協(xié)議) ,ICMP 協(xié)議(Internet 互連網(wǎng)控制報(bào)文協(xié)議) ,以及 IGMP 協(xié)議(Internet 組管理協(xié)議) 。運(yùn)輸層,主要為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的通信。在 TCP/IP 協(xié)議組件中,有兩個(gè)互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和 UDP(用戶數(shù)據(jù)報(bào)協(xié)議) 。TCP 為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。而另一方面,UDP 則為應(yīng)用層提供一種非常簡(jiǎn)單的服務(wù)。它只是把稱作數(shù)據(jù)報(bào)的分組從一臺(tái)主機(jī)發(fā)送到另一臺(tái)主機(jī),但并不保證該數(shù)據(jù)報(bào)能到達(dá)另一
16、端。應(yīng)用層,負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)。幾乎各種不同的 TCP/IP 實(shí)現(xiàn)都會(huì)提供下面這些通用的應(yīng)用程序: Telnet 遠(yuǎn)程登錄,F(xiàn)TP 文件傳輸協(xié)議,SMTP 用于電子郵件的簡(jiǎn)單郵件傳輸協(xié)議,SNMP 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議。 圖 1-1 OSI 模型與 TCP/IP 模型的比較如圖所示,OSI 模型有七層,而 TCP/IP 模型只有 4 層。OSI 模型在網(wǎng)絡(luò)層支持無連接和面向連接的通信,而 TCP/IP 模型在網(wǎng)絡(luò)層僅有無連接的通信方式,但是在傳輸層卻支持兩種模式,更好的面向了用戶。.2IPIP 地址地址互連網(wǎng)上的每個(gè)接口必須有一個(gè)唯一的 Internet 地址(也稱作 IP
17、 地址) 。IP 地址長(zhǎng) 32 bit。這些 32 位的地址通常寫成四個(gè)十進(jìn)制的數(shù),其中每個(gè)整數(shù)對(duì)應(yīng)一個(gè)字節(jié)。這種表示方法稱作“點(diǎn)分十進(jìn)制表示法” 。需要再次指出的是,多接口主機(jī)具有多個(gè) IP 地址,其中每個(gè)接口都對(duì)應(yīng)一個(gè) IP 地址。-由于互連網(wǎng)上的每個(gè)接口必須有一個(gè)唯一的 IP 地址,因此必須要有一個(gè)管理機(jī)構(gòu)為接入互連網(wǎng)的網(wǎng)絡(luò)分配 IP 地址。這個(gè)管理機(jī)構(gòu)就是互連網(wǎng)絡(luò)信息中心(Internet Network Information Centre)稱作 InterNIC。InterNIC 只分配網(wǎng)絡(luò)號(hào)。主機(jī)號(hào)的分配由系統(tǒng)管理員來負(fù)責(zé)。.3端口端口網(wǎng)絡(luò)中可以被命名和尋址的通信
18、端口,是操作系統(tǒng)可分配的一種資源。按照 OSI 七層協(xié)議的描述,傳輸層與網(wǎng)絡(luò)層在功能上的最大區(qū)別是傳輸層提供進(jìn)程通信能力。從這個(gè)意義上講,網(wǎng)絡(luò)通信的最終地址就不僅僅是主機(jī)地址了,還包括可以描述進(jìn)程的某種標(biāo)識(shí)符。為此,TCP/IP 協(xié)議提出了協(xié)議端口(protocol port,簡(jiǎn)稱端口)的概念,用于標(biāo)識(shí)通信的進(jìn)程。端口是一種抽象的軟件結(jié)構(gòu),應(yīng)用程序(即進(jìn)程)通過系統(tǒng)調(diào)用與某端口建立連接后,傳輸層傳給該端口的數(shù)據(jù)都被相應(yīng)進(jìn)程所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都通過該端口輸出。在 TCP/IP 協(xié)議的實(shí)現(xiàn)中,端口操作類似于一般的 I/O 操作,進(jìn)程獲取一個(gè)端口,相當(dāng)于獲取本地唯一的 I/O 文件,可
19、以用一般的讀寫原語訪問之。類似于文件描述符,每個(gè)端口都擁有一個(gè)叫端口號(hào)(port number)的整數(shù)型標(biāo)識(shí)符,用于區(qū)別不同端口。端口號(hào)的分配是一個(gè)重要問題。端口號(hào)的分配有兩種基本分配方式:第一種叫全局分配,這是一種集中控制方式,由一個(gè)公認(rèn)的中央機(jī)構(gòu)根據(jù)用戶需要進(jìn)行統(tǒng)一分配,并將結(jié)果公布于眾。第二種是本地分配,又稱動(dòng)態(tài)連接,即進(jìn)程需要訪問傳輸層服務(wù)時(shí),向本地操作系統(tǒng)提出申請(qǐng),操作系統(tǒng)返回一個(gè)本地唯一的端口號(hào),進(jìn)程再通過合適的系統(tǒng)調(diào)用將自己與該端口號(hào)綁定起來。.4TCP/IPTCP/IP 協(xié)議在協(xié)議在 WindowsWindows 中的實(shí)現(xiàn)中的實(shí)現(xiàn)對(duì) TCP/IP 協(xié)議有了一個(gè)結(jié)
20、構(gòu)性的了解之后,就要考慮 TCP/IP 協(xié)議在 Windows 中是如何應(yīng)用的。TCP/IP 和 OSI 有一層映射關(guān)系,所以可以將 TCP/IP 通過 OSI 映射到 Windows操作系統(tǒng)中去。OSI 在 Windows 中的實(shí)現(xiàn):物理層就是網(wǎng)卡,數(shù)據(jù)鏈路層就是網(wǎng)卡驅(qū)動(dòng)程序,網(wǎng)絡(luò)層就是 NDIS(網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范) ,傳輸層是 TDI(傳輸驅(qū)動(dòng)程序接口),會(huì)話層是 SPI(服務(wù)提供者接口),表示層是 API(應(yīng)用編程接口),應(yīng)用層通常就是 EXE 文件。1.21.2WinsockWinsock 編程編程Winsock 就是 Windows Socket 的簡(jiǎn)稱,最簡(jiǎn)單的說,Winsoc
21、k 就是 Windows 應(yīng)用程序與 TCP/IP 之間的通信界面。如圖:-圖 1-2 Winsock 在 TCP/IP 和 OSI 中的表示在 Windows 中,利用 Winsock 通信需經(jīng)過幾個(gè)步驟:初始化 Winsock,創(chuàng)建套接字,建立會(huì)話,傳送數(shù)據(jù),中止會(huì)話,中止 Winsock。Winsock 既可以提供機(jī)器間的通訊,又可提供 Windows 進(jìn)程間的通信。1.31.3網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)原理網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)原理網(wǎng)絡(luò)流量監(jiān)測(cè)器也是通過對(duì)網(wǎng)卡的編程來實(shí)現(xiàn)網(wǎng)絡(luò)通訊的,對(duì)網(wǎng)卡的編程也是使用通常的套接字(socket)方式來進(jìn)行。但是,通常的套接字程序只能響應(yīng)與自己硬件地址相匹
22、配的或是以廣播形式發(fā)出的數(shù)據(jù)幀,對(duì)于其他形式的數(shù)據(jù)幀比如已到達(dá)網(wǎng)絡(luò)接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡(luò)接口在驗(yàn)證投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取到達(dá)的數(shù)據(jù)包。而網(wǎng)絡(luò)監(jiān)測(cè)器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包即可以是發(fā)給它的也可以是發(fā)往別處的。顯然,要達(dá)到此目的就必須將其設(shè)置為混雜模式。這種對(duì)網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(raw socket)來實(shí)現(xiàn)的,這也有別于通常經(jīng)常使用的數(shù)據(jù)流套接字和數(shù)據(jù)報(bào)套接字。在創(chuàng)建了原始套接字后,需要通過Setsockopt()函數(shù)來設(shè)置 IP 頭操作選項(xiàng),然后再通過 bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。
23、為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過 ioctlsocket()來進(jìn)行設(shè)置,而且還可以指定是否親自處理 IP 頭。至此,實(shí)際就可以開始對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行監(jiān)測(cè)了,對(duì)數(shù)據(jù)包的獲取仍通過 recv()函數(shù)來完成。-第二章第二章TCP/IPTCP/IP 協(xié)議集協(xié)議集2.12.1TCP/IPTCP/IP 協(xié)議簡(jiǎn)介協(xié)議簡(jiǎn)介很多不同的廠家生產(chǎn)各種型號(hào)的計(jì)算機(jī),它們運(yùn)行完全不同的操作系統(tǒng),但 TCP/IP 協(xié)議組件允許它們互相進(jìn)行通信。TCP/IP 模型是一種層級(jí)式(Layering)的結(jié)構(gòu),每一層都呼叫它的下一層所提供的服務(wù)來完成自己的需求。TCP/IP 模型可以分為以下四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、
24、數(shù)據(jù)鏈路層。本章主要對(duì) TCP/IP 協(xié)議組件進(jìn)行概述。2.22.2IPIP 協(xié)議協(xié)議IP 是 TCP/IP 協(xié)議族中最為核心的協(xié)議。所有的 TCP,UDP,ICMP,及 IGMP 數(shù)據(jù)都以IP 數(shù)據(jù)報(bào)格式傳輸。與大多數(shù)網(wǎng)絡(luò)層協(xié)議不同,IP 協(xié)議一開始就是為了網(wǎng)絡(luò)互連的目的而設(shè)計(jì)的,它的工作是提供一種從源端到目的端傳輸數(shù)據(jù)報(bào)的最佳嘗試方法,不管這些機(jī)器是否在同一網(wǎng)絡(luò)中。我們可以通過分析 IP 數(shù)據(jù)報(bào)的頭部來更好的了解 IP 協(xié)議:圖 2-1 IP 包頭1、版本(version):記錄了數(shù)據(jù)報(bào)屬于哪一個(gè)版本的協(xié)議。2、IHL 字段:用來告訴頭部有多長(zhǎng),以 32 字節(jié)長(zhǎng)度為一個(gè)單位,最小值為 5。
25、3、服務(wù)類型(type of service):使主機(jī)告訴子網(wǎng)它想要什么樣的服務(wù)。3 個(gè)標(biāo)志位 D,T,R 主機(jī)能說明它最關(guān)心組合Delay,Throughput,Reliability中的哪一項(xiàng)。還有兩位未用。D,T,R 的優(yōu)先級(jí)從 0 到 7。4、總長(zhǎng)(total length):包括數(shù)據(jù)報(bào)中的所有信息包括頭部和數(shù)據(jù)。總長(zhǎng)65535 字節(jié)。5、標(biāo)識(shí)(identification): 讓目的主機(jī)判斷新來的分段屬于哪個(gè)分組,所有屬于同一-分組的字段包含同樣的標(biāo)識(shí)值。6、分段偏移(fragment offset):說明分段在當(dāng)前數(shù)據(jù)報(bào)的什么位置。除了數(shù)據(jù)報(bào)的最后一個(gè)分段外,所有分段都要乘以 8
26、字節(jié)。因?yàn)樵诜侄挝灰魄坝?3 位,其中兩位是未用的位,然后是兩個(gè) 1 位字段,DF 表示不要分段,MF 表示還有進(jìn)一步的分段。這樣表示分段位移的位只有 13 位,因此每個(gè)數(shù)據(jù)報(bào)最長(zhǎng)是 8192 個(gè)分組,這樣最大的數(shù)據(jù)報(bào)長(zhǎng)度是65536 字節(jié)。7、生命期(time to life):是同一個(gè)用來限制分組生命周期的計(jì)數(shù)器,最長(zhǎng)生命周期 255s,它必須在每個(gè)節(jié)點(diǎn)都遞減,而且當(dāng)一個(gè)路由器中排隊(duì)時(shí)間過長(zhǎng)可以十倍數(shù)遞減。8、協(xié)議(protocol):說明將它送給哪個(gè)傳輸進(jìn)程的,協(xié)議的編號(hào)在整個(gè)因特網(wǎng)上是全球通用的,它定義于 RFC 1700 中。9、頭部校驗(yàn)和(header checksum):這種算法
27、用來校驗(yàn)頭部。該算法將頭部所有 16位半字?jǐn)?shù)據(jù)累加起來,采用補(bǔ)運(yùn)算,再取其結(jié)果的補(bǔ)碼。網(wǎng)由于該算法的原理,當(dāng)數(shù)據(jù)報(bào)到達(dá)時(shí)其頭部校驗(yàn)和應(yīng)該為 0。10、源地址(source)和目的地址(destination address):指明了網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。2.32.3TCPTCP 協(xié)議協(xié)議TCP(傳輸控制協(xié)議),是專門設(shè)計(jì)用于在不可靠的 internet 上提供可靠的、端到端的字節(jié)流通信的協(xié)議。每臺(tái)支持 TCP 的機(jī)器均有一個(gè) TCP 傳輸實(shí)體,或者是用戶進(jìn)程,或者負(fù)責(zé)管理 TCP 流以及與 IP 層接口的核心。TCP 實(shí)體從本地進(jìn)程接受用戶的數(shù)據(jù)流,并將其分為不超過 64 字節(jié)的數(shù)據(jù)片段,并將每個(gè)數(shù)
28、據(jù)片段作為單獨(dú)的 IP 數(shù)據(jù)報(bào)發(fā)送出去。當(dāng)包含有 TCP 數(shù)據(jù)的 IP 數(shù)據(jù)報(bào)到達(dá)某臺(tái)相連的機(jī)器后,他們又被送給該機(jī)器內(nèi)的 TCP 實(shí)體,被重新組合為原來的數(shù)據(jù)流。IP 層并不能保證將數(shù)據(jù)報(bào)正確地傳送到目的端,因此 TCP 實(shí)體需要判定是否超時(shí)并根據(jù)需要重發(fā)數(shù)據(jù)報(bào)。到達(dá)的數(shù)據(jù)也可能是按照錯(cuò)誤的順序傳到的,這也需要由 TCP 實(shí)體按正確的順序重新將這些數(shù)據(jù)報(bào)組裝成報(bào)文。.1TCPTCP 服務(wù)模型服務(wù)模型通過在發(fā)送方和接收方分別創(chuàng)建稱為 Socket 的通信端點(diǎn)可以獲得 TCP 服務(wù)。每個(gè)套接字序號(hào)包含主機(jī)的 IP 地址以及一個(gè)主機(jī)本地的 16 位號(hào)碼,稱為端口。為了獲得 TCP
29、服務(wù),必須在發(fā)送方的 Socket 和接收方的 Socket 之間明確的建立連接。一個(gè)套接字可以被多個(gè)連接同時(shí)使用。序號(hào)小于 256 的端口稱為通用端口。所有的-TCP 連接均是全雙工的和點(diǎn)到點(diǎn)的,TCP 不支持多點(diǎn)播送或廣播。TCP 連接是字節(jié)流而非報(bào)文流,報(bào)文邊界并不按頭尾銜接方式保存。當(dāng)一個(gè)應(yīng)用程序把數(shù)據(jù)送給 TCP 實(shí)體時(shí),TCP根據(jù)自己的判斷,可能會(huì)立刻將其發(fā)送出去或者將其緩存起來。有時(shí)候用戶為了立刻發(fā)送數(shù)據(jù)可以使用 PUSH 標(biāo)志來通知 TCP 不能耽擱數(shù)據(jù)的發(fā)送。TCP 服務(wù)的另一個(gè)特點(diǎn)就是緊急數(shù)據(jù)功能。當(dāng)一個(gè)用戶按下 DEL 或者 CTRLC 中斷一個(gè)已經(jīng)開始的遠(yuǎn)程計(jì)算時(shí),發(fā)送
30、方應(yīng)用程序在數(shù)據(jù)流中放入一些控制信息并將其與 URGENT 標(biāo)志一起交給 TCP,當(dāng)緊急數(shù)據(jù)到達(dá)目的端之后,接受方應(yīng)用程序被中斷,然后去讀取數(shù)據(jù)并進(jìn)而發(fā)現(xiàn)了緊急數(shù)據(jù)。.2TCPTCP 數(shù)據(jù)段頭數(shù)據(jù)段頭發(fā)送和接收方 TCP 實(shí)體以數(shù)據(jù)段(segment)的形式交換數(shù)據(jù)。一個(gè)數(shù)據(jù)段包含一個(gè)固定的 20 字節(jié)的頭,后面跟著以 0 字節(jié)或多字節(jié)的數(shù)據(jù)。對(duì)于數(shù)據(jù)段的大小有兩個(gè)限制條件:(1)每個(gè)數(shù)據(jù)段必須適合 IP 的載荷能力,不能超過 65535 字節(jié)。(2)要求每個(gè)數(shù)據(jù)段必須適合最大傳送單位 MTU。TCP 實(shí)體所用的基本協(xié)議是滑動(dòng)窗口協(xié)議。當(dāng)發(fā)送方傳送一個(gè)數(shù)據(jù)段時(shí),它要啟動(dòng)計(jì)時(shí)器。
31、當(dāng)數(shù)據(jù)段到達(dá)目的地后,接受方的 TCP 實(shí)體向回發(fā)送一個(gè)數(shù)據(jù)段,包含確認(rèn)序號(hào),希望收到下一個(gè)數(shù)據(jù)段的順序號(hào)。如果確認(rèn)號(hào)超時(shí),則發(fā)送方將重發(fā)。TCP 數(shù)據(jù)段每段均以固定格式的 20 字節(jié)的頭開始,固定的頭后面可能是頭的一些可選項(xiàng)。在可選項(xiàng)后面最多有 65535202065495 數(shù)據(jù)字節(jié),第一個(gè) 20 指 IP 頭,第二個(gè)20 指 TCP 頭。不帶任何數(shù)據(jù)的數(shù)據(jù)段也是合法的,一般用于確認(rèn)報(bào)文和控制報(bào)文。以下介紹一下 TCP 數(shù)據(jù)段頭中每個(gè)字段的含義:-圖 2-2 TCP 頭1、源端口和目的端口字段標(biāo)識(shí)出本地和遠(yuǎn)端的連接點(diǎn)。每個(gè)主機(jī)都可以自行決定如何分配自己的端口(從 256 開始)。2、順序號(hào)和
32、確認(rèn)號(hào)字段執(zhí)行它的通用功能。確認(rèn)號(hào)指希望接收下一個(gè)字節(jié)而不是前面已經(jīng)正確接收的字節(jié)。3、TCP 頭長(zhǎng)表明在 TCP 頭中包含多少個(gè) 32 位字。由于可選項(xiàng)字段是變長(zhǎng)的,因此 TCP頭也是變長(zhǎng)的,它實(shí)際上是指明了數(shù)據(jù)在數(shù)據(jù)段中的開始位置。接下來有 6 個(gè)未用的位。4、接下來是六個(gè) 1 位的標(biāo)志:(1)URG 位是應(yīng)急指針標(biāo)志,當(dāng)用到了應(yīng)急指針,則 URG 置 1。應(yīng)急指針指從當(dāng)前順序號(hào)到緊急數(shù)據(jù)位置的偏移量。(2)ACK 位置 1 表明確認(rèn)號(hào)是合法的。ACK 為 0 表示數(shù)據(jù)段不包括確認(rèn)信息。(3)PSH 偽表示是帶有 PUSH 位標(biāo)志的數(shù)據(jù)。(4)RST 位用于復(fù)位由于主機(jī)崩潰或其他原因而出現(xiàn)
33、錯(cuò)誤的連接。(5)SYN 位用于建立連接。在連接請(qǐng)求中,SYN1,ACK0,表示捎帶確認(rèn)字段無效。連接響應(yīng)數(shù)據(jù)段應(yīng)帶有確認(rèn),因此 SYN1,ACK1。(6)FIN 位用于釋放連接,它表明發(fā)送方已經(jīng)沒有數(shù)據(jù)發(fā)送了,然而當(dāng)斷開連接后,進(jìn)程還可以繼續(xù)接收數(shù)據(jù)。5、窗口大小字段表示在確認(rèn)了字節(jié)之后還可以發(fā)送多個(gè)字節(jié),由于 TCP 中的流量控制是通過滑動(dòng)窗口來處理的。窗口大小為 0 也是合法的,表示它已經(jīng)收到了包括當(dāng)前字段的所有數(shù)據(jù)段,但當(dāng)前接收方急需暫停,希望不要發(fā)數(shù)據(jù)。-6、校驗(yàn)和也是為了確保高可靠性而設(shè)置的。它校驗(yàn)頭部,數(shù)據(jù)和偽 IP 頭(如下圖)之和。當(dāng)接收方對(duì)整個(gè)數(shù)據(jù)段,包括校驗(yàn)和字段進(jìn)行運(yùn)算
34、時(shí),結(jié)果應(yīng)是 0。圖 2-3 TCP 偽頭.3TCPTCP 協(xié)議的建立協(xié)議的建立TCP 連接的建立使用三次握手協(xié)議,在此過程中雙方要互報(bào)自己的初始序號(hào),這樣就可以保證包的接收順序和發(fā)送順序相一致。1、(B) - SYN - (A)假如服務(wù)器 A 和客戶機(jī) B 通訊. 當(dāng) A 要和 B 通信時(shí),B 首先向 A 發(fā)一個(gè) SYN (Synchronize) 標(biāo)記的包,告訴 A 請(qǐng)求建立連接。2、(B) - SYN/ACK ACK - (A)B 收到 SYN/ACK 包,B 發(fā)一個(gè)確認(rèn)包(ACK),通知 A 連接已建立。至此,三次握手完成,一個(gè) TCP 連接完成。2.42.4UDPUD
35、P 協(xié)議協(xié)議Internet 協(xié)議組同樣支持無連接的傳輸協(xié)議 UDP。RFC 768 定義的 UDP 協(xié)議是個(gè)無連接的、不可靠的協(xié)議,它能夠以最小的控制開銷為應(yīng)用層協(xié)議提供最基本的傳輸服務(wù)。UDP向應(yīng)用程序提供了一種發(fā)送封裝的原始 IP 數(shù)據(jù)報(bào)的方法,并且發(fā)送時(shí)無需建立連接。很多有一個(gè)請(qǐng)求和一個(gè)響應(yīng)的客戶服務(wù)器應(yīng)用程序采用 UDP,這樣可以避免建立和釋放連接的麻煩。一個(gè) UDP 數(shù)據(jù)段包括一個(gè) 8 字節(jié)的頭和數(shù)據(jù)部分。頭的格式如下:-圖 2.4 UDP 頭源端口和目的端口的作用與 TCP 中完全相同。UDP 長(zhǎng)度字段指明包括 8 字節(jié)的頭和數(shù)據(jù)在內(nèi)的數(shù)據(jù)段長(zhǎng)度。UDP 校驗(yàn)和字段包括偽 UDP
36、 頭,UDP 頭,UDP 數(shù)據(jù),如果有必要再補(bǔ)充為偶數(shù)個(gè)字節(jié)。該字段是可選的,而且在不用于運(yùn)算時(shí)記為 0。使用 UDP 協(xié)議時(shí),為了傳輸數(shù)據(jù),首先要設(shè)置客戶計(jì)算機(jī)的 LocalPort 屬性。然后服務(wù)器計(jì)算機(jī)只需將 RemoteHost 設(shè)置為客戶計(jì)算機(jī)的 IP 地址,并將 RemotePort 屬性設(shè)置為與客戶計(jì)算機(jī) LocalPort 屬性相同的端口,最后調(diào)用 SendData 方法來發(fā)送信息,而客戶計(jì)算機(jī)則使用 DataArrival 事件內(nèi)的 GetData 方法來獲取服務(wù)器計(jì)算機(jī)發(fā)送來的信息。第三章第三章WinsockWinsock 編程概述編程概述Winsock 就是 Window
37、s Socket 的簡(jiǎn)稱。最簡(jiǎn)單地說,Winsock 就是 Windows 應(yīng)用程序與 TCP/IP 之間的通信界面。當(dāng)然,Winsock 還支持其他一些網(wǎng)絡(luò)協(xié)議棧,例如,Novell的 IPX/SPX 協(xié)議?!,F(xiàn)在最新版本是 Winsock2.0 版。3.13.1套接字的概念套接字的概念Socket 是網(wǎng)絡(luò)上運(yùn)行的兩個(gè)程序間雙向通信連接的一端。Socket 這個(gè)詞的一般意義是自然的或人工的插口,如家用電器的電源插口等??蛻舫绦蚩梢韵?Socket 寫請(qǐng)求,服務(wù)器將處理此請(qǐng)求,然后通過 Socket 把結(jié)果返回給客戶。Socket 是一種底層連接??蛻魴C(jī)和服務(wù)器通過寫入到 Socket 的字節(jié)
38、流進(jìn)行通信。它們必須有共同的協(xié)議,也就是說,通過 Socket 相互傳送信息時(shí)所用的語言必須是協(xié)定好的。3.23.2套接字的種類套接字的種類流式套接字(SOCK_STREAM):提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無差錯(cuò)、無重復(fù)地發(fā)送,且按發(fā)送順序接收。內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無長(zhǎng)度限制。文件傳送協(xié)議(FTP)即使用流式套接字。數(shù)據(jù)報(bào)式套接字(SOCK_DGRAM):提供了一個(gè)無連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式被發(fā)-送,不提供無錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。網(wǎng)絡(luò)文件系統(tǒng)(NFS)使用數(shù)據(jù)報(bào)式套接字。原始套接字(SOCK_RAW): 該接口允許對(duì)較低
39、層協(xié)議,如 IP、ICMP 直接訪問。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備。3.33.3套接字的建立套接字的建立一個(gè)人要能夠收到別人打給他的電話,首先他要裝上一門電話。同樣,必須先建立 socket 以偵聽線路。這個(gè)過程包含幾個(gè)步驟。首先,要建立一個(gè)新的 socket,就像先裝上電話一樣。socket() 命令就完成這個(gè)工作。 因?yàn)?sockets 有幾種類型,因此要注明我們要建立什么類型的。我們要做一個(gè)選擇是 socket 的地址格式。如同電話有音頻和脈沖兩種形式一樣,socket 有兩個(gè)最重要的選項(xiàng)是 AF_UNIX 和 AF_INET。我們這里將著重于 AF_INET 方式
40、。AF_INET 使用 3 這樣被點(diǎn)號(hào)隔開的四個(gè)十進(jìn)制數(shù)字的地址格式。除了機(jī)器地址以外,還可以利用端口號(hào)允許每臺(tái)機(jī)器上的多個(gè) AF_INET socket。另外一個(gè)必須提供的參數(shù)是 socket 的類型。流式套接字提供了雙向、有序的、無重復(fù)的以及無記錄邊界的數(shù)據(jù)流服務(wù),適合處理大量數(shù)據(jù)。它是面向聯(lián)結(jié)的,必須建立數(shù)據(jù)傳輸鏈路,同時(shí)還必須對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行驗(yàn)證,確保數(shù)據(jù)的準(zhǔn)確性。因此,系統(tǒng)開銷較大。而數(shù)據(jù)報(bào)套接字也支持雙向的數(shù)據(jù)流,但不保證傳輸數(shù)據(jù)的準(zhǔn)確性,但保留了記錄邊界。由于數(shù)據(jù)報(bào)套接字是無聯(lián)接的,例如廣播時(shí)的聯(lián)接,所以并不保證接收端是否正在偵聽。數(shù)據(jù)報(bào)套接字傳輸效率比較高
41、。SOCK_RAW 是將套接字定義為原始套接字。原始套接字保存了數(shù)據(jù)包中的完整 IP 頭,前面兩種套接字只能收到用戶數(shù)據(jù)。因此可以通過原始套接字對(duì)數(shù)據(jù)進(jìn)行分析。在建立 socket 后,我們就要提供 socket 偵聽的地址了。bind() 函數(shù)來處理這件事情,將本地地址綁定到所創(chuàng)建的套接字上。然后我們要做的就是設(shè)置 SOCK_RAW 為SIO_RCVALL,以便接收所有的 IP 包。這里的 SIO_RCVALL 是指示 SOCK_RAW 接收所有的數(shù)據(jù)包。前面的工作基本上都是對(duì)原始套接字進(jìn)行設(shè)置,在將原始套接字設(shè)置完畢,使其能按預(yù)期目的工作時(shí),就可以通過 recv()函數(shù)從網(wǎng)卡接收數(shù)據(jù)了,接
42、收到的原始數(shù)據(jù)包存放在緩存 RecvBuf中,緩沖區(qū)長(zhǎng)度 BUFFER_SIZE 定義為 65535。然后就可以根據(jù)前面對(duì) IP 數(shù)據(jù)段頭、TCP 數(shù)據(jù)段頭的結(jié)構(gòu)描述而對(duì)捕獲的數(shù)據(jù)包進(jìn)行分析。-第四章第四章網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)4.14.1 網(wǎng)卡初始化網(wǎng)卡初始化本論文在介紹對(duì)網(wǎng)卡初始化的過程中,主要介紹以下幾項(xiàng)工作:獲得網(wǎng)卡的 MAC 地址,得到本機(jī)網(wǎng)卡的數(shù)目,Reset 網(wǎng)卡,通過 IP 地址得到機(jī)器名。在論文中把這幾項(xiàng)工作一起放到網(wǎng)卡初始化部分介紹,其中一個(gè)主要原因就是這些主要都是利用 NetBios 來完成的。下面我們來詳細(xì)介紹。.1 NetBios
43、NetBios 概述概述NetBios 是 PC 網(wǎng)絡(luò)中用得最為廣泛的網(wǎng)絡(luò)協(xié)議之一,大多數(shù)的局域網(wǎng)(LAN)產(chǎn)品都支持 NetBios。因此,將 NetBios 作為網(wǎng)絡(luò)協(xié)議的優(yōu)點(diǎn)是:基于 NetBios 網(wǎng)絡(luò)應(yīng)用程序并不需修改便能在其它各種網(wǎng)絡(luò)環(huán)境下運(yùn)行,用戶將享受到極大的靈活性,既使改用了其它網(wǎng)絡(luò)也能繼續(xù)使用原先的應(yīng)用程序,避免了重復(fù)投入。.2 利用利用 NetBiosNetBios 來初始化網(wǎng)卡來初始化網(wǎng)卡NetBios API 只包括了一個(gè)函數(shù),就叫做 NetBios。這個(gè)函數(shù)使用網(wǎng)絡(luò)控制塊NCB(network control block)結(jié)構(gòu)作為參數(shù),這個(gè)結(jié)構(gòu)告訴函
44、數(shù)要做什么。這個(gè)結(jié)構(gòu)中包括多個(gè)成員,如 ncb_command,ncb_num,ncb_length 等。-我們著重介紹一下 ncb_command。每一個(gè)發(fā)往 NetBios 的 NCB 都代表一項(xiàng)要執(zhí)行的動(dòng)作,具體執(zhí)行哪項(xiàng)動(dòng)作,由 ncb_command 字段的取值決定。我們使用三個(gè)命令來探測(cè) MAC地址:NCBENUM,NCBRESET,NCBASTAT。NCBENUM 列舉系統(tǒng)中網(wǎng)卡的數(shù)量。NCBRESET 重置網(wǎng)卡。NCBASTAT 接受本地或遠(yuǎn)程接口卡的狀態(tài)。使用此命令后,ncb_buffer 成員指向由ADAPTER_STATUS 結(jié)構(gòu)填充的緩沖區(qū),隨后是 NAME_BUFFER
45、 結(jié)構(gòu)的數(shù)組。具體在程序?qū)崿F(xiàn)的時(shí)候我們首先利用 NCBTRSRT 重置網(wǎng)卡,以便我們可以查詢。接著,可以發(fā)送 NCBASTAT 命令以獲取網(wǎng)卡的信息。向網(wǎng)卡發(fā)送 NCBENUM 命令,以獲取當(dāng)前機(jī)器的網(wǎng)卡信息,如網(wǎng)卡的個(gè)數(shù),網(wǎng)卡的編號(hào)等。最后對(duì)于每張網(wǎng)卡以其網(wǎng)卡編號(hào)為輸入編號(hào),獲取其 MAC 地址。4.24.2 原始套接字的設(shè)置原始套接字的設(shè)置具體設(shè)置步驟如下:1、WSAStartup(MAKEWORD(2, 2), &WSAData)查看 Winsock 的版本號(hào)。2、s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW)創(chuàng)建原始套接字3、setsockopt(sock
46、, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag);IP頭操作選項(xiàng),將 flag 設(shè)置成 TRUE,親自對(duì) IP 頭進(jìn)行處理。4、gethostname(char*)LocalName, sizeof(LocalName)-1);獲取本機(jī)名。5、pHost = gethostbyname(char*)LocalName)獲取本地 IP 地址。6、addr_in.sin_addr=*(in_addr *)phost-h_addr_list0; addr_in.sin_family = AF_INET; addr_in.sin_port = h
47、tons(57274);填充 SOCKADDR_IN,第一句將 IP 地址與本機(jī)綁定,然后定義 SOCKET 類型為 AF_INET,然后設(shè)定其端口號(hào),可以為任意值,但是最好不要和公共端口號(hào)相同。7、bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in);綁定原始套接字到本地網(wǎng)卡上。8、ioctlsocket(sock, SIO_RCVALL, &dwValue); 設(shè)置 SOCK_RAW 為 SIO_RCVALL,以便接收所有的 IP 包。其中 SIO_RCVALL 的定義為: #define SIO_RCVALL _WSAIOW(IOC_VENDOR
48、,1)。在對(duì)原始套接字設(shè)置完畢后就可以通過 reiv()從網(wǎng)卡接收數(shù)據(jù),接收到的原始數(shù)據(jù)包存放在緩存 buf 中。4.34.3 IPIP 包的協(xié)議分析包的協(xié)議分析-前面在第二章已經(jīng)對(duì) IP 頭,TCP 頭,UDP 頭的結(jié)構(gòu)進(jìn)行了描述。以下我們將利用前面所介紹的結(jié)構(gòu)特點(diǎn)對(duì)所捕獲的數(shù)據(jù)包進(jìn)行分析:IP 報(bào)頭是由一個(gè)_iphdr 的類來定義的,在這個(gè)類中定義了 11 項(xiàng):1、ver_len:版本,長(zhǎng)度為 4 位;2、type:服務(wù)類型,長(zhǎng)度為 8 位;3、length2:該數(shù)據(jù)報(bào)的總長(zhǎng),16 位;4、id2:報(bào)文標(biāo)識(shí),16 位;5、flag_offset2:分段偏移,16 位,包括 3 位標(biāo)志,13
49、 位分段偏移;6、Time:生存時(shí)間,8 位;7、Protocol:協(xié)議類型,8 位;8、crc_val2:頭校驗(yàn)和,16 位;9、src_addr4:源地址,32 位10、tar_addr4:目的地址,32 位11、options4:選項(xiàng),32 位與 IP 頭定義相同,TCP 報(bào)頭的定義了一個(gè)_tcphdr 類,在這個(gè)類中定義了 TCP 頭的 9項(xiàng):1、source_port2:發(fā)送端端口號(hào),16 位;2、dest_port2:接收端端口號(hào),16 位;3、sequence_no4:順序號(hào),32 位;4、ack_no4:確認(rèn)號(hào),32 位;5、offset_reser_con2:數(shù)據(jù)偏移位,16
50、 位;6、window2:窗口大小,16 位;7、checksum2:校驗(yàn)和,16 位;8、urgen_pointer2:緊急指針,16 位;9、options3:選項(xiàng),32 位;對(duì) UDP 頭的定義,與 TCP 頭的定義基本一致,這里就不再重復(fù)我們利用 RFC1700 的協(xié)議定義,分別給 IP 協(xié)議,TCP 協(xié)議和 UDP 協(xié)議進(jìn)行定義:1、#define PROTOCOL_IP 4,當(dāng) IP 頭中 Protocol 為 4 時(shí),這是一個(gè) IP 數(shù)據(jù)包。2、PROTOCOL_TCP 6,當(dāng) IP 頭中 Protocol 為 6 時(shí),這是一個(gè) TCP 數(shù)據(jù)包。3、#define PROTOCO
51、L_UDP 17,當(dāng) IP 頭中 Protocol 為 17 時(shí),這是一個(gè) UDP 數(shù)據(jù)包。-當(dāng)函數(shù) recv()執(zhí)行時(shí),開始捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,定義一個(gè)名為 len 的緩沖區(qū),當(dāng)len0 時(shí),說明接收到數(shù)據(jù),開始進(jìn)行數(shù)據(jù)包分析。定義一個(gè)名為 ip 的指針,指向 IP 頭的第一個(gè)位,定義一個(gè)名為 tcp 的指針指向地址(IP 頭的首地址IP 頭的長(zhǎng)度)的位置。這兩個(gè)指針的定義分別定義了 IP 頭和 TCP 頭。然后在 IP 頭分析 Protocol,如果滿足上述定義的 TCP 頭,UDP 頭的情況,利用函數(shù)GetProtocolTxt()分別輸出“TCP”“UDP”。將 buf 清 0,得到一
52、個(gè) 16 位的空棧,然后將 ip 指針分別指向 src_addr0,src_addr1, src_addr2 ,src_addr3,彼此之間用“.”間隔開,得到數(shù)據(jù)包的源地址。同樣的,將 ip 指向 tar_addr0,tar_addr1,tar_addr2,tar_addr3,用“.”間隔開,得到數(shù)據(jù)包的目的地址。然后在分別由 src_port,dest_port,datalen 分別讀出數(shù)據(jù)包的源端口,目的端口,和數(shù)據(jù)包長(zhǎng)度。Datalen 由 length0length1。32最后,將該程序進(jìn)行測(cè)試,該程序已經(jīng)具備了網(wǎng)絡(luò)流量測(cè)量的基本功能:捕獲數(shù)據(jù)包,對(duì)數(shù)據(jù)包進(jìn)行 IP 層以上的分析。4.44.4 結(jié)果與測(cè)試結(jié)果與測(cè)試為了更加
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省鹽城市、南京市2024-2025學(xué)年度第一學(xué)期期末調(diào)研測(cè)試高三政治試題(含答案)
- 海南省儋州市2024-2025學(xué)年九年級(jí)上學(xué)期期末道德與法治試題(含答案)
- 第13課 五四運(yùn)動(dòng)(分層作業(yè))(解析版)
- 燃?xì)夥?wù)質(zhì)量承諾書模板
- 電動(dòng)工具操作安全意識(shí)
- 煙草物流配送:天價(jià)煙管理辦法
- 信息技術(shù)票據(jù)處理流程
- 航運(yùn)業(yè)務(wù)員聘用合同
- 企業(yè)并購(gòu)招投標(biāo)委托協(xié)議
- 咨詢服務(wù)廣告施工合同文本格式
- 行政前臺(tái)年終總結(jié)述職報(bào)告
- 急性腎損傷患者的護(hù)理措施
- 小學(xué)學(xué)校發(fā)展三年規(guī)劃:傾力打造紅色品牌 努力構(gòu)建和諧學(xué)校
- 無人機(jī)制造關(guān)鍵技術(shù)-洞察分析
- 2024年全國(guó)網(wǎng)絡(luò)安全職工職業(yè)技能競(jìng)賽備賽試題庫(kù)(含答案)
- 2020年會(huì)計(jì)繼續(xù)教育完整考試題庫(kù)1000題(答案)
- 倉(cāng)庫(kù)安全培訓(xùn)
- 《物業(yè)客服培訓(xùn)教程》課件
- 內(nèi)審和管理評(píng)審培訓(xùn)課件
- 2024年湖北省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 自然辯證法習(xí)題及答案
評(píng)論
0/150
提交評(píng)論