【永恒的瞬間】
          ?Give me hapy ?
           

           摘 要 本文介紹了網(wǎng)絡(luò)嗅探器軟件的功能,以及網(wǎng)絡(luò)嗅探軟件設(shè)計(jì)的原理,并以軟件設(shè)計(jì)的模塊化思想為主介紹了編寫(xiě)一個(gè)網(wǎng)絡(luò)嗅探軟件的總體設(shè)計(jì)思想以及主要代碼設(shè)計(jì),同時(shí)對(duì)涉及到的若干網(wǎng)絡(luò)編程知識(shí)以及一些網(wǎng)絡(luò)基本知識(shí)進(jìn)行了介紹。本文的最后也指出了此網(wǎng)絡(luò)嗅探軟件設(shè)計(jì)的另一個(gè)發(fā)展方向。

                關(guān)鍵詞  網(wǎng)絡(luò)嗅探器 混雜模式  模塊化設(shè)計(jì)

          1  

              隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)系統(tǒng)對(duì)于整個(gè)社會(huì)的工作和建設(shè)發(fā)揮著越來(lái)越大的作用,網(wǎng)絡(luò)環(huán)境也變得越來(lái)越復(fù)雜,與此同時(shí)網(wǎng)絡(luò)系統(tǒng)的安全問(wèn)題也引起了我們的關(guān)注。設(shè)計(jì)數(shù)據(jù)包嗅探器的目的在于能夠使系統(tǒng)管理員運(yùn)用此類(lèi)軟件分析網(wǎng)絡(luò)流量以便更好地控制網(wǎng)絡(luò)。它能夠幫助系統(tǒng)管理人員迅速地找到問(wèn)題癥結(jié)所在(如網(wǎng)絡(luò)瓶頸、錯(cuò)誤配置等),它們通常被用來(lái)在網(wǎng)路上截取/閱讀位于OSI 協(xié)議模型中各個(gè)協(xié)議層次上的數(shù)據(jù)包。 

          2 網(wǎng)絡(luò)嗅探軟件的設(shè)計(jì)原理 

          嗅探器可以理解為一個(gè)安裝在計(jì)算機(jī)上的竊聽(tīng)設(shè)備,它可以用來(lái)竊聽(tīng)計(jì)算機(jī)在網(wǎng)絡(luò)上所產(chǎn)生的眾多的信息,可以竊聽(tīng)計(jì)算機(jī)程序在網(wǎng)絡(luò)上發(fā)送和接收到的數(shù)據(jù),用來(lái)接收在網(wǎng)絡(luò)上傳輸?shù)男畔ⅰ?/span>

          很多計(jì)算機(jī)網(wǎng)絡(luò)采用的是共享媒體"。也就是說(shuō),不必中斷他的通訊,并且配置特別的線路,再安裝嗅探器,幾乎可以在任何連接著的網(wǎng)絡(luò)上直接竊聽(tīng)到同一掩碼范圍內(nèi)的計(jì)算機(jī)網(wǎng)絡(luò)數(shù)據(jù)。這種竊聽(tīng)方式為基于混雜模式的嗅探promiscuous mode)。

          2.1 以太網(wǎng)的工作原理

          以太網(wǎng)的數(shù)據(jù)傳輸是基于共享原理的:所有的同一本地網(wǎng)范圍內(nèi)的計(jì)算機(jī)共同接收到相同的數(shù)據(jù)包。這意味著計(jì)算機(jī)直接的通訊都是透明可見(jiàn)的。正是因?yàn)檫@樣的原因,以太網(wǎng)卡都構(gòu)造了硬件的過(guò)濾器”,這個(gè)過(guò)濾器將忽略掉一切和自己無(wú)關(guān)的網(wǎng)絡(luò)信息。事實(shí)上是忽略掉了與自身MAC地址不符合的信息。嗅探程序正是利用了這個(gè)特點(diǎn),它把網(wǎng)卡設(shè)置為混雜模式。因此,嗅探程序就能夠接收到整個(gè)以太網(wǎng)內(nèi)的網(wǎng)絡(luò)數(shù)據(jù)信息了。 

          在以太網(wǎng)中所有的通訊都是廣播的,也就是說(shuō)通常在同一個(gè)網(wǎng)段的所有網(wǎng)絡(luò)接口都可以訪問(wèn)在物理媒體上傳輸?shù)乃袛?shù)據(jù),而每一個(gè)網(wǎng)絡(luò)接口都有一個(gè)唯一的硬件地址,這個(gè)硬件地址也就是網(wǎng)卡的MAC地址。大多數(shù)系統(tǒng)使用48比特的地址,這個(gè)地址用來(lái)表示

          網(wǎng)絡(luò)中的每一個(gè)設(shè)備。一般來(lái)說(shuō)每一塊網(wǎng)卡上的MAC地址都是不同的,每個(gè)網(wǎng)卡廠家得到一段地址,然后用這段地址分配給其生產(chǎn)的每個(gè)網(wǎng)卡一個(gè)地址。在硬件地址和IP地址間使用ARPRARP協(xié)議進(jìn)行相互轉(zhuǎn)換。

          在正常的情況下,一個(gè)網(wǎng)絡(luò)接口應(yīng)該只響應(yīng)這樣的兩種數(shù)據(jù)幀:

          與自己硬件地址相匹配的數(shù)據(jù)幀。

          發(fā)向所有機(jī)器的廣播數(shù)據(jù)幀。

          2.2 網(wǎng)卡的工作原理

          在一個(gè)實(shí)際的系統(tǒng)中,數(shù)據(jù)的收發(fā)是由網(wǎng)卡來(lái)完成的。網(wǎng)卡接收到傳輸來(lái)的數(shù)據(jù),網(wǎng)卡內(nèi)的單片程序接收數(shù)據(jù)幀的目的MAC地址。根據(jù)計(jì)算機(jī)上的網(wǎng)卡驅(qū)動(dòng)程序設(shè)置的接收模式判斷該不該接收。認(rèn)為該接收就接收后產(chǎn)生中斷信號(hào)通知CPU;認(rèn)為不該接收就丟掉不管。所以不該接收的數(shù)據(jù),網(wǎng)卡就截?cái)嗔耍?jì)算機(jī)根本就不知道。CPU得到中斷信號(hào)產(chǎn)生中斷,操作系統(tǒng)就根據(jù)網(wǎng)卡的驅(qū)動(dòng)程序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動(dòng)程序接收數(shù)據(jù),驅(qū)動(dòng)程序接收數(shù)據(jù)后放入信號(hào)堆棧讓操作系統(tǒng)處理。

          對(duì)于網(wǎng)卡一般有四種接收模式:

           廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡(luò)中的廣播信息。

           組播方式:設(shè)置在該模式下的網(wǎng)卡能夠接收組播數(shù)據(jù)。

           直接方式:在這種模式下,只有目的網(wǎng)卡才能接收該數(shù)據(jù)。

           混雜模式:在這種模式下的網(wǎng)卡能夠接收一切通過(guò)它的數(shù)據(jù),而不管該數(shù)據(jù)是否是傳給它的。

          數(shù)據(jù)包MAC

          接口配置模式

          產(chǎn)生中斷,通知CPU

          產(chǎn)生中斷,通知CPU

              不處理,丟棄

          本地接口硬件地址

          廣播地址

           

          其他硬件地址

          混雜模式

          非混合模式

          數(shù)據(jù)包MAC

          接口配置模式

          產(chǎn)生中斷,通知CPU

          產(chǎn)生中斷,通知CPU

              不處理,丟棄

          數(shù)據(jù)包

          2.3 網(wǎng)絡(luò)嗅探軟件的工作原理

          根據(jù)以上的介紹,我們可以得出結(jié)論如下:

          首先,在以太網(wǎng)中是基于廣播方式傳送數(shù)據(jù)的,也就是說(shuō),所有的物理信號(hào)都要經(jīng)過(guò)我的機(jī)器。再次,網(wǎng)卡可以置于一種模式叫混雜模式(promiscuous mode),在這種模式下工作的網(wǎng)卡能夠接收到一切通過(guò)它的數(shù)據(jù),而不管實(shí)際上數(shù)據(jù)的目的地址是不是它。這就是以下將要介紹的網(wǎng)絡(luò)嗅探軟件的工作的基本原理:讓網(wǎng)卡接收一切它所能接收的數(shù)據(jù)。

          計(jì)算機(jī)直接所傳送的數(shù)據(jù),事實(shí)上是大量的二進(jìn)制數(shù)據(jù)。因此, 一個(gè)網(wǎng)絡(luò)竊聽(tīng)程序還必須也使用特定的網(wǎng)絡(luò)協(xié)議來(lái)分解嗅探到的數(shù)據(jù),嗅探器也就必須能夠識(shí)別出哪個(gè)協(xié)議對(duì)應(yīng)于這個(gè)數(shù)據(jù)片斷,只有這樣才能夠進(jìn)行正確的解碼。   

          3 網(wǎng)絡(luò)嗅探軟件的設(shè)計(jì)實(shí)現(xiàn)

              該網(wǎng)絡(luò)嗅探軟件能夠從網(wǎng)絡(luò)上讀取數(shù)據(jù)包并且解析數(shù)據(jù)包報(bào)文頭中各字段的意義。能夠分析數(shù)據(jù)幀以及所使用的協(xié)議的類(lèi)型。

          3.1 網(wǎng)絡(luò)嗅探軟件的模塊結(jié)構(gòu)

          設(shè)計(jì)該網(wǎng)絡(luò)嗅探軟件可分為以下幾個(gè)步驟:

           創(chuàng)建套接字

           把網(wǎng)卡設(shè)置為混雜模式

           捕獲數(shù)據(jù)包

           分析數(shù)據(jù)包

          3.2 模塊說(shuō)明

          ⑴  該網(wǎng)絡(luò)嗅探軟件主要是運(yùn)用LINUX環(huán)境下的SOCKET編程。網(wǎng)絡(luò)的SOCKET數(shù)據(jù)傳輸是一種特殊的I/O, SOCKET也是一種文件描述符。該網(wǎng)絡(luò)嗅探軟件設(shè)計(jì)的目的是截獲所有的數(shù)據(jù)包,即包括所有的協(xié)議。

          Socket()函數(shù)的定義式如下:

          Sockfd = socket ( int family, int type, int protocol )

          第一個(gè)參數(shù)是地址類(lèi)型,如果選用AF UNIX, 是用于本機(jī)上不同進(jìn)程之間進(jìn)行通信,而設(shè)為AF INET 則是用于不同主機(jī)之間的通信;第二個(gè)參數(shù)即socket的類(lèi)型參數(shù),主要有4種參數(shù)類(lèi)型如下:

          ① SOCK DRAMused for udp datagrams.

          ② SOCK STREAMused for tcp packets.

          ③ SOCK RAWused to bypass the transport layer and directly access the IP layer.

                 ④ SOCK PACKETthis is linux specific, it is similuar to sock raw except it accesses the DATA LINK layer.

          第三個(gè)參數(shù)是協(xié)議參數(shù),指定程序使用具體的協(xié)議。

          在此程序中為截獲包含所有協(xié)議的數(shù)據(jù)包,故在程序的開(kāi)始就寫(xiě)語(yǔ)句:

          define PROTO   htons 0x0003/ *Ethernet code for all protol */

          且在本程序中socket()函數(shù)的第二個(gè)參數(shù)選用sock packet

          ⑵ 套接字創(chuàng)建成功之后,就可以選擇網(wǎng)絡(luò)接口并加以參數(shù)控制了。進(jìn)入第二個(gè)模塊:設(shè)置網(wǎng)卡于混雜模式。

          在程序中有一個(gè)單獨(dú)的自定義函數(shù)是用來(lái)將網(wǎng)卡設(shè)置為混雜模式的。在這個(gè)模塊中主要是調(diào)用了ioctl 函數(shù),ioctl 函數(shù)是用來(lái)控制特殊文件的底層設(shè)備參數(shù)的,這些特殊文件通常是終端、套接字和接口。ioctl 函數(shù)的定義如下:

               ioctlsock SIOCGIFFLAGS, &ifr

               ioctl()函數(shù)中第一個(gè)參數(shù)是一個(gè)打開(kāi)的原始套接字描述符“sock”,第二個(gè)參數(shù)是所要執(zhí)行的請(qǐng)求操作。這里,請(qǐng)求操作是“SIOCGIFFLAGS”,意思是獲取接口“etho”的標(biāo)記符。第三個(gè)參數(shù)是接口請(qǐng)求數(shù)據(jù)結(jié)構(gòu)的地址指針,該結(jié)構(gòu)中包含了所要進(jìn)行請(qǐng)求操作的接口名稱值。

          ⑶ 網(wǎng)絡(luò)接口設(shè)置為混雜模式以后,接著就可以接收數(shù)據(jù)包了, 進(jìn)入捕獲數(shù)據(jù)包的模塊。

             recvfrom ( if_eth_fd, &ep, sizeof (ep), 0, &dest, &dlen );

          這個(gè)函數(shù)要做的就是接收數(shù)據(jù),并把接收到的數(shù)據(jù)放入buffer中。

          ⑷ 在成功的接收到數(shù)據(jù)包后,程序?qū)⑦M(jìn)入下一個(gè)模塊:分析數(shù)據(jù)包。

          這里要介紹一下有關(guān)的網(wǎng)絡(luò)基本知識(shí),首先介紹一下TCP/IP的分層:

          TCP/IP協(xié)議族中,有很多種協(xié)議。可用圖一簡(jiǎn)單概括TCP/IP協(xié)議族中不同層次的協(xié)議。如圖所示,由于TCPUDPICMPIGMP都要向IP傳送數(shù)據(jù),因此IP必須在生成的IP首部中加入某種標(biāo)識(shí),以表明數(shù)據(jù)屬于哪一層。為此,IP在首部中存入一個(gè)長(zhǎng)度為8 bit的數(shù)據(jù),稱作協(xié)議域。1表示為ICMP協(xié)議,2表示為IGMP協(xié)議,6表示為TCP協(xié)議,17表示為UDP協(xié)議。類(lèi)似地,許多應(yīng)用程序都可以使用TCPUDP來(lái)傳送數(shù)據(jù)。運(yùn)輸層協(xié)議在生成報(bào)文首部時(shí)要存入一個(gè)應(yīng)用程序的標(biāo)識(shí)符。TCPUDP都用一個(gè)16 bit的端口號(hào)來(lái)表示不同的應(yīng)用程序。TCPUDP把源端口號(hào)和目的端口號(hào)分別存入報(bào)文首部中。網(wǎng)絡(luò)接口分別要發(fā)送和接收IPARPRARP數(shù)據(jù),因此也必須在以太網(wǎng)的幀首部中加入某種形式的標(biāo)識(shí),以指明生成數(shù)據(jù)的網(wǎng)絡(luò)層協(xié)議。為此,以太網(wǎng)的幀首部也有一個(gè)16 bit的幀類(lèi)型域。

           

           

          TCP                       

          UDP

          ICMP

          IP

          IGMP

          ARP

          硬件接口

          RARP

          用戶進(jìn)程        用戶進(jìn)程        用戶進(jìn)程        用戶進(jìn)程      應(yīng)用層    運(yùn)輸層 網(wǎng)絡(luò)層   鏈路層

             

                                    媒體

          (圖一)

              網(wǎng)絡(luò)嗅探程序在分析數(shù)據(jù)包這一階段正是根據(jù)了網(wǎng)絡(luò)的工作原理:在收到一個(gè)以太網(wǎng)數(shù)據(jù)幀時(shí),數(shù)據(jù)就開(kāi)始從協(xié)議棧中由底向上升,同時(shí)去掉各層協(xié)議加上的報(bào)文首部。每層協(xié)議盒都要去檢查報(bào)文首部中的協(xié)議標(biāo)識(shí),以確定接收數(shù)據(jù)的上層協(xié)議。這個(gè)過(guò)程即是分用。

          4 進(jìn)一步的發(fā)展方向

               還有很多的功能可以加入到本文所設(shè)計(jì)的軟件中,使其變得更加完整。它的另一個(gè)發(fā)展的方向就是進(jìn)一步更好的分析數(shù)據(jù)包中的數(shù)據(jù)部分,并能夠把分析出來(lái)的數(shù)據(jù)從ASCII碼轉(zhuǎn)換為自然語(yǔ)言,這就能夠給用戶帶來(lái)很大的方便。

           

          posted on 2007-05-16 13:53 ???MengChuChen 閱讀(951) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): meshwork

          FeedBack:
          # re: 網(wǎng)絡(luò)嗅探軟件的設(shè)計(jì)與分析
          2007-12-11 23:57 | tigershi10
          怎么沒(méi)有代碼啊  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长岭县| 南江县| 惠东县| 岚皋县| 克东县| 汨罗市| 莆田市| 金塔县| 塔河县| 沭阳县| 福海县| 壤塘县| 沙田区| 莱西市| 博白县| 岚皋县| 米易县| 雅安市| 崇左市| 花垣县| 都匀市| 彭泽县| 乌海市| 芷江| 中宁县| 连州市| 开平市| 陵川县| 高雄县| 淮滨县| 长丰县| 玉屏| 慈溪市| 东乡族自治县| 炉霍县| 正蓝旗| 湖南省| 习水县| 西乌珠穆沁旗| 黄大仙区| 武安市|