freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā)—計算機(論文)(編輯修改稿)

2025-01-11 03:23 本頁面
 

【文章內(nèi)容簡介】 傳遞到應(yīng)用程序。值得注意的是,包捕獲機 制并不影響操作系統(tǒng)對數(shù)據(jù)包的網(wǎng)絡(luò)棧處理。對用戶程序而言,包捕獲機制提供了一個統(tǒng)一的接口,使用戶程序只需要簡單的調(diào)用若干函數(shù)就能獲得所期望的數(shù)據(jù)包。這樣一來,針對特定操作系統(tǒng)的捕獲機制對用戶透明,使用戶程序有比較好的可移植性。包過濾機制是對所捕獲到的數(shù)據(jù)包根據(jù) 用戶的要求進行篩選,最終只把滿足過濾條件的數(shù)據(jù)包傳遞給用戶程序。 基于 Libpcap 的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實現(xiàn) Libpcap 安裝 Libpcap提供了系統(tǒng)獨立的用戶級別網(wǎng)絡(luò)數(shù)據(jù)包捕獲接口,并充分考慮到應(yīng)用程序的可移植性。 Libpcap可以在絕大多數(shù)類 unix平臺下工作。在 windows平臺下,一個與 Libpcap很類似的函數(shù)包 winpcap提供捕獲功能,其官方網(wǎng)站是 Libpcap軟件包可從 載,解壓后依此執(zhí)行下列三條命令即可安裝。 ./configure make make install 但如果希望 Libpcap能在 linux上正常工作,則必須使內(nèi)核支持 “packet” 協(xié)議 ,也即在編譯內(nèi)核時打開配置選項 CONFIG_PACKET(選項缺省為打開 )。 Libpcap 中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù) 主要函數(shù) : int pcap_findalldevs(pcap_if_t *alldevsp, char *errbuf) 功能:枚舉系統(tǒng)所有網(wǎng)絡(luò)設(shè)備的信息 參數(shù): alldevsp : 是 一 個 pcap_if_t 結(jié) 構(gòu) 體 的 指 針 , 如 果 函 數(shù)pcap_findalldevs 函數(shù)執(zhí)行成功,將獲得一個可用網(wǎng)卡的列表,而里面存儲的就是第一個元素的指針。 Errbuf:存儲錯誤信息的字符串。返回值: int,如果返回 0則執(zhí)行成功,錯誤返回 1。 pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf) 功能:設(shè)置一個抓包描述符 參數(shù):其第一個參數(shù)是我們在上一節(jié)中指定的設(shè)備, snaplen 是整形的,它定義了將被 pcap 捕獲的最大字節(jié)數(shù)。當(dāng) promisc 設(shè)為 true 時將置指定接口為混雜模式(然而,當(dāng)它置為 false 時接口仍處于混雜模式的特殊情況也是有可能的)。 to_ms 是讀取時的超時值,單位是毫秒 (如果為 0則一 直嗅探直到錯誤發(fā)生,為 1 則不確定 )。最后, ebuf 是一個我們可以存入任何錯誤信息的字符串(就像上面的 errbuf)。 int pcap_pile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 mask) 功能:編譯過濾規(guī)則 參數(shù):第一個參數(shù)是會話句柄( pcap_t *handle 在前一節(jié)的示例中)。接下來的是我們存儲被編譯的過濾器版本的地址的引用。再接下來的則是表達式本身,存儲在規(guī)定的字符串格式里 。再下邊是一個定義表達式是否被優(yōu)化的整形量( 0 為 false, 1為 true,標(biāo)準(zhǔn)規(guī)定)。最后,我們必須指定應(yīng)用此過濾器的網(wǎng)絡(luò)掩碼。函數(shù)返回 1 為失敗,其他的任何值都表明是成功的。 int pcap_setfilter(pcap_t *p, struct bpf_program *fp) 功能:設(shè)置過濾規(guī)則。 參數(shù):這非常直觀,第一個參數(shù)是會話句柄,第二個參數(shù)是被編譯表達式版本的引用(可推測出它與 pcap_pile()的第二個參數(shù)相同)。 int pcap_loop(pcap_t *p, int t, pcap_handler callback, u_char *user) 功能:循環(huán)抓包直到用戶中止。 參數(shù):第一個參數(shù)是會話句柄,接下來是一個整型,它告訴 pcap_loop()在返回前應(yīng)捕獲多少個數(shù)據(jù)包(若為負值則表示應(yīng)該一直工作直至錯誤發(fā)生)。第三個參數(shù)是回調(diào)函數(shù)的名稱(正像其標(biāo)識符所指,無括號)。最后一個參數(shù)在有些應(yīng)用里有用,但更多時候則置為 NULL。 數(shù)據(jù)結(jié)構(gòu): struct pcap_if{ struct pcap_if *next。 char *name。 char *description。 struct pcap_addr *addresses。 u_int flags。 }。 pcap_if *next。 如果非空,指向鏈的下一個元素。如果為空是鏈的最后一個元素。 char *name。 指向一個字符串,該字符串是傳給 pcap_open_live()函數(shù)的設(shè)備名; char *description。 如果非空,指向一個對設(shè)備的人性化的描述字符串。 pcap_addr *addresses。 指向網(wǎng)卡地址鏈中的第一個元素。 u_int flags。 PCAP_IF_ 網(wǎng) 卡 的 標(biāo) 志 。 現(xiàn) 在 唯 一 可 用 的標(biāo)識是PCAP_IF_LOOKBACK,它被用來標(biāo)識網(wǎng)卡是不是 lookback 網(wǎng)卡。 struct pcap_pkthdr { struct timeval ts。/*time stamp*/ bpf_u_int32 caplen。 /*length of portion present*/ bpf_u_int32 len。 /*length this packet(off wire)*/ }。 timeval ts。 數(shù)據(jù)報時間戳; bpf_u_int32 caplen。 當(dāng)前分片的長度; dpf_u_int32 len。 這個數(shù)據(jù)報的長度; 細節(jié)描述:在 dump 文件中的每個數(shù)據(jù)報都有這樣一個報頭。它用來處理不同數(shù)據(jù)報網(wǎng)卡的不同報頭問題。 struct pcap_stat { u_int ps_recv。 /* number of packets received */ u_int ps_drop。 /* number of packets dropped */ u_int ps_ifdrop。 /* drops by interface XXX not yet supported */ }。 u_int ps_recv。 接受數(shù)據(jù)報的數(shù)目; u_int ps_drop。 被驅(qū)動程序丟棄的數(shù)據(jù)報的數(shù)目; u_int ps_ifdrop。 被網(wǎng)卡丟棄的數(shù)據(jù)報的數(shù)目; struct pcap_addr{ pcap_addr * next。 sockaddr * addr。 sockaddr * mask。 sockaddr *broadaddr。 sockaddr *dstaddr。 }。 pcap_addr * next。 如果非空,指向鏈表中一個元素的指針;空表示鏈表中的最后一個元素。 sockaddr * addr。 指向包含一個地址的 sockaddr 的結(jié)構(gòu)的指針。 sockaddr * mask。 如果非空,指向包含相對于 addr 指向的地址的一個網(wǎng)絡(luò)掩碼的結(jié)構(gòu)。 sockaddr * broadaddr。 如果非空,指向包含相對于 addr 指向的地址的一個廣播地址,如果網(wǎng)絡(luò)不支持廣播可能為空。 sockaddr * dstaddr。 如果非空,指向一個相對于 addr 指向的源地址的目 的地址,如果網(wǎng)絡(luò)不支持點對點通訊,則為空。 數(shù)據(jù)捕獲模塊的實現(xiàn) 第一步調(diào)用 pcap_findalldevs查 找出所有可用的網(wǎng)卡,顯示出來,并接收用戶選擇網(wǎng)卡。 第二步用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡后,調(diào)用 pcap_open_live生成一個抓包描述符。 第三步通過調(diào)用 pcap_datalink檢查該網(wǎng)卡所在網(wǎng)絡(luò)是不是以太網(wǎng),如果不是則中止程序。 第四步接收用戶輸入的過濾條件,調(diào)用 pcap_pile和 pcap_setfilter生成過濾規(guī)則。 第五步調(diào)用 pcap_loop進行循環(huán)捕獲數(shù)據(jù)包,直到用戶中止。 具體流程入下圖所示: 圖 31數(shù)據(jù)捕獲模塊流程圖 4 協(xié)議分析模塊的實 現(xiàn) 雖然到此為止已經(jīng)可以順利完成數(shù)據(jù)包的監(jiān)聽工作,但這并不意味著己經(jīng)大功告成了,因為從前面的數(shù)據(jù)包監(jiān)聽的原理中可以知道,數(shù)據(jù)包捕獲程序工作在pcap_findalldevs () pcap_open_live () pcap_datalink () pcap_pile() pcap_setfilter() pcap_loop() end Begin N Y 網(wǎng)絡(luò)底層,將網(wǎng)卡設(shè)置為混雜模式以后,從網(wǎng)絡(luò)底層捕獲到的數(shù)據(jù)包會直接往上發(fā)給應(yīng)用程序 進行 處理,而不再像普通的數(shù)據(jù)包那樣經(jīng)過操作系統(tǒng)的層層過濾。這樣一來,應(yīng)用程序收到的數(shù)據(jù)包是最原始的數(shù)據(jù)包,也就是說監(jiān)聽主機接收到的數(shù)據(jù)包中,除了數(shù)據(jù)包本身的內(nèi)容之外,還帶有從對方主機中的傳輸層、網(wǎng)絡(luò)層以及數(shù)據(jù)鏈路層的數(shù)據(jù)包頭信息,所以要想獲得數(shù)據(jù)包里的應(yīng)用數(shù)據(jù),是需要我們自己來按照每一層的 協(xié)議剝離數(shù)據(jù)包頭中的每一層首部內(nèi)容的,這就是協(xié)議分析需要完成的工作。 網(wǎng)絡(luò)協(xié)議分析的總體流程 網(wǎng)絡(luò)功能的分層帶來了網(wǎng)絡(luò)協(xié)議的層次結(jié)構(gòu),網(wǎng)絡(luò)數(shù)據(jù)在傳送時,同樣也是被分解成一個個的數(shù)據(jù)報逐層傳送的 ,在兩臺主機的實際通信過程中,從邏輯上講,是兩臺主機的對等層直接通信。而實際上,數(shù)據(jù)包并不是從某一計算機網(wǎng)絡(luò)系統(tǒng)的第 N層直接傳導(dǎo)另一計算機網(wǎng)絡(luò)系統(tǒng)的第 N層的,而是從這臺計算機的某一層直接傳送 N十 1層,直至到達物理層最后分解為比特流流經(jīng)物理介質(zhì)到達另一臺計算機,然后在從另一臺計算機中的底層逐層向上傳送的。 當(dāng)數(shù)據(jù)包被傳輸 到某一層的時候,該層都會對數(shù)據(jù)包進行加工,在發(fā)送方通常是加上一個與該層協(xié)議有關(guān)的控制或標(biāo)志信息,即數(shù)據(jù)包的包頭或包尾;而在接受方則是需要逐層拆下本層標(biāo)志,即去掉數(shù)據(jù)包的包頭或包尾,根據(jù)控制信息進行相應(yīng)的處理,將分解后的數(shù)據(jù)報逐層上傳,直至應(yīng)用程序獲得最終數(shù)據(jù)。比如發(fā)送方在數(shù)據(jù)鏈路層通常會在包頭加上目的 MAC地址、源 MAC地址、其他一些具體網(wǎng)絡(luò)信息及幀定界符,在包尾加上循環(huán)冗余碼,并使用字節(jié)填充或位填充,由接收方數(shù)據(jù)鏈路層去掉包頭與包尾進行相關(guān)解釋工作。數(shù)據(jù)包的加工工作 如圖41所示: 圖 41 數(shù)據(jù)封裝示意 TCP傳給 IP的數(shù)據(jù)單元稱作 TCP報文段或簡稱為 TCP段 (TCP Segment); IP傳給用戶數(shù)據(jù) 用戶數(shù)據(jù) APP 首部 應(yīng)用數(shù)據(jù) TCP 首部 應(yīng)用數(shù)據(jù) TCP 首部 IP 首部 應(yīng)用數(shù)據(jù) TCP 首部 IP 首部 以太網(wǎng)頭 以太網(wǎng)尾 應(yīng)用程序 TCP IP 以太網(wǎng)驅(qū)動程序 網(wǎng)絡(luò)接口層的數(shù)據(jù)單元稱作 IP數(shù)據(jù)報 (IP datagram);通過以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀,分組既可以是一個 IP數(shù)據(jù)報也可以是 IP數(shù)據(jù)報的一個片 (fragment)。協(xié)議分析就是數(shù)據(jù)封裝的逆過程。協(xié)議分析的流程圖如圖 42所示: 圖 42 網(wǎng)絡(luò) 協(xié)議分析流程圖 從圖可以看到,對于監(jiān)聽程序捕獲到的數(shù)據(jù)報,需要按以下步驟分層次進行協(xié)議分析: (1)首先是讀取數(shù)據(jù)鏈路層的 報 頭,從報頭中可以得到:計算機的源 MAC地址和目的 MAC地址、數(shù)據(jù)包的長度以及上層協(xié)議的類型。 (2)然后需要去掉數(shù)據(jù)鏈層的 報 頭,此時可以獲得 IP數(shù)據(jù)報、 arp、 rarp數(shù)據(jù)包,在這一層中可以對 IP數(shù)據(jù)報做一定的統(tǒng)計和分析等等;對 arp、 rarp數(shù)據(jù)包可以獲得發(fā)送端 IP和目的 IP等重要信息。 (3)對于 IP數(shù)據(jù)報去除網(wǎng)絡(luò)層的 報 頭以后,可以獲得傳輸層數(shù)據(jù)報,對TCP/UDP數(shù)據(jù)包的報頭進行分析在這一層中還可以獲得數(shù)據(jù)報的端口號信息,根據(jù)端口號進一步判斷數(shù)據(jù)報屬于何種應(yīng)用層協(xié)議。 開始 讀取原始數(shù)據(jù)報文 提取并分析鏈路層報頭 提取并分析 IP 地址信息 提取并分析 TCP/UDP 地址信息 根據(jù)端口判斷應(yīng)用層協(xié)議 顯示 提取報頭中的主要信息 結(jié)束 顯示 (4)對數(shù)傳輸層數(shù)據(jù)報去除掉傳輸層 報 頭以后,就獲得了應(yīng)用層數(shù)據(jù)報,在應(yīng)用層進行協(xié)議分析的工作就是按照應(yīng)用層的工作原理、協(xié)議規(guī)范,還原獲得應(yīng)用層的內(nèi)容,如 SMTF/POP3協(xié)議分析可以還原出正在傳輸?shù)泥]件信息, FTP協(xié)議分析可以還原出傳輸中的文件名以及用戶名口令密碼等信息, HTTP協(xié)議分析可以還原出目標(biāo)主機瀏覽網(wǎng)頁的原貌等等。 (5)對所有的數(shù)據(jù) 報 頭分析處理后,取出其中的主要信息然后顯示給用戶 。 對 TCP/IP 模型中各層協(xié)議的分析 前面的內(nèi)容已經(jīng)提到過,我們在對數(shù)據(jù)包根據(jù)應(yīng)用層協(xié)議進行分析的時候都需要首先剝離數(shù)據(jù) 包中的包頭并且需要根據(jù)包頭信息判斷是何種應(yīng)用層協(xié)議。下面就按照數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層到傳輸層再到應(yīng)用層的順序詳細的講解每層包頭的結(jié)構(gòu)以及如何對每層的數(shù)據(jù)報進行協(xié)議分析。 以太網(wǎng)首部的分析與提取 因為每一個使用 Libpcap捕獲的數(shù)據(jù)包,都會有一個指向原始報文頭的指針。假設(shè)這個指針為 p。
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1