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

正文內容

網絡數據包的協(xié)議分析程序的設計開發(fā)—計算機(論文)(編輯修改稿)

2025-01-11 03:23 本頁面
 

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