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

           摘 要 本文介紹了網絡嗅探器軟件的功能,以及網絡嗅探軟件設計的原理,并以軟件設計的模塊化思想為主介紹了編寫一個網絡嗅探軟件的總體設計思想以及主要代碼設計,同時對涉及到的若干網絡編程知識以及一些網絡基本知識進行了介紹。本文的最后也指出了此網絡嗅探軟件設計的另一個發展方向。

                關鍵詞  網絡嗅探器 混雜模式  模塊化設計

          1  

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

          2 網絡嗅探軟件的設計原理 

          嗅探器可以理解為一個安裝在計算機上的竊聽設備,它可以用來竊聽計算機在網絡上所產生的眾多的信息,可以竊聽計算機程序在網絡上發送和接收到的數據,用來接收在網絡上傳輸的信息。

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

          2.1 以太網的工作原理

          以太網的數據傳輸是基于共享原理的:所有的同一本地網范圍內的計算機共同接收到相同的數據包。這意味著計算機直接的通訊都是透明可見的。正是因為這樣的原因,以太網卡都構造了硬件的過濾器”,這個過濾器將忽略掉一切和自己無關的網絡信息。事實上是忽略掉了與自身MAC地址不符合的信息。嗅探程序正是利用了這個特點,它把網卡設置為混雜模式。因此,嗅探程序就能夠接收到整個以太網內的網絡數據信息了。 

          在以太網中所有的通訊都是廣播的,也就是說通常在同一個網段的所有網絡接口都可以訪問在物理媒體上傳輸的所有數據,而每一個網絡接口都有一個唯一的硬件地址,這個硬件地址也就是網卡的MAC地址。大多數系統使用48比特的地址,這個地址用來表示

          網絡中的每一個設備。一般來說每一塊網卡上的MAC地址都是不同的,每個網卡廠家得到一段地址,然后用這段地址分配給其生產的每個網卡一個地址。在硬件地址和IP地址間使用ARPRARP協議進行相互轉換。

          在正常的情況下,一個網絡接口應該只響應這樣的兩種數據幀:

          與自己硬件地址相匹配的數據幀。

          發向所有機器的廣播數據幀。

          2.2 網卡的工作原理

          在一個實際的系統中,數據的收發是由網卡來完成的。網卡接收到傳輸來的數據,網卡內的單片程序接收數據幀的目的MAC地址。根據計算機上的網卡驅動程序設置的接收模式判斷該不該接收。認為該接收就接收后產生中斷信號通知CPU;認為不該接收就丟掉不管。所以不該接收的數據,網卡就截斷了,計算機根本就不知道。CPU得到中斷信號產生中斷,操作系統就根據網卡的驅動程序設置的網卡中斷程序地址調用驅動程序接收數據,驅動程序接收數據后放入信號堆棧讓操作系統處理。

          對于網卡一般有四種接收模式:

           廣播方式:該模式下的網卡能夠接收網絡中的廣播信息。

           組播方式:設置在該模式下的網卡能夠接收組播數據。

           直接方式:在這種模式下,只有目的網卡才能接收該數據。

           混雜模式:在這種模式下的網卡能夠接收一切通過它的數據,而不管該數據是否是傳給它的。

          數據包MAC

          接口配置模式

          產生中斷,通知CPU

          產生中斷,通知CPU

              不處理,丟棄

          本地接口硬件地址

          廣播地址

           

          其他硬件地址

          混雜模式

          非混合模式

          數據包MAC

          接口配置模式

          產生中斷,通知CPU

          產生中斷,通知CPU

              不處理,丟棄

          數據包

          2.3 網絡嗅探軟件的工作原理

          根據以上的介紹,我們可以得出結論如下:

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

          計算機直接所傳送的數據,事實上是大量的二進制數據。因此, 一個網絡竊聽程序還必須也使用特定的網絡協議來分解嗅探到的數據,嗅探器也就必須能夠識別出哪個協議對應于這個數據片斷,只有這樣才能夠進行正確的解碼。   

          3 網絡嗅探軟件的設計實現

              該網絡嗅探軟件能夠從網絡上讀取數據包并且解析數據包報文頭中各字段的意義。能夠分析數據幀以及所使用的協議的類型。

          3.1 網絡嗅探軟件的模塊結構

          設計該網絡嗅探軟件可分為以下幾個步驟:

           創建套接字

           把網卡設置為混雜模式

           捕獲數據包

           分析數據包

          3.2 模塊說明

          ⑴  該網絡嗅探軟件主要是運用LINUX環境下的SOCKET編程。網絡的SOCKET數據傳輸是一種特殊的I/O, SOCKET也是一種文件描述符。該網絡嗅探軟件設計的目的是截獲所有的數據包,即包括所有的協議。

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

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

          第一個參數是地址類型,如果選用AF UNIX, 是用于本機上不同進程之間進行通信,而設為AF INET 則是用于不同主機之間的通信;第二個參數即socket的類型參數,主要有4種參數類型如下:

          ① 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.

          第三個參數是協議參數,指定程序使用具體的協議。

          在此程序中為截獲包含所有協議的數據包,故在程序的開始就寫語句:

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

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

          ⑵ 套接字創建成功之后,就可以選擇網絡接口并加以參數控制了。進入第二個模塊:設置網卡于混雜模式。

          在程序中有一個單獨的自定義函數是用來將網卡設置為混雜模式的。在這個模塊中主要是調用了ioctl 函數,ioctl 函數是用來控制特殊文件的底層設備參數的,這些特殊文件通常是終端、套接字和接口。ioctl 函數的定義如下:

               ioctlsock, SIOCGIFFLAGS, &ifr

               ioctl()函數中第一個參數是一個打開的原始套接字描述符“sock”,第二個參數是所要執行的請求操作。這里,請求操作是“SIOCGIFFLAGS”,意思是獲取接口“etho”的標記符。第三個參數是接口請求數據結構的地址指針,該結構中包含了所要進行請求操作的接口名稱值。

          ⑶ 網絡接口設置為混雜模式以后,接著就可以接收數據包了, 進入捕獲數據包的模塊。

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

          這個函數要做的就是接收數據,并把接收到的數據放入buffer中。

          ⑷ 在成功的接收到數據包后,程序將進入下一個模塊:分析數據包。

          這里要介紹一下有關的網絡基本知識,首先介紹一下TCP/IP的分層:

          TCP/IP協議族中,有很多種協議??捎脠D一簡單概括TCP/IP協議族中不同層次的協議。如圖所示,由于TCPUDP、ICMPIGMP都要向IP傳送數據,因此IP必須在生成的IP首部中加入某種標識,以表明數據屬于哪一層。為此,IP在首部中存入一個長度為8 bit的數據,稱作協議域。1表示為ICMP協議,2表示為IGMP協議,6表示為TCP協議,17表示為UDP協議。類似地,許多應用程序都可以使用TCPUDP來傳送數據。運輸層協議在生成報文首部時要存入一個應用程序的標識符。TCPUDP都用一個16 bit的端口號來表示不同的應用程序。TCPUDP把源端口號和目的端口號分別存入報文首部中。網絡接口分別要發送和接收IP、ARPRARP數據,因此也必須在以太網的幀首部中加入某種形式的標識,以指明生成數據的網絡層協議。為此,以太網的幀首部也有一個16 bit的幀類型域。

           

           

          TCP                       

          UDP

          ICMP

          IP

          IGMP

          ARP

          硬件接口

          RARP

          用戶進程        用戶進程        用戶進程        用戶進程      應用層    運輸層 網絡層   鏈路層

             

                                    媒體

          (圖一)

              網絡嗅探程序在分析數據包這一階段正是根據了網絡的工作原理:在收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個過程即是分用。

          4 進一步的發展方向

               還有很多的功能可以加入到本文所設計的軟件中,使其變得更加完整。它的另一個發展的方向就是進一步更好的分析數據包中的數據部分,并能夠把分析出來的數據從ASCII碼轉換為自然語言,這就能夠給用戶帶來很大的方便。

           

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

          FeedBack:
          # re: 網絡嗅探軟件的設計與分析
          2007-12-11 23:57 | tigershi10
          怎么沒有代碼啊  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 黎城县| 陈巴尔虎旗| 连平县| 张家界市| 喀喇沁旗| 广德县| 油尖旺区| 中江县| 临汾市| 乌什县| 武汉市| 德江县| 宿迁市| 天峨县| 绿春县| 竹北市| 东兴市| 贡山| 定结县| 福清市| 秀山| 惠水县| 清水河县| 司法| 九龙城区| 嘉鱼县| 佛坪县| 丰城市| 庄河市| 邯郸县| 峡江县| 海盐县| 和林格尔县| 西乌珠穆沁旗| 大丰市| 定西市| 余江县| 铜川市| 库伦旗| 万源市| 阿勒泰市|