網(wǎng)絡(luò)嗅探技術(shù)探索與設(shè)計(jì)畢業(yè)論文_第1頁(yè)
網(wǎng)絡(luò)嗅探技術(shù)探索與設(shè)計(jì)畢業(yè)論文_第2頁(yè)
網(wǎng)絡(luò)嗅探技術(shù)探索與設(shè)計(jì)畢業(yè)論文_第3頁(yè)
網(wǎng)絡(luò)嗅探技術(shù)探索與設(shè)計(jì)畢業(yè)論文_第4頁(yè)
網(wǎng)絡(luò)嗅探技術(shù)探索與設(shè)計(jì)畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、. . 裝裝 訂訂 線(xiàn) . . . 山東農(nóng)業(yè)大學(xué) 畢 業(yè) 論 文 題目: 網(wǎng)絡(luò)嗅探技術(shù)探索與設(shè)計(jì) 院 部 信息科學(xué)與工程學(xué)院 專(zhuān)業(yè)班級(jí) 網(wǎng)絡(luò)工程 2 班 屆 次 2012 屆 學(xué)生姓名 學(xué) 號(hào) 指導(dǎo)教師 二 一 二 年 六 月 五 日 網(wǎng)絡(luò)嗅探器技術(shù)探索與設(shè)計(jì)網(wǎng)絡(luò)嗅探器技術(shù)探索與設(shè)計(jì) exploration and design of the network sniffer 專(zhuān)業(yè) speciality 網(wǎng)絡(luò)工程 network engineering 學(xué)生 undergraduate 指導(dǎo)教師 supervisor 山東農(nóng)業(yè)大學(xué) 二一 二 年 六月 shandong agricultural

2、university june, 2012 目目 錄錄 1 引言.1 1.1 課題背景.1 1.2 網(wǎng)絡(luò)安全現(xiàn)狀.2 1.3 開(kāi)發(fā)意義.3 2 關(guān)于網(wǎng)絡(luò)嗅探.4 2.1 網(wǎng)絡(luò)嗅探概念.4 2.2 以太網(wǎng)嗅探的原理.4 2.3 winpcap 簡(jiǎn)介 .6 3 系統(tǒng)概述.9 3.1 實(shí)現(xiàn)目標(biāo).9 3.2 開(kāi)發(fā)環(huán)境分析.9 3.2.1 c+語(yǔ)言簡(jiǎn)介.9 3.2.2 開(kāi)發(fā)工具簡(jiǎn)介.9 4 算法分析.11 4.1 各種類(lèi)型報(bào)文對(duì)象的構(gòu)造.11 4.2 過(guò)濾方法.12 5 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn).14 5.1 網(wǎng)絡(luò)協(xié)議的分析與實(shí)現(xiàn).14 5.1.1 數(shù)據(jù)鏈路層.14 5.1.2 網(wǎng)絡(luò)層.14 5.1.3 運(yùn)輸層.

3、19 5.2 數(shù)據(jù)包的捕獲.22 5.3 數(shù)據(jù)包的分析.24 5.4 實(shí)現(xiàn)過(guò)程中的難點(diǎn).26 5.5 嗅探程序運(yùn)行截圖.27 6 總結(jié).30 參考文獻(xiàn).31 致謝.32 contents 1 introduction.1 1.1 subject background.1 1.2 network security situation .2 1.3 development of meaning .3 2 network sniffer.4 2.1 the concept of network sniffer .4 2.2 ethernet sniffing the principle.4 2.3

4、winpcap profile.6 3 system overview.9 3.1 goals.9 3.2 analysis of development environment .9 3.2.1 c + + language profile.9 3.2.2 development tool profile.9 4 algorithm analysis .11 4.1 various types of packets the objects constructor.11 4.2 filtering methods.12 5 detailed design and implementation.

5、14 5.1 analysis and implementation of network protocol.14 5.1.1 data link layer .14 5.1.2 network layer .14 5.1.3 transport layer .19 5.2 packet capture.22 5.3 packet analysis.24 5.4 realize the difficulty in the process .26 5.5 sniffer program running screenshot.27 6 summary.30 references.31 acknow

6、ledgement.32 網(wǎng)絡(luò)嗅探器技術(shù)探索與設(shè)計(jì) 2008 級(jí)計(jì)算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師 【摘要摘要】隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)的安全問(wèn)題也顯得越來(lái)越重要。網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù) 是很多網(wǎng)絡(luò)安全軟件實(shí)現(xiàn)的基礎(chǔ),也是設(shè)計(jì)網(wǎng)絡(luò)分析軟件的基礎(chǔ),所以研究相關(guān)的數(shù)據(jù)包嗅探 和分析技術(shù)對(duì)保證網(wǎng)絡(luò)的安全運(yùn)行是很有現(xiàn)實(shí)意義的。網(wǎng)絡(luò)監(jiān)聽(tīng)是一種監(jiān)視網(wǎng)絡(luò)狀態(tài)、數(shù)據(jù)流 程以及網(wǎng)絡(luò)上信息傳輸?shù)能浖芾砉ぞ撸梢詫⒕W(wǎng)絡(luò)界面設(shè)定成監(jiān)聽(tīng)模式,并且可以截獲網(wǎng) 絡(luò)上所傳輸?shù)男畔?。?shù)據(jù)包捕獲技術(shù)是設(shè)計(jì)網(wǎng)絡(luò)分析軟件的基礎(chǔ),而 winpcap 則是 windows 系 統(tǒng)中實(shí)現(xiàn)的一個(gè)優(yōu)秀的包捕獲架構(gòu)。文中結(jié)合該軟件包的結(jié)構(gòu)與功能對(duì)包

7、捕獲原理進(jìn)行了詳細(xì) 的分析,并介紹了其在網(wǎng)絡(luò)安全監(jiān)控系統(tǒng)中的應(yīng)用。該系統(tǒng)的基本原理是通過(guò)調(diào)用 winpcap 庫(kù) 捕獲本地網(wǎng)絡(luò)上的所有數(shù)據(jù)包,然后對(duì)數(shù)據(jù)包進(jìn)行協(xié)議分析,從而可以實(shí)時(shí)地監(jiān)控網(wǎng)絡(luò)。 【關(guān)鍵詞關(guān)鍵詞】網(wǎng)絡(luò)嗅探;winpcap;數(shù)據(jù)包捕獲;協(xié)議分析 exploration and design of the network sniffer 【abstract】with the rapid development and extensive application of computer network technology, the security problem of networ

8、k becomes more important. network sniffer is the base of many network safety softwares,and it is also the base of network analysis. so,the research of the sniffer and analysis of network is very helpful to the safety of the network. network sniffer is a way which is used in network monitor, load ana

9、lysis; at the same time it is also a way which is used by hacker to get the information illegally. network sniffer tools snap packets to get the networks current status by the shared characteristic of the network transmission medium.packet capturing technology is the basis for designing analyzing so

10、ftware. winpcap is one of the excellent packet capturing architectures under windows. this paper analyzes packet capturing principle in detail combined with the structure and functions of the software and introduces its application in designing a network security and watch system. the fundamental pr

11、inciple of this system is to capture all packets of the local network using winpcap library, and perform protocol analyzing and decoding on these packets, so can monitor the network on real-time and find its problem and alarm automatically. the result from the application in lan also confirms that t

12、he system is steady and very effective. 【key words】network sniffer; winpcap; packet capture; protocol analysis 1 引言 嗅探器是一種利用計(jì)算機(jī)網(wǎng)絡(luò)接口監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)運(yùn)行,截獲網(wǎng)絡(luò)數(shù)據(jù)的工具, 可用于網(wǎng)絡(luò)管理,網(wǎng)絡(luò)協(xié)議分析以及網(wǎng)絡(luò)安全等眾多方面。在網(wǎng)絡(luò)攻防技術(shù)中, 嗅探器技術(shù)是最為基礎(chǔ)的一種技術(shù)。從攻方的角度,黑客可以利用嗅探器程序非 法獲取網(wǎng)絡(luò)中傳輸?shù)拇罅棵舾行畔ⅲ缳~號(hào)和口令等,對(duì)網(wǎng)絡(luò)安全極具威脅;從 防守的角度,嗅探技術(shù)是基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)的最底層環(huán)節(jié),是整個(gè)系統(tǒng)的 數(shù)據(jù)來(lái)源。

13、 1.11.1 課題背景課題背景 隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)己成為人們生活中的必備工具,計(jì)算 機(jī)網(wǎng)絡(luò)在政治、經(jīng)濟(jì)、軍事、社會(huì)生活等各個(gè)領(lǐng)域正發(fā)揮著日益重要的作用,人 們對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的依賴(lài)性也大大增強(qiáng),一些網(wǎng)絡(luò)新業(yè)務(wù)如電子商務(wù)、電子政務(wù)、 網(wǎng)絡(luò)支付等,這些都對(duì)網(wǎng)絡(luò)安全提出了較高的要求。但是由于計(jì)算機(jī)網(wǎng)絡(luò)具有連 接形式多樣性、開(kāi)放性、互聯(lián)性等特點(diǎn), 而且多數(shù)都采用 tcp/tp 協(xié)議,而 tcp/tp 在設(shè)計(jì)上力求運(yùn)行效率,并建立在相互信任的基礎(chǔ)上,其本身就是造成網(wǎng) 絡(luò)不安全的主要因素,這也是 tcp/tp 協(xié)議在設(shè)計(jì)上的缺陷,從而導(dǎo)致針對(duì)網(wǎng)絡(luò)系 統(tǒng)的攻擊事件頻繁發(fā)生,所以網(wǎng)絡(luò)安全已成為網(wǎng)

14、絡(luò)建設(shè)的一個(gè)非常重要的方面。 現(xiàn)在人們對(duì)計(jì)算機(jī)信息安全要求越來(lái)越高,隨著計(jì)算機(jī)網(wǎng)絡(luò)的資源共享進(jìn)一步加 強(qiáng),隨之而來(lái)的網(wǎng)絡(luò)安全問(wèn)題使得計(jì)算機(jī)網(wǎng)絡(luò)安全保護(hù)將會(huì)變得越來(lái)越重要。所 以當(dāng)我們?cè)谙硎芫W(wǎng)絡(luò)所帶來(lái)的方便和快捷的同時(shí)也要認(rèn)識(shí)到網(wǎng)絡(luò)安全所面臨的嚴(yán) 峻考驗(yàn)。 網(wǎng)絡(luò)監(jiān)聽(tīng)是信息安全領(lǐng)域內(nèi)一項(xiàng)非常重要和實(shí)用的技術(shù),它的起源是網(wǎng)絡(luò)管 理員為了診斷網(wǎng)絡(luò)故障的需要,而監(jiān)聽(tīng)網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)信息。在網(wǎng)絡(luò)管理和維 護(hù)中,網(wǎng)絡(luò)管理和維護(hù)人員常常利用網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)監(jiān)控網(wǎng)絡(luò)當(dāng)前的信息狀況、網(wǎng) 絡(luò)流量,進(jìn)行網(wǎng)絡(luò)訪(fǎng)問(wèn)統(tǒng)計(jì)分析等等。更重要的是,可以發(fā)現(xiàn)網(wǎng)絡(luò)中存在的漏洞 和隱患,提高網(wǎng)絡(luò)和系統(tǒng)的安全性。但在實(shí)際應(yīng)用中,網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)

15、往往被黑客 加以利用,用來(lái)竊取網(wǎng)絡(luò)用戶(hù)的機(jī)密資料。對(duì)于一般網(wǎng)站來(lái)說(shuō),被網(wǎng)絡(luò)監(jiān)聽(tīng)往往 意味著用戶(hù)個(gè)人隱私資料的丟失;而對(duì)于金融機(jī)構(gòu),惡意的網(wǎng)絡(luò)監(jiān)聽(tīng)更會(huì)帶來(lái)難 以彌補(bǔ)的金錢(qián)和信用損失。 在防范網(wǎng)絡(luò)攻擊方面,通過(guò)數(shù)據(jù)截取及分析輸出結(jié)果可以捕獲到透過(guò)防火墻 而進(jìn)入網(wǎng)絡(luò)的非法數(shù)據(jù),成功的監(jiān)視記錄黑客的入侵過(guò)程,保障網(wǎng)絡(luò)的安全。而 且數(shù)據(jù)截取和協(xié)議分析是入侵檢測(cè)系統(tǒng)的重要部分,是入侵檢測(cè)系統(tǒng)的最基礎(chǔ)的 環(huán)節(jié)。因此網(wǎng)絡(luò)監(jiān)聽(tīng)無(wú)論是在網(wǎng)絡(luò)攻擊還是安全防御方面都扮演著重要的角色。 1.21.2 網(wǎng)絡(luò)安全現(xiàn)狀網(wǎng)絡(luò)安全現(xiàn)狀 通過(guò)對(duì)國(guó)內(nèi)外的文獻(xiàn)調(diào)研發(fā)現(xiàn),網(wǎng)絡(luò)嗅探中的數(shù)據(jù)包捕獲主要可以分為兩種 方式 ,一種是基于操作系統(tǒng)

16、內(nèi)核的,如 unix、linux 系統(tǒng),它們系統(tǒng)內(nèi)核本身就 提供包捕獲機(jī)制;第二種就是基于外界提供的驅(qū)動(dòng)程序庫(kù),如 unix 下的 libpcap 和 windows 下的 winpcap。 由操作系統(tǒng)內(nèi)核提供的捕獲機(jī)制主要有以下四種:bpf(berkeley packet filter), dlpi(data link provider internet interface),nit(network interface tap), sockpacket 套接口。其中 bpf 由基于 bsd 的 unix 系統(tǒng)內(nèi)核所實(shí)現(xiàn),而 dlpi 是 solaris 系統(tǒng)的子系統(tǒng),對(duì)于 nit 則是 su

17、nos4 系統(tǒng)的一部分,但在 solaris 系統(tǒng)中已經(jīng)被 dlpi 取代,linux 系統(tǒng)內(nèi)核則實(shí)現(xiàn)了 sock packet 的包捕獲機(jī)制。 從性能上看,bpf 比 dlpi 及 nit 效率要高的多,而 sock packet 最差。 winpcap 是一個(gè)基于 win32 的開(kāi)源的包捕獲驅(qū)動(dòng)架構(gòu),它彌補(bǔ)了 windows 系 統(tǒng)內(nèi)核本身提供很少包捕獲接口的劣勢(shì),可以直接捕獲到鏈路層的數(shù)據(jù)幀?;?winpcap 開(kāi)發(fā)的監(jiān)聽(tīng)程序具有很好的可移植性,可以很容易的移植到 unix 系統(tǒng)上, 所以在 windows 系統(tǒng)上基于 winpcap 來(lái)開(kāi)發(fā)嗅探軟件是一種很好的選擇。 網(wǎng)絡(luò)嗅探技術(shù)的出

18、現(xiàn)已經(jīng)有較長(zhǎng)一段時(shí)間了,因?yàn)?unix 類(lèi)系統(tǒng)內(nèi)核提供了對(duì) 網(wǎng)絡(luò)嗅探很好的支持,而 windows 內(nèi)核卻沒(méi)有,導(dǎo)致 unix 類(lèi)系統(tǒng)下的網(wǎng)絡(luò)嗅探產(chǎn) 品比 windows 下的多?,F(xiàn)在已經(jīng)有一些 unix 下的嗅探器被移植到了 windows 下, 目前比較流行的網(wǎng)絡(luò)嗅探器有: (1)sniffit:由lawrence berkeley實(shí)驗(yàn)室開(kāi)發(fā),運(yùn)行于solaris、sgi和linux等 平臺(tái)。可以選擇源、目標(biāo)地址或地址集合,還可選擇監(jiān)聽(tīng)的端口,協(xié)議和網(wǎng)絡(luò)接 口等。 (2)netxray:在windows9x和windowsnt上,netxray是一個(gè)功能強(qiáng)大、 使用方便的協(xié)議分析和網(wǎng)絡(luò)監(jiān)控

19、工具。它是一個(gè)優(yōu)秀的軟件,能監(jiān)控多個(gè)網(wǎng)段, 并且允許多監(jiān)控實(shí)例存在,同時(shí)還能捕捉所需要的任何類(lèi)型的報(bào)文。使用netxray 還可以設(shè)置許多過(guò)濾條件,而且其操作界面也比較漂亮。 (3)winpcap:winpcap是由伯克利分組捕獲庫(kù)派生而來(lái)的分組捕獲庫(kù),它是 在windows 操作平臺(tái)上來(lái)實(shí)現(xiàn)對(duì)底層包的截取過(guò)濾。winpcap為用戶(hù)級(jí)的數(shù)據(jù)包 提供了windows下的一個(gè)平臺(tái)。 目前使用的最多的是sniffit、winpcap監(jiān)聽(tīng)軟件,由于在unix和linux系統(tǒng)中, 發(fā)送這些命令需要超級(jí)用戶(hù)的權(quán)限,這一點(diǎn)限制了在unix系統(tǒng)中的使用,普通用 戶(hù)是不能進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)的,只有獲得超級(jí)用戶(hù)權(quán)限,才

20、能進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng),而在 windows操作系統(tǒng)中,則沒(méi)有這個(gè)限制,只要運(yùn)行這一類(lèi)的監(jiān)聽(tīng)軟件即可;目前網(wǎng) 絡(luò)數(shù)據(jù)捕獲器大多數(shù)是基于過(guò)濾器技術(shù)來(lái)實(shí)現(xiàn)的,大多數(shù)的過(guò)濾程序都是建立在 伯克利實(shí)驗(yàn)室的libpcap基礎(chǔ)之上的。因此本文涉及的是在以太網(wǎng)環(huán)境下并在 windows操作系統(tǒng)中,使用數(shù)據(jù)捕獲器winpcap這一軟件實(shí)現(xiàn)對(duì)底層數(shù)據(jù)進(jìn)行監(jiān)聽(tīng)。 由監(jiān)聽(tīng)技術(shù)發(fā)展的現(xiàn)狀來(lái)看,目前主流的網(wǎng)絡(luò)監(jiān)聽(tīng)工具軟件幾乎都是國(guó)外生 產(chǎn)的軟件。隨著中國(guó)信息技術(shù)的發(fā)展,監(jiān)聽(tīng)系統(tǒng)必將大有用武之地,因此監(jiān)聽(tīng)技 術(shù)的研究勢(shì)在必行。 1.31.3 開(kāi)發(fā)意義開(kāi)發(fā)意義 本次設(shè)計(jì)只是對(duì)抓取到的本機(jī)在網(wǎng)絡(luò)中的通信數(shù)據(jù),比如說(shuō)協(xié)議類(lèi)型,源、目

21、的地址和端口、數(shù)據(jù)包的大小等加以分析,而無(wú)法做到像 sniffer 那種成熟的嗅探 器所擁有的強(qiáng)大功能。作為從事網(wǎng)絡(luò)技術(shù)方面的人員來(lái)說(shuō),要想有效地利用它、 防范它,就得深入地學(xué)習(xí)、分析網(wǎng)絡(luò)嗅探技術(shù)。最為重要的是,對(duì)于網(wǎng)絡(luò)嗅探器 的設(shè)計(jì)與實(shí)現(xiàn),使我對(duì)網(wǎng)絡(luò)通信,數(shù)據(jù)傳輸和網(wǎng)絡(luò)信息安全等有了切身的體會(huì)與 融入,學(xué)以致用,是不斷提高自我的一種有效途徑。 2 關(guān)于網(wǎng)絡(luò)嗅探 2.12.1 網(wǎng)絡(luò)嗅探概念網(wǎng)絡(luò)嗅探概念 網(wǎng)絡(luò)嗅探器又稱(chēng)為網(wǎng)絡(luò)監(jiān)聽(tīng)器,簡(jiǎn)稱(chēng)為 sniffer 子系統(tǒng),放置于網(wǎng)絡(luò)節(jié)點(diǎn)處, 對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)幀進(jìn)行捕獲的一種被動(dòng)監(jiān)聽(tīng)手段,是一種常用的收集有用數(shù)據(jù)的 方法,這些數(shù)據(jù)可以是用戶(hù)的賬號(hào)和密碼,可以

22、是一些商用機(jī)密數(shù)據(jù)等等。 在應(yīng)用中,程序員可以使用嗅探器來(lái)監(jiān)視網(wǎng)絡(luò)程序的運(yùn)行狀態(tài);網(wǎng)絡(luò)管理員 可以利用網(wǎng)絡(luò)嗅探器獲取網(wǎng)絡(luò)的當(dāng)前流量狀況;而黑客們常利用 sniffer 技術(shù)來(lái)截 獲用戶(hù)的口令。當(dāng)信息以明文的形式在網(wǎng)絡(luò)上傳輸時(shí),便可以使用網(wǎng)絡(luò)嗅探的方 式來(lái)進(jìn)行攻擊。將網(wǎng)絡(luò)接口設(shè)置在混雜模式,便可以源源不斷地將網(wǎng)上傳輸?shù)男?息截獲。 網(wǎng)絡(luò)嗅探可以在網(wǎng)上的任何一個(gè)位置實(shí)施,如局域網(wǎng)中的一臺(tái)主機(jī)、網(wǎng)關(guān)或 遠(yuǎn)程網(wǎng)的調(diào)制解調(diào)器之間等。黑客用得最多的是截獲用戶(hù)的口令。當(dāng)黑客成功地 登錄進(jìn)一臺(tái)網(wǎng)絡(luò)上的主機(jī),并取得了該主機(jī)的超級(jí)用戶(hù)權(quán)限后,往往要擴(kuò)大戰(zhàn)果, 嘗試登錄或者奪取網(wǎng)絡(luò)中其他主機(jī)的控制權(quán)。而網(wǎng)絡(luò)嗅探則是

23、一種最簡(jiǎn)單且最有 效的方法,能輕易地獲得用其他方法很難獲得的信息。 在網(wǎng)絡(luò)上,嗅探效果最好的地方是在網(wǎng)關(guān)、路由器一類(lèi)的設(shè)備處,通常由網(wǎng) 絡(luò)管理員來(lái)操作。使用最方便的是在一個(gè)以太網(wǎng)中的任何一臺(tái)上網(wǎng)的主機(jī)上,這 也是大多數(shù)黑客的做法。 2.22.2 以太網(wǎng)嗅探的原理以太網(wǎng)嗅探的原理 以太網(wǎng)(ethernet)具有共享介質(zhì)的特性,信息在網(wǎng)絡(luò)中以明文的形式傳輸, 當(dāng)網(wǎng)絡(luò)適配器設(shè)置為混雜模式(promiscuous)時(shí),以太網(wǎng)共享介質(zhì)和廣播信道爭(zhēng) 用的方式,使得監(jiān)聽(tīng)系統(tǒng)與正常通信的網(wǎng)絡(luò)能夠并聯(lián)連接,以太網(wǎng)適配器只要 “聽(tīng)到”有幀在以太網(wǎng)上傳輸就都悄悄地接收下來(lái),而不管這些幀是發(fā)往哪個(gè)站。 這樣做實(shí)際上是

24、“竊聽(tīng)”其他站點(diǎn)的通信而并不中斷其他站點(diǎn)的通信。ieee802.3 標(biāo)準(zhǔn)的以太網(wǎng)采用的是持續(xù) csma 的方式,正是由于以太網(wǎng)采用這種廣播信道爭(zhēng) 用的方式,使得各個(gè)站點(diǎn)都可以獲得其他站點(diǎn)發(fā)送的數(shù)據(jù)。運(yùn)用這一原理使得信 息捕獲系統(tǒng)能夠攔截我們所要的信息,這是捕獲數(shù)據(jù)包的物理基礎(chǔ)。 以太網(wǎng)是一種總線(xiàn)型的網(wǎng)絡(luò),從邏輯上來(lái)看是由一條總線(xiàn)和多個(gè)連接在總線(xiàn) 上的站點(diǎn)所組成的,各個(gè)站點(diǎn)采用上面提到的 csma/cd 協(xié)議進(jìn)行信道的爭(zhēng)奪和 共享。由每個(gè)站點(diǎn)網(wǎng)卡來(lái)實(shí)現(xiàn)這種功能。網(wǎng)卡主要的工作是完成對(duì)于總線(xiàn)當(dāng)前狀 態(tài)的探測(cè),確定是否進(jìn)行數(shù)據(jù)的傳送,判斷每個(gè)物理數(shù)據(jù)幀目的地是否為本站地 址,如果不匹配,則說(shuō)明不是發(fā)

25、送到本站的而將它丟棄。如果是為本地地址,就 接收該數(shù)據(jù)幀,進(jìn)行物理數(shù)據(jù)幀的 crc 校驗(yàn),然后將數(shù)據(jù)幀提交給 llc 子層。 傳輸層 網(wǎng)絡(luò)層 物理層 鏈路層 合法端口號(hào) 合法 ip 地址 合法 mac 地址 yes yes yes no no no 丟棄 丟棄 丟棄 數(shù)據(jù)包 圖圖 2-12-1 正常的數(shù)據(jù)包過(guò)濾機(jī)制正常的數(shù)據(jù)包過(guò)濾機(jī)制 網(wǎng)卡一般有四種接收數(shù)據(jù)幀的狀態(tài): 單一模式(unicast):是指網(wǎng)卡在工作時(shí),只接收數(shù)據(jù)幀中目的地址是本機(jī) mac 地址的數(shù)據(jù)幀。 廣播模式(broadcast):該模式下的網(wǎng)卡能夠接收網(wǎng)絡(luò)中的廣播信息。 組播模式(multicast):設(shè)置在該模式下的網(wǎng)卡能

26、夠接收同一組的播數(shù)據(jù)。 混雜模式(promiscuous):在這種模式下的網(wǎng)卡能夠接收一切通過(guò)它的數(shù)據(jù),而 不管該數(shù)據(jù)是否是傳給它的。 網(wǎng)卡的缺省工作模式包含廣播模式和單一模式,即它只接收廣播幀和發(fā)給自 己的幀。如果采用混雜模式,一個(gè)站點(diǎn)的網(wǎng)卡將接收同一個(gè)網(wǎng)絡(luò)內(nèi)所有站點(diǎn)所發(fā) 送的數(shù)據(jù)包,這樣就能達(dá)到對(duì)于網(wǎng)絡(luò)嗅探的目的。 非混雜模 式 其他硬 件 地址 混雜模式 地址匹配 數(shù)據(jù)包 數(shù)據(jù)包 mac 地址 本地接口硬件地址 產(chǎn)生中斷 通知 cpu 接口配置模 式 產(chǎn)生中斷 通知 cpu 不處理, 丟棄 圖圖 2-22-2 網(wǎng)卡模式圖解網(wǎng)卡模式圖解 2.32.3 winpcapwinpcap 簡(jiǎn)介簡(jiǎn)介

27、 winpcap 是由意大利的 fulvio risso 和 loris degioanni 等人實(shí)現(xiàn)的應(yīng)用于 win32 平臺(tái)數(shù)據(jù)包捕獲與分析的一種驅(qū)動(dòng)軟件包,并提供了在 windows 操作系統(tǒng) 下的開(kāi)放源代碼,是一套高性能 api 封裝庫(kù),有一套標(biāo)準(zhǔn)的抓包接口專(zhuān)門(mén)用于網(wǎng) 絡(luò)數(shù)據(jù)包的截獲,并在其基礎(chǔ)上增加了自定義數(shù)據(jù)包的發(fā)送能力以及針對(duì) win32 平臺(tái)的擴(kuò)展函數(shù),獨(dú)立于 windows 操作系統(tǒng)的協(xié)議棧。 winpcap 為 win32 平臺(tái)提供了一個(gè)公共的接口 packetdll,使得程序可以運(yùn) 行在不同版本的 windows 平臺(tái)上,而無(wú)需重新編譯。另外,winpcap 的標(biāo)準(zhǔn)抓包

28、接口與 libpcap 兼容,使系統(tǒng)便于向 unixlinux 平臺(tái)移植。winpcap 的主要功能 在于獨(dú)立于主機(jī)協(xié)議如 tcp/ip 協(xié)議發(fā)送和接收原始數(shù)據(jù)包,也就是說(shuō),winpcap 不能阻塞、過(guò)濾或控制其他應(yīng)用程序?qū)?shù)據(jù)報(bào)的收發(fā),它只是繞過(guò)系統(tǒng)原有的協(xié) 議棧監(jiān)聽(tīng)網(wǎng)絡(luò)上傳送的數(shù)據(jù)包。因此它不能用于 qos(quality of service)調(diào)度程序 或個(gè)人防火墻。winpcap 有以下幾方面的功能: (1)捕獲原始數(shù)據(jù)包,無(wú)論它是發(fā)往某臺(tái)機(jī)器的,還是在其他設(shè)備(共享媒介) 上進(jìn)行交換的。 (2)在數(shù)據(jù)包發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)包過(guò)濾 掉。 (3)將原始數(shù)據(jù)包

29、通過(guò)網(wǎng)絡(luò)發(fā)送出去。 (4)收集并統(tǒng)計(jì)網(wǎng)絡(luò)流量信息。 winpcap 的基本結(jié)構(gòu)沿用了 bpf( berkeley packet filter,伯克利數(shù)據(jù)包過(guò)濾器) 幾個(gè)最重要的模塊:過(guò)濾器,內(nèi)核級(jí)和用戶(hù)級(jí)的緩存,用戶(hù)級(jí)上的兩種庫(kù)。 winpcap 的結(jié)構(gòu)主要包括三部分: (1) 內(nèi)核級(jí)的網(wǎng)絡(luò)組包過(guò)濾器(npf) 在內(nèi)核級(jí)的部分即 npf 是一個(gè)經(jīng)過(guò)優(yōu)化的內(nèi)核模式驅(qū)動(dòng)器,用于對(duì)數(shù)據(jù)包進(jìn) 行過(guò)濾,并將這些數(shù)據(jù)包原封不動(dòng)地傳給用戶(hù)級(jí)模塊,在這個(gè)過(guò)程中包括了一些 操作系統(tǒng)特有的代碼,如時(shí)間戳、數(shù)據(jù)包長(zhǎng)度等信息。 (2) 數(shù)據(jù)包低級(jí)驅(qū)動(dòng)程序庫(kù)(packet.dll) 數(shù)據(jù)包驅(qū)動(dòng)程序庫(kù)是與 libpcap

30、 相兼容的一組用戶(hù)級(jí)的函數(shù)庫(kù)。packet.dll 用 于在 win32 平臺(tái)上為數(shù)據(jù)包驅(qū)動(dòng)程序提供一個(gè)公共的接口。由于不同的 windows 系統(tǒng)都有自己的內(nèi)核模塊和用戶(hù)層模塊,而 packet.dll 可以解決這些不同,提供一 個(gè)與系統(tǒng)無(wú)關(guān)的 api。基于 packet.dll 開(kāi)發(fā)的數(shù)據(jù)包截獲程序可以運(yùn)行于不同的 win32 平臺(tái)而不必重新進(jìn)行編譯。packet.dll 還有幾個(gè)附加功能,它可用來(lái)取得適 配器名稱(chēng)、動(dòng)態(tài)驅(qū)動(dòng)器加載以及獲得主機(jī)掩碼及以太網(wǎng)沖突次數(shù)等。 (3) 數(shù)據(jù)包高級(jí)驅(qū)動(dòng)程序庫(kù)(wpcap.dll) wpcap.dll 含有諸如產(chǎn)生過(guò)濾器、用戶(hù)級(jí)緩沖以及包注入等高級(jí)功能。

31、編程人 員既可以使用包含在 packet.dll 中的低級(jí)函數(shù)直接進(jìn)入內(nèi)核級(jí)調(diào)用,也可以使用由 wpcap.dll 提供的高級(jí)函數(shù)調(diào)用。wpcap.dll 的函數(shù)調(diào)用會(huì)自動(dòng)調(diào)用 packet.dll 中的低 級(jí)函數(shù),并可能被轉(zhuǎn)換成若干個(gè) npf 系統(tǒng)調(diào)用。 winpcap 的 api 函數(shù)直接從數(shù)據(jù)鏈路層獲取數(shù)據(jù)幀,即 mac 幀。根據(jù)網(wǎng)絡(luò)協(xié) 議的規(guī)定,對(duì) mac 幀層層分析,可以獲得網(wǎng)絡(luò)上所傳輸?shù)臄?shù)據(jù)內(nèi)容。 整個(gè)包捕獲架構(gòu)的基礎(chǔ)是 ndis(網(wǎng)絡(luò)驅(qū)動(dòng)器接口規(guī)范),它是 windows 中最低端的 與連網(wǎng)有關(guān)的軟件,主要是為各種應(yīng)用協(xié)議與網(wǎng)卡之間提供一套接口函數(shù),包驅(qū) 動(dòng)器的 tap 函數(shù)就是

32、通過(guò)調(diào)用這些函數(shù)實(shí)現(xiàn)其數(shù)據(jù)采集功能的。 以上內(nèi)容詳細(xì)介紹了網(wǎng)絡(luò)嗅探的原理等。嗅探軟件可以監(jiān)聽(tīng)局域網(wǎng)中傳輸?shù)?數(shù)據(jù)包是因?yàn)橐蕴W(wǎng)是總線(xiàn)型網(wǎng),而且在以太網(wǎng)中主機(jī)進(jìn)行數(shù)據(jù)傳輸時(shí)采用子網(wǎng) 廣播的方式。任何一臺(tái)主機(jī)發(fā)送的數(shù)據(jù)包,都會(huì)在所經(jīng)過(guò)的子網(wǎng)中進(jìn)行廣播。正 常情況下,主機(jī)只接收屬于自己的數(shù)據(jù)包,不與其它主機(jī)發(fā)生混亂,這是計(jì)算機(jī) 中的網(wǎng)卡工作的結(jié)果。將網(wǎng)卡的接收模式進(jìn)行適當(dāng)改變就可以改變網(wǎng)卡的過(guò)濾策 略,使網(wǎng)卡能夠接收經(jīng)過(guò)本網(wǎng)段的所有數(shù)據(jù)包,無(wú)論這些數(shù)據(jù)包的目的地址是否 是該主機(jī)??赏ㄟ^(guò)調(diào)用 winpcap 的 api 函數(shù)來(lái)改變網(wǎng)卡的工作模式進(jìn)而截獲數(shù)據(jù) 包。而且,根據(jù)網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾機(jī)制的原理,在截獲

33、數(shù)據(jù)包之前還可對(duì)數(shù)據(jù)包進(jìn)行 過(guò)濾,實(shí)現(xiàn)截獲管理員感興趣的數(shù)據(jù)的目的。 3 系統(tǒng)概述 3.3.1 1 實(shí)現(xiàn)目標(biāo)實(shí)現(xiàn)目標(biāo) (1)利用 mfc 設(shè)計(jì)完成網(wǎng)絡(luò)嗅探器的界面,基本要求界面簡(jiǎn)潔、易操作。 (2)實(shí)現(xiàn)抓取數(shù)據(jù)包的功能,并能對(duì)數(shù)據(jù)包進(jìn)行簡(jiǎn)單的分析如區(qū)分所獲數(shù)據(jù)包 的類(lèi)型、大小、源地址及目的地址等。 (3)實(shí)現(xiàn)過(guò)濾功能如選擇只抓取 tcp、ucp、icmp,并顯示數(shù)據(jù)包的內(nèi)容以及 解析樹(shù)。 (4)實(shí)現(xiàn)暫停抓取數(shù)據(jù)包功能。 (5)實(shí)現(xiàn)清空列表以及退出的功能。 3.23.2 開(kāi)發(fā)環(huán)境分析開(kāi)發(fā)環(huán)境分析 3.2.1 c+語(yǔ)言簡(jiǎn)介 美國(guó) at else df=false; 其中 pos 為 unsigne

34、d char*,指向當(dāng)前字節(jié),而 df 為該字節(jié)中右起第 3 位。 2)對(duì)于大于一個(gè)字節(jié)的字段,需要進(jìn)行大數(shù)端到小數(shù)端的轉(zhuǎn)換。因?yàn)榫W(wǎng)絡(luò)中 傳輸是按大數(shù)段(高位在低地址處) ,而本地機(jī)器中則相反,按小數(shù)端(地位在低 地址處) 。 如:totallen=(*pos)*256+(*(pos+1); total 為雙字節(jié),pos 指針開(kāi)始時(shí)指向低地址,乘 256 是完成大數(shù)端到小數(shù)端的 轉(zhuǎn)換。 4.24.2 過(guò)濾方法過(guò)濾方法 每次抓到一個(gè)數(shù)據(jù)包,會(huì)提交其信息,現(xiàn)將緩沖區(qū)前 14 個(gè)字節(jié)讀入,按以太 幀格式構(gòu)造以太幀頭部的對(duì)象。然后根據(jù)設(shè)置的過(guò)濾機(jī)制判斷所獲數(shù)據(jù)包是否符 合要求,如滿(mǎn)足要求繼續(xù)進(jìn)行下一步

35、分析(例如過(guò)濾 tcp、udp、icmp 等信息) , 否則丟棄。算法流程如下圖 4-2 所示: 圖圖 4-24-2 過(guò)濾流程過(guò)濾流程 type為以太幀承載 的網(wǎng)絡(luò)層協(xié)議類(lèi)型 type值? 是否偵聽(tīng) arp? 是否偵聽(tīng) rarp? 是否偵聽(tīng) ip? ip的 protocol? 是否偵聽(tīng) tcp? 是否偵聽(tīng) udp? 是否偵聽(tīng) icmp? 地址是否符 合條件? return true; arprarp ip yes udp tcp icmp yes yes yes yes no return false no return false no return false no return fals

36、e no return false no return false no return false yes yes 5 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 本監(jiān)聽(tīng)程序可以分為兩大部分:驅(qū)動(dòng)程序部分和應(yīng)用程序部分。驅(qū)動(dòng)程序部 分工作在核心態(tài),負(fù)責(zé)網(wǎng)絡(luò)數(shù)據(jù)的接收和發(fā)送;應(yīng)用程序部分工作在用戶(hù)態(tài),除 了與驅(qū)動(dòng)程序進(jìn)行正確的通訊外,還要將有關(guān)信息顯示出來(lái),其中包括簡(jiǎn)要的分 析等操作。緩沖區(qū)由應(yīng)用程序動(dòng)態(tài)分配。 5.15.1 網(wǎng)絡(luò)協(xié)議的分析與實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議的分析與實(shí)現(xiàn) 5.1.1 數(shù)據(jù)鏈路層 在數(shù)據(jù)鏈路層中分離出來(lái)的數(shù)據(jù)幀,并從幀頭中得到源 mac 地址、目標(biāo) mac 地址以及數(shù)據(jù)內(nèi)容所用的協(xié)議。 圖圖 3-13-1 以太網(wǎng)

37、幀的封裝格式(以太網(wǎng)幀的封裝格式(rfcrfc 894894) 在 tcp/ip 協(xié)議框架下,以太網(wǎng) ip 數(shù)據(jù)報(bào)的封裝(如圖 3-1 所示)是在 rfc894hornig 1984中定義的。以太網(wǎng)幀由一個(gè)包含三個(gè)字段的幀頭開(kāi)始,前兩 個(gè)字段包含了目的地址和源地址,各六個(gè)字節(jié),頭部的第三個(gè)字段包含了 16 位的 以太幀類(lèi)型,幀后面是數(shù)據(jù)區(qū)。根據(jù)幀類(lèi)型可以判斷是哪種數(shù)據(jù)報(bào),一般常用的 有 0x0080(ip 數(shù)據(jù)報(bào)) 、0x0806(arp 請(qǐng)求/應(yīng)答) 、0x0835(rarp 請(qǐng)求/應(yīng)答)三 種類(lèi)型。 以太幀頭部: class etherhead int srcaddr6;/ 源硬件地址 i

38、nt destaddr6;/目的硬件地址 int type;/承載的網(wǎng)絡(luò)層協(xié)議類(lèi)型:ip,arp,rarp ; 5.1.2 網(wǎng)絡(luò)層 網(wǎng)際協(xié)議 ip 協(xié)議是 tcp/ip 協(xié)議體系中兩個(gè)最主要的協(xié)議之一,也是最重要 的因特網(wǎng)標(biāo)準(zhǔn)協(xié)議之一。tcp/ip 協(xié)議中傳輸數(shù)據(jù)的基本單位為 ip 數(shù)據(jù)報(bào),ip 數(shù) 目的地址源地址crc數(shù)據(jù)類(lèi)型 664 461500 2 據(jù)報(bào)的格式能夠說(shuō)明 ip 協(xié)議都具有什么功能。由首部和數(shù)據(jù)兩部分組成。首部的 前一部分是固定長(zhǎng)度,共 20 字節(jié),是所有 ip 數(shù)據(jù)報(bào)必須具有的。在首部的固定 部分的后面是一些可選字段,其長(zhǎng)度是可變的。首都中的源地址和目的地址都是 ip 協(xié)議

39、地址。其詳細(xì)結(jié)構(gòu)描述如圖 3-2 所示。 1)版本:占 4 位,指 ip 協(xié)議的版本。通信雙方使用的 ip 協(xié)議版本必須一致。 日前廣泛使用的 ip 協(xié)議版本號(hào)為 4 (即 ipv4)。ipv6 目前還處于起步階段。 2)首部長(zhǎng)度:4 位,確定 ip 數(shù)據(jù)包首部字段的長(zhǎng)度,基本單位為 4 字節(jié),最 常用的首部長(zhǎng)度是 20 個(gè)字節(jié)。 3)區(qū)分服務(wù):8 位,用來(lái)獲得更好的服務(wù)。在一般情況下都不使用這個(gè)字段。 4)總長(zhǎng)度:16 位,指首部和數(shù)據(jù)之和的長(zhǎng)度,是 ip 首部中必要的內(nèi)容,單 位為字節(jié)??傞L(zhǎng)度字段為 16 位,所以 ip 數(shù)據(jù)報(bào)最大長(zhǎng)度為 65535 字節(jié)。 5)標(biāo)識(shí):16 位,唯一標(biāo)識(shí)主

40、機(jī)發(fā)送的每一個(gè)數(shù)據(jù)報(bào),并且每發(fā)送一次數(shù)據(jù)包 該字段值自動(dòng)加 1。通過(guò)它可以唯一確定一個(gè)數(shù)據(jù)包是哪個(gè)進(jìn)程發(fā)送,對(duì)同一個(gè)主 機(jī)的多個(gè)應(yīng)用程序就可以區(qū)分開(kāi)來(lái)。 圖圖 3-23-2 ipip 數(shù)據(jù)報(bào)格式及首部中的各字段數(shù)據(jù)報(bào)格式及首部中的各字段 6)標(biāo)志:3 位,最低位記為第一位為 mf 。mf=1 即表示后面“還有分片”的 數(shù)據(jù)。mf=0 表示這已是若干數(shù)據(jù)報(bào)片中的最后一個(gè)。中間的一位記為 df,即“不 能分片” 。只有當(dāng) df=0 時(shí)才允許分片。 7)ttl(time-to-live)生存時(shí)間字段:8 位,設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過(guò)多少路 由器數(shù)。它表明了數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命。最初的設(shè)計(jì)是以秒作為 tt

41、l 值的單位。 每經(jīng)過(guò)一個(gè)路由器時(shí),就把 ttl 減去數(shù)據(jù)報(bào)在路由器所消耗掉的一段時(shí)間。若數(shù) 據(jù)包在路由器消耗的時(shí)間小于 1 秒,就把 ttl 值減 1.當(dāng) ttl 值減為零時(shí),就丟棄 這個(gè)數(shù)據(jù)報(bào)。 8)協(xié)議:8 位,指出此數(shù)據(jù)報(bào)所攜帶的數(shù)據(jù)是使用何種協(xié)議,以便使目的主 機(jī)的 ip 層知道應(yīng)將數(shù)據(jù)部分上交給哪個(gè)處理過(guò)程。取值:1 表示為 icmp 協(xié)議,2 表示為 igmp 協(xié),6 表示為 tcp 協(xié)議,17 表示為 udp 協(xié)議 9)首部檢驗(yàn)和:16 位,是根據(jù) ip 首部計(jì)算的檢驗(yàn)和碼。它不對(duì)首部后面的 數(shù)據(jù)進(jìn)行計(jì)算。 10)源地址:占 32 位。 11)目的地址:占 32 位。 12)任

42、選項(xiàng):ip 首都的可變部分就是一個(gè)可選字段。選項(xiàng)字段用來(lái)支持排錯(cuò)、 測(cè)量以及安全等措施,內(nèi)容很豐富。此字段的長(zhǎng)度可變,從 1 個(gè)字節(jié)到 40 個(gè)字 節(jié)不等,取決于所選擇的項(xiàng)目。某些選項(xiàng)只需要 1 個(gè)字節(jié),它只包括 1 個(gè)字節(jié) 的選項(xiàng)代碼。但還有些選項(xiàng)需要多個(gè)字節(jié),這些選項(xiàng)一個(gè)個(gè)拼接起來(lái),中間不需 要有分隔符,最后用全 0 的填充字段補(bǔ)齊成為 4 字節(jié)的整數(shù)倍。增加首都的可變 部分是為了增加 ip 數(shù)據(jù)報(bào)的功能,但這同時(shí)也使得 ip 數(shù)據(jù)報(bào)的首部長(zhǎng)度成為 可變的。這就增加了每一個(gè)路由器處理數(shù)據(jù)報(bào)的開(kāi)銷(xiāo)。實(shí)際上這些選項(xiàng)很少被使 用。新的 ipv6 就將 ip 數(shù)據(jù)報(bào)的首部長(zhǎng)度做成固定的。 實(shí)現(xiàn)過(guò)程

43、中 ip 數(shù)據(jù)報(bào)報(bào)頭的數(shù)據(jù)結(jié)構(gòu)如下: /定義 ip 頭 ip 數(shù)據(jù)包=ip 頭tcp 數(shù)據(jù)段(或 udp 數(shù)據(jù)段) class ipgram int version; /ip 版本 int ihl; /ip 報(bào)文頭長(zhǎng),包含多少個(gè) 32 位 int servicetype;/服務(wù)類(lèi)型 int precedence;/優(yōu)先級(jí) bool delay; /延遲 bool throughtput;/吞吐量 bool reliability;/可靠性 unsigned int totallen; /ip 報(bào)文總長(zhǎng) int identification;/標(biāo)識(shí) bool df;/是否分段,為 1 表示沒(méi)有分

44、段 bool mf;/是否有進(jìn)一步分段,為 1 表示有 int fragoffset;/偏移量 int ttl;/生命期 time to live int protocol; /協(xié)議:tcp,udp,icmp unsigned int checksum;/校驗(yàn)和 long srcaddr;/源 ip 地址 long destaddr;/目的 ip 地址 int optlen;/ip 選項(xiàng)長(zhǎng)度 unsigned char *options;/選項(xiàng)內(nèi)容 int datalen; /數(shù)據(jù)長(zhǎng)度 unsigned char *data; /數(shù)據(jù)內(nèi)容 ; icmp 經(jīng)常被認(rèn)為是 ip 層的一個(gè)組成部分。它

45、傳遞差錯(cuò)報(bào)文以及其他需要注 意的信息 。 icmp 報(bào)文是在 ip 數(shù)據(jù)報(bào)內(nèi)部被傳輸?shù)模鐖D 3-3 所示。 圖圖 3-33-3 icmpicmp 封裝在封裝在 ipip 數(shù)據(jù)報(bào)內(nèi)部數(shù)據(jù)報(bào)內(nèi)部 icmp 報(bào)文的格式如圖 3-4 所示。 078 1516 31 8 位類(lèi)型8 位代碼 16 位檢驗(yàn)和 (不同類(lèi)型和代碼有不同的內(nèi)容) 圖圖 3-43-4 icmpicmp 數(shù)據(jù)報(bào)格式及首部中的各字段首部數(shù)據(jù)報(bào)格式及首部中的各字段首部 icmp 報(bào)文的種類(lèi)有兩種:icmp 差錯(cuò)報(bào)文和 icmp 詢(xún)問(wèn)報(bào)文。 icmp 報(bào)文的前 4 個(gè)字節(jié)是統(tǒng)一的格式,共有三個(gè)字段:類(lèi)型、代碼、檢驗(yàn)和。 ip 首部icmp

46、 報(bào)文 ip 數(shù)據(jù)報(bào) 20 字節(jié) 1)類(lèi)型:8 位,可以有 15 個(gè)不同的值,以描述特定類(lèi)型的 icmp 報(bào)文。 2)代碼:8 位,是為了進(jìn)一步區(qū)分某種類(lèi)型中的幾種不同的情況。 3)檢驗(yàn)和:16 位,檢驗(yàn)和字段覆蓋了整個(gè) icmp 報(bào)文。 class icmpgram int type;/類(lèi)型 int code;/代號(hào) int checksum;/校驗(yàn)和 int datalen;/數(shù)據(jù)長(zhǎng)度 unsigned char *data;/數(shù)據(jù)內(nèi)容 /以下不是所有 icmp 報(bào)文都具有的 unsigned int gatewayaddr;/網(wǎng)關(guān)地址 unsigned int identificatio

47、n;/標(biāo)識(shí) unsigned int sequence;/順序號(hào) unsigned int inittime;/初始時(shí)間 unsigned int receivetime;/接收時(shí)間 unsigned int sendtime;/發(fā)送時(shí)間 unsigned int addrmask;/地址掩碼 ; 5.1.3 運(yùn)輸層 運(yùn)輸層主要是為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的邏輯通信。在 tcp/ip 協(xié) 議中,有兩個(gè)互不相同的傳輸協(xié)議:面向連接的 tcp(傳輸控制協(xié)議)和無(wú)連接的 udp(用戶(hù)數(shù)據(jù)報(bào)協(xié)議) 。 tcp(傳輸控制協(xié)議)是專(zhuān)門(mén)設(shè)計(jì)用于在不可靠的網(wǎng)絡(luò)上提供可靠的、端到端 的字節(jié)流通信的協(xié)議。一

48、個(gè) tcp 報(bào)文段分為首部和數(shù)據(jù)兩部分。tcp 的全部功能都 體現(xiàn)在它首部中各個(gè)字段的作用。因此,只有弄清楚 tcp 首部各字段的作用才能 掌握 tcp 的工作原理。tcp 協(xié)議的首部字段如圖 3-5 所示。 圖圖 3-53-5 tcptcp 數(shù)據(jù)報(bào)格式及首部中的各字段數(shù)據(jù)報(bào)格式及首部中的各字段 tcp 報(bào)文段首部的前 20 個(gè)字節(jié)是固定的,后面有 4n 字節(jié)是根據(jù)需要而增加的 選項(xiàng)(n 必須是整數(shù)) 。因此 tcp 首部的最小長(zhǎng)度是 20 字節(jié)。 首部固定部分各字段的意義如下: 1)源端口和目的端口:各占 2 個(gè)字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。 這兩個(gè)值加上 ip 首部中的源端 ip

49、地址和目的端的 ip 地址唯一確定一個(gè) tcp 連接。 2)序號(hào):32 位,標(biāo)識(shí)從 tcp 發(fā)送端向 tcp 接收端發(fā)送的數(shù)據(jù)字節(jié)流,它表 示在這個(gè)報(bào)文段中的第一個(gè)數(shù)據(jù)字節(jié)。序號(hào)是 32 bit 的無(wú)符號(hào)數(shù),序號(hào)到達(dá) 232- 1 后又從 0 開(kāi)始。 3)確認(rèn)號(hào):32位,是期望受到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序 號(hào),也就是期望收到的下一個(gè)報(bào)文段首部的序號(hào)字段的值。順序號(hào)標(biāo)志本分組的 編號(hào),確認(rèn)號(hào)指示希望接受的下一個(gè)分組編號(hào)。 4)首部長(zhǎng)度:4 位,表示 tcp 報(bào)文段首部的長(zhǎng)度。這條信息對(duì)于定位確切的 數(shù)據(jù)信息十分重要,因?yàn)槿芜x字段的長(zhǎng)度是可變的。這個(gè)字段占 4bit,因此 tcp

50、最多有 60 字節(jié)的首部。然而,沒(méi)有任選字段,正常的長(zhǎng)度是 20 字節(jié)。 5)保留:6 位,保留為今后使用,但當(dāng)前應(yīng)置為 0。 6)標(biāo)志位:在 tcp 首部中有 6 個(gè)標(biāo)志比特。它們中的多個(gè)可同時(shí)被設(shè)置為 1。 7)窗口大?。?6 位,tcp 的流量控制由連接的每一端通過(guò)聲明的窗口大小來(lái) 提供。窗口的大小為字節(jié)書(shū),起始于確認(rèn)序號(hào)字段指明的值,這個(gè)值是接收端正 期望接收的字節(jié)。窗口大小是一個(gè) 16bit 字段,因而窗口大小最大為 65535 字節(jié)。 8)檢驗(yàn)和:16 位,檢驗(yàn)和覆蓋了整個(gè)的 tcp 報(bào)文段。 9)緊急指針:16 位,只有當(dāng) urg 標(biāo)志置 1 時(shí)緊急指針才有效。緊急指針是一 個(gè)正

51、的偏移量,和序號(hào)字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。 10)選項(xiàng):長(zhǎng)度可變。最常見(jiàn)的可選字段是最長(zhǎng)報(bào)文大小,又稱(chēng)為 mss(maximun segment size) 。它指明本端所能接收的最大長(zhǎng)度的報(bào)文段。 / 定義 tcp 首部格式 class tcpgram int srcport;/源端口號(hào) int destport; /目的端口號(hào) unsigned int seqnum; /順序號(hào) unsigned int acknum;/確認(rèn)好 int headlen; /tcp 報(bào)文頭長(zhǎng),包含多少個(gè) 32 位 bool urg;/為 1 表示使用緊急指針 bool ack;/為 1 表

52、示確認(rèn)合法 bool psh;/帶 push 標(biāo)志數(shù)據(jù) bool rst;/用于主機(jī)崩潰或其他原因后的復(fù)位 bool syn;/用于建立連接 bool fin;/用于釋放連接 int windowsize; /窗口大小 int checksum;/校驗(yàn)和 int urgpos;/緊急指針,從當(dāng)前順序號(hào)到緊急位置的偏移量 int optlen;/tcp 選項(xiàng)長(zhǎng)度 unsigned char *options; /選項(xiàng)內(nèi)容 int datalen; /數(shù)據(jù)長(zhǎng)度 unsigned char *data; /數(shù)據(jù)內(nèi)容 ; / 定義 tcp 首部格式 udp 是一個(gè)簡(jiǎn)單的面向報(bào)文的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)

53、輸出操作都正好產(chǎn)生一 個(gè) udp 數(shù)據(jù)報(bào),并組裝成一份待發(fā)送的 ip 數(shù)據(jù)報(bào)。 udp 數(shù)據(jù)報(bào)封裝成一份 ip 數(shù)據(jù)報(bào)的格式如圖 3-6 所示。 ip 首部 udp 首部udp 數(shù)據(jù) 20 字節(jié)8 字節(jié) udp 報(bào)文段 ip 數(shù)據(jù)報(bào) 圖圖 3-63-6 udpudp 數(shù)據(jù)報(bào)封裝數(shù)據(jù)報(bào)封裝 udp 不提供可靠性:它把應(yīng)用程序傳給 ip 層的數(shù)據(jù)發(fā)送出去,但是并不保證 它們能到達(dá)目的地。 udp 首部的各字段如圖 3-7 所示。 圖圖 3-73-7 udpudp 數(shù)據(jù)報(bào)格式及首部中的各字段數(shù)據(jù)報(bào)格式及首部中的各字段 1)源端口和目的端口號(hào):各 16 位,表示發(fā)送進(jìn)程和接收進(jìn)程。 2)udp 長(zhǎng)度字

54、段:16 位,指的是 udp 首部和 udp 數(shù)據(jù)的字節(jié)長(zhǎng)度。該字 段最小值為 8 字節(jié)。ip 數(shù)據(jù)報(bào)長(zhǎng)度指的是數(shù)據(jù)報(bào)全長(zhǎng)(如圖 3-9) ,因此 udp 數(shù) 據(jù)報(bào)長(zhǎng)度是全長(zhǎng)減去 ip 首部的長(zhǎng)度。 3)udp 檢驗(yàn)和:16 位,udp 檢驗(yàn)和覆蓋 udp 首部和 udp 數(shù)據(jù)。 class udpgram 16 位源端口號(hào) 16 位 udp 長(zhǎng)度 16 位目的端口號(hào) 16 位 udp 檢驗(yàn)和 數(shù)據(jù)(若有) 0 1516 31 8 字節(jié) unsigned int srcport;/源端口號(hào) unsigned int destport;/目的端口號(hào) int totallen;/udp 報(bào)文總長(zhǎng)

55、int checksum;/校驗(yàn)和 unsigned int datalen;/數(shù)據(jù)長(zhǎng)度 char *data;/數(shù)據(jù)內(nèi)容 5.25.2 數(shù)據(jù)包的捕獲數(shù)據(jù)包的捕獲 根據(jù)系統(tǒng)總體設(shè)計(jì)的思路,利用 winpcap 的采集數(shù)據(jù)技術(shù)對(duì)底層數(shù)據(jù)進(jìn)行捕 獲。為了在 windows 平臺(tái)實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲功能,首先是把網(wǎng)卡設(shè)置成混雜 模式,以監(jiān)聽(tīng)整個(gè)網(wǎng)段的數(shù)據(jù)。數(shù)據(jù)包捕獲功能的實(shí)現(xiàn)是基于 winpcap 所提供的 api 接口函數(shù)實(shí)現(xiàn)的,它可以直接從鏈路層獲取數(shù)據(jù)幀。進(jìn)一步的分析、處理工作 可交由數(shù)據(jù)分析處理程序完成。 (1)將網(wǎng)卡設(shè)置成混雜模式: 首先查詢(xún)到本機(jī)配置的所有網(wǎng)卡(包括虛擬網(wǎng)卡)利用函數(shù)pc

56、ap_findalldevs(); ,其次找到所選擇的網(wǎng)卡(雙擊產(chǎn)生的) ,最后先是所選網(wǎng)卡信息(包括網(wǎng)卡名字, mac 地址,子網(wǎng)掩碼,ip 地址等) ,并將此網(wǎng)卡設(shè)置為混合模式。設(shè)置網(wǎng)卡的主要 代碼取下: bool cdlgadp:oninitdialog() htreeitem root = m_treectrl.insertitem(_t(網(wǎng)卡信息); if(alldevs=null)/查找所有網(wǎng)卡 if (pcap_findalldevs( adhandle=pcap_open(d-name, /網(wǎng)絡(luò)設(shè)備名 65535, /數(shù)據(jù)包的捕獲部分長(zhǎng)度 pcap_openflag_promi

57、scuous, /混合模式 1 打開(kāi)混合模式 0 關(guān)閉混合模式 1000,/讀超時(shí)值 null, errbuf);/錯(cuò)誤信息緩存區(qū) if(adhandle=null) messagebox(null,errbuf,錯(cuò)誤,mb_ok); pcap_freealldevs(alldevs); return -1; 其中參數(shù) 1 用來(lái)設(shè)置網(wǎng)卡的工作模式。 (2)進(jìn)行數(shù)據(jù)包類(lèi)型過(guò)濾 根據(jù)過(guò)濾算法實(shí)現(xiàn)對(duì)報(bào)文類(lèi)型、ip 地址以及傳輸方向等進(jìn)行有效過(guò)濾。 void cdlgflt:onselchangedflttree(nmhdr* pnmhdr, lresult* presult) / 響應(yīng)用戶(hù)對(duì) typ

58、e 篩選 nm_treeview*pnmtreeview=(nm_treeview*)pnmhdr; htreeitem h=pnmtreeview-itemnew.hitem; if(h=tcp)/對(duì) tcp 數(shù)據(jù)包過(guò)濾 typetype_tcp=!typetype_tcp; int icon=typetype_tcp?1:0; m_tree.setitemimage(h,icon,icon); else if(h=udp) /對(duì) udp 數(shù)據(jù)包過(guò)濾 typetype_udp=!typetype_udp; int icon=typetype_udp?1:0; m_tree.setitemimage(h,icon,icon); *presult = 0; (3)開(kāi)始捕獲數(shù)據(jù)包 網(wǎng)卡的工作模式設(shè)置完畢,只需要調(diào)用捕捉函數(shù) pcap 來(lái)進(jìn)行對(duì)數(shù)據(jù)包抓取就 可以實(shí)現(xiàn)截獲數(shù)據(jù)包。在具體的實(shí)現(xiàn)過(guò)程中,通過(guò)建立一個(gè)捕獲線(xiàn)程來(lái)實(shí)現(xiàn)數(shù)據(jù) 包的捕獲,以減少在網(wǎng)絡(luò)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論