文/王一軍
本軟件具有對IP數(shù)據(jù)包的監(jiān)控分析的基本功能,主要采用嗅探器的基本原理抓取網(wǎng)絡有效信息,通過微軟的系統(tǒng)網(wǎng)絡編程,從中過濾抓取有用的數(shù)據(jù),從而完成對IP數(shù)據(jù)包的監(jiān)控,并以此保證程序的安全性得到保障。
常見的捕包方式有三種,分別為NDIS,WinPcaP,Raw Socket三種技術(shù)。本軟件要完成對IP數(shù)據(jù)包的監(jiān)控技術(shù),大致需要五個步驟才能完成。首先是成功捕獲IP數(shù)據(jù)包,然后分析捕獲的IP數(shù)據(jù)包,一般是根據(jù)用戶提供的條件對IP數(shù)據(jù)包篩選從而確認數(shù)據(jù)包狀態(tài),分類匯總流量,然后保存下來。
因特網(wǎng)是由無數(shù)的局域網(wǎng)連接形成的?;ヂ?lián)網(wǎng)的內(nèi)部網(wǎng)絡的連接方式是什么?它是基于拓撲結(jié)構(gòu)來完成基礎(chǔ)網(wǎng)絡的架構(gòu)?;A(chǔ)架構(gòu)規(guī)定一段信息的傳輸都是從一點到另外一點的模式,這里有客戶端和服務器端的區(qū)分,服務器端卻是基于它的特性分布在局域網(wǎng)當中。但互聯(lián)網(wǎng)上的主機通常是在局域網(wǎng)中,局域網(wǎng)通常都會連接到外網(wǎng),局域網(wǎng)是一種廣播網(wǎng)絡,在服務器端放上信息,像網(wǎng)站源碼,應用程序之類都可發(fā)布到IIS服務器上,任何一個客戶端都可以在互聯(lián)網(wǎng)上通過IP地址或者具體域名來進行訪問。如果以太網(wǎng)中計算機的網(wǎng)卡接受模式設(shè)置為混合模式,則網(wǎng)卡將捕獲所有數(shù)據(jù)包并向上傳遞數(shù)據(jù)包。通過這種方式,可以竊聽和攔截以太網(wǎng)內(nèi)傳輸?shù)男畔ⅲ浖褪腔诖嗽韥硗瓿蓪?shù)據(jù)的監(jiān)聽。
根據(jù)監(jiān)聽的原理,本監(jiān)控軟件主要完成了監(jiān)聽局域網(wǎng)內(nèi)數(shù)據(jù)包、對數(shù)據(jù)包進行拆分并且以不同方式顯示,對攔截的數(shù)據(jù)包的端口、協(xié)議類型以及P地址進行過濾。為了實現(xiàn)這些功能,將其分為四個部分:數(shù)據(jù)包截獲、分組分割、分組過濾和分組顯示。
該軟件能夠?qū)钟蚓W(wǎng)中的一切計算機信息和共享文件完成掃描,這其中又分為高速掃描模式和完全掃描模式。掃描后可獲得計算機名稱、IP地址、MAC地址、共享資源等信息。
Ping是網(wǎng)絡中非常有用的TCP/IP工具,能夠經(jīng)過Ping查看連通性問題。這個問題卻是可以由于許多因素引發(fā)的,例如系統(tǒng)配置出錯、網(wǎng)絡協(xié)議故障,當然還可能是電腦或者服務器故障。
路由跟蹤可用于確定IP數(shù)據(jù)包的最終目標的路徑。tracert命令使用IP生存期(TTL)字段和ICMP錯誤消息來確定網(wǎng)絡上從一個主機到另一個主機的路由,通過向目標發(fā)送不同IP生存時間(TTL)值的“Internet控制消息協(xié)議(ICMP)”回應數(shù)據(jù)包,Tracert診斷程序確定到目標所采取的路由。在轉(zhuǎn)發(fā)數(shù)據(jù)包之前,對于路徑也會有一定的規(guī)定,要求路徑上的每個路由器的數(shù)據(jù)包里的TTL屬性最少要往下減1。數(shù)據(jù)包的TTL屬性的波動幅度可能會不斷減少,當其變?yōu)?時,路由器會發(fā)送超時的信息到客戶端,當數(shù)據(jù)包的TTL為1時,軟件會發(fā)送相應的響應包,數(shù)據(jù)包發(fā)送一次,TTL值就會增加1,目標會隨著數(shù)據(jù)包的發(fā)送進行響應,路由就會得到確認,或者是TTL增加到最大值,此時路由也會確定。路由確定時,路由器會發(fā)送相應的超時消息來進行提醒。有些路由器丟棄TTL過期的數(shù)據(jù)包而不提出任何疑問,這在本程序中卻是看不到的。
NDIS的主要目的就是為NIC制定出標準的API接口。MAC設(shè)備驅(qū)動封裝了所有的NIC硬件實現(xiàn)這一點,以便能夠經(jīng)過公共編程接口訪問應用同一媒體的任意NIC。NDIS同時也提供一個函數(shù)庫(又時也稱作wrapper),這個庫中的函數(shù)可以被MAC驅(qū)動調(diào)用,它還能由高級協(xié)議(如TCP/IP)驅(qū)動程序來進行調(diào)用。同時,這些包裝器函數(shù)減少了驅(qū)動程序?qū)ぷ髋_的依賴。早期版本的NDIS是由微軟和3COM開發(fā)的。在Windows9x和Windows NT中,WFW(用于工作組的Windows)使用的當前NDIS版本由Microsoft開發(fā)。
Winpcap是windows平臺下一個免費的公共的網(wǎng)絡訪問系統(tǒng),通過Winpcap技術(shù)可以完成對數(shù)據(jù)包的抓取和發(fā)送等操作。可用通過對Winpcap的int pcap_f indalldevs_exAPI的調(diào)用來獲得所有本地的網(wǎng)絡接口,然后通過pcap_t* pcap_open對指定的網(wǎng)絡設(shè)備進行抓包/發(fā)包,通過int pcap_next_ex()和int pcap_sendpacket()實現(xiàn)具體的抓包和發(fā)包操作。
要使用原始套接字,必須經(jīng)過創(chuàng)建原始套接字、設(shè)置套接字選項(ioctlsocket函數(shù))和創(chuàng)建并填充相應協(xié)議頭這三個步驟。
分析IP數(shù)據(jù)包格式、TCP、UDP等數(shù)據(jù)格式,如源IP地址和目標IP地址可以通過IP分組獲取,IP數(shù)據(jù)包信息包標識可以計數(shù)IP數(shù)據(jù)包流量。而端口信息可從TCP,UDP獲得。
IP數(shù)據(jù)包主要由版本,頭長,服務類型,包裹總長,重組標識,標志,段偏移量,生存時間,協(xié)議代碼,頭校驗和32位源碼地址已經(jīng)32位目的地址組成。
網(wǎng)絡數(shù)據(jù)抓包,有必要監(jiān)控軟件和服務器之間的網(wǎng)絡節(jié)點,監(jiān)控任何一個網(wǎng)絡節(jié)點(網(wǎng)卡),獲取通過網(wǎng)卡的所有數(shù)據(jù),并根據(jù)網(wǎng)絡協(xié)議解析數(shù)據(jù)。這就是數(shù)據(jù)包捕獲的基本原理。
本文主要是基于局域網(wǎng)的功能的基礎(chǔ)上來對IP數(shù)據(jù)包進行監(jiān)控的技術(shù)軟件進行了可行性分析,主要對IP數(shù)據(jù)包的抓取和發(fā)送的原理進行分析,對數(shù)據(jù)監(jiān)聽,Ping程序的使用以及路由追蹤技術(shù)的分析,基于這些基本技術(shù)之上也就完成了一個IP數(shù)據(jù)包監(jiān)控軟件的一個組成和架構(gòu)。