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

正文內容

網絡數據包捕獲工具的設計與實現—計算機(論文)(編輯修改稿)

2026-01-11 03:23 本頁面
 

【文章內容簡介】 //時間戳 Bpf_u_int32 caplen; //捕獲長度 Bpf_u_int32 len; //數據包長度 }; 此數據結構用來描述每個捕獲到的數據包的一些基本信息,每個數據包都有此數據結構。 Winpcap 函數 Winpcap 提供的輸出函數與 Libpcap 的函數完全一樣,使用方法也一樣,呵呵,也就是說掌握了其中任何一種那么恭喜你不論是 windows 下的還是 linux 下的你都已經邁出了堅實的 一大步,至少我個人是這么認為的。下面介紹一些主要的函數。 a) int pcap_findalldevs( pcap_if_t **alldevsp,char *errbuf); 函數返回值:如果操作成功,就返回 0;失敗就返回 1。 參數描述:參數 alldevsp 表示網絡接口鏈表,參數 errbuf 用來儲存錯誤信息。 此函數的功能是查找機器的所有可用網絡接口,用一個鏈表返回。 b) void pcap_freealldevs(pcap_if_t *alldevs); 函數返回值:無。 參數描述:參數 alldevs 表示一個網絡接口鏈表。 此函數的功能是釋放網絡接口鏈表中的所有網絡接口。 c) pcap_t *pcap_open_live(const char *device,int snaplen,int promisc,int to_ms,char *ebuf); 函數返回值:返回一個 Libpcap 句柄。 參數描述:參數 device 表示網絡接口的名字;參數 snaplen 表示捕獲數據包的長度;參數 promisc 表示是否設置混雜模式,如果賦值 1,就表示設置混雜模式;參數 to_ms 表示等待時間;參數 ebuf 表示儲存錯誤 信息。 此函數的功能是打開一個網絡接口進行數據包捕獲打開的模式有promisc 表示,如果是 1 就表示以混雜模式把接口打開。 a) int pcap_setfilter(pcap_t *p,struct bpf_program *fp) 第 9 頁 共 27 頁 //此函數設置 BPF 過濾規(guī)則 ,由參數 fp確定 b) int pcap_pile(pcap_t *p,struct bpf_program *program,char *buf,int optimize,bpf_u_int32 mask) //此函數的功能是編譯 BPF 過濾規(guī)則。 說明: 此處的過濾規(guī)則只是在內核中過濾顯示協(xié)議信息,并非過濾數據包,并不能做到對數據包的阻塞功能,要想過濾數據包可以采用 NDIS 網絡驅動在更底層來實現,所以我并沒由添加這部分功能,這里只是提出來說明下有這些功能。 a) int pcap_loop(pcap_t *p,int t,pcap_handler callback,u_char *user) 函數返回值:操作成功返回 0,失敗返回負數。 參數描述:參數 p 表示 winpcap 的句柄;參數 t為捕獲數據包的個數如果為 1 則表示無限個;參數 callback 表示回調函數;參數 user 表示回調函數中傳輸的參數。 此函數是循環(huán)捕獲網絡數據包,直到遇到錯誤或者滿足退出條件。每捕獲一個數據包就調用 callback 指示的回調函數,所以可以在回調函數中對捕獲到的數據包進行操作。 說明 : 由于 pcap_loop()這個函數在沒有數據包進出時會可能阻塞掉,而且用 loop 會造成程序代碼更加復雜,所以我采用的下面一個pcap_next_ex()來循環(huán)抓包。 b) int pcap_next_ex(pcap_t *p,struct pcap_pkthdr **pkt_header,const u_char **pkt_data) 函數返回值:函數操作成功返回 1,如果超時就返回 0,失敗則返回 1或 2。 參數描述:參數 p 表示 Winpcap 句柄;參數 pkt_header 寶石數據包頭;參數 pkt_data 表示數據包。 此函數的功能時捕獲一個網絡數據包。 說明: winpcap_next_ex() 從 winpcap_next() 發(fā)展 的, 更加 簡單 好用 ,winpcap_next() 還要配合 pcap_dispatch() 來 使 用 才 能 達 到Winpcap_next_ex()的效 果。 c) void pcap_close(pcap_t *p) 函數返回值:無。 參數描述:參數 p 為 Winpcap 句柄。 第 10 頁 共 27 頁 此函數的功能是關閉 winpcap 操作,并銷毀相應資源。 a) pcap_dumper_t *pcap_dump_open(pcap_t *p,const char *fname) 此函數的功能是打開一個文件,并準備向其寫入網絡數據包數據。 b) void pcap_dump(u_char *user,const struct pcap_pkthdr *h,const u_char *sp) 此函數的功能是向文件中寫入網絡數據包內容。 3 設計方案與系統(tǒng)功能描述 設計方案 在多方參考的情況下打算采用 Winpcap和 Winsock中的一種來實現抓包等相應的功能。參考了《網絡安全開發(fā)包詳解》和《 Windows 防火墻和網絡封包截獲技術》這兩本書后決定采用 Winpcap 來實現代碼。 Winpcap 中封裝了許多的功能,只需要直接調用,就像 java 中封裝好的類一樣,使用起來非常方便。 通過 Microsoft Visual C++ MFC 來實現可視化編程,通過一個簡單的界面來實現對于捕獲網卡信息 、本機 IP 地址、廣播地址和子網掩碼等信息的獲取顯示。設置開始 /停止按鈕來實現對于抓包函數的調用的控制。在界面上獲取并顯示系統(tǒng)當前時間,通過設置定時器每隔一秒鐘觸發(fā)一次獲取當前系統(tǒng)時間來實現一個時間顯示。在開始 /停止按鈕中添加循環(huán)判斷語句,并且設置一個 bool 型變量來控制是否開啟抓包函數的調用。如果執(zhí)行抓包函數,那么將捕獲到的數據包的信息保存并解析處里面的信息返回到 list 表中插入顯示出來。如果點擊停止按鈕則調用 pcap_close()函數來實現關閉 winpcap 操作。大體的一個設計思路就是這樣子的,具體的各 個功能實現在軟件編碼部分會詳細講解。 下面部分,為了方便大家形象的理解其中的一些東西,會適當的結合一些圖片和代碼來分類詳細描述。 下面的圖 4是開發(fā)初期的大體界面框架。 第 11 頁 共 27 頁 圖 4 MFC控制界面 功能描述 制作的這個軟件的最主要也是最核心的功能就是對于網絡數據包的捕獲,對于捕獲到的網絡數據包顯示和簡單的分析,分析數據包的協(xié)議類型(是 TCP、UDP 還是 ICMP 等),還有數據包的源 IP、目的 IP 還有端口號、時間戳和包長等最后并將這些信息顯示出來。實質是主要實現一個網絡實時監(jiān)聽的功能,然后將 捕捉到的數據包保存下來以便進一步的分析使用。圖 5 中為系統(tǒng)初始化后加載各個模塊的流程圖。具體功能在后面章節(jié)中會分別詳細說明。 圖 5 功能模塊圖 第 12 頁 共 27 頁 系統(tǒng)流程圖 下圖 6 是程序流程圖 圖 6 程序流程圖 根據流程圖可以清楚明白的看到每一步的流程,程序是怎么樣執(zhí)行下去的,有助于理解程序。 4 編碼實現 Winpcap環(huán)境設置 配置環(huán)境首先需要安裝 Winpcap,所使用的是 ,這個是必須安裝的,它是所有基于 Winpcap 的應用程序運行所必須的。還有就是 文件的解壓了放在 D: \畢業(yè)設計- KNIGHTG\WPDPACK 中,它是Winpcap 開發(fā)包文件,是設計基于 Winpcap 的應用程序的開發(fā)文件。該文件包括開發(fā)用的頭文件和靜態(tài)鏈接庫文件,是開發(fā)者要用到的。解壓后會有幾個文件夾。其中, Include 文件夾中的是 Winpcap 的一些頭文件,編程時必須把此文件夾的路徑包含到 Visual C++的包含頭文件的路徑中;文件夾 Lib 中是開發(fā)程序時用刀的靜態(tài)鏈接庫,編程時此文件夾也必須包含到 Visual C++庫文件路徑中。 VC 環(huán)境下安裝配置過程如下: 第 13 頁 共 27 頁 添加路 徑: 工具( Tools) 選擇( Options) 目錄( Directories) 同下圖圖 7 進行設置 。 圖 7 Winpcap環(huán)境配置 1 這里添加路徑要注意自己 Winpcap 安裝時的 WPCAP 和 Include 的文件夾的位置 ,要不然在代碼編譯和連接的時候都會報: Cannot open include file: 39。39。: No such file or directory。剛開始寫代碼的時候就吃了這方面的虧,對于這個 Winpcap 的環(huán)境配置不來,教程和相應的參考書籍里面寫的非常的模糊,當 時配置起來選項和欄目又多不知道該要填在哪兒,對于一個 Winpcap 的初學者來說實在時有一定的難度,后來在 MSDN 論壇上面求教后才明白該怎么弄,所以在論文中特別將這點加入進來。 添加路徑時要注意這里不僅要添加頭文件相關的路徑,還要加入 Libpcap 的的路徑。否則編譯過了,連接時也會報錯: cannot open file 。 圖 8 Winpcap環(huán)境設置 2 設置工程參數 新建一個工程后, 第 14 頁 共 27 頁 工程( Project) 設置( Settings) 選擇 C/C++;在預處理程序定義 ( Preprocessor definition)里面添加 圖 9 Winpcap環(huán)境設置 3 WPCAP 即可。 同理設置 link,如下圖圖 10: 圖 10 Winpcap環(huán)境配置 4 MFC控件相關 通過設置不同的按鈕來實現不同的控制功能,還可以通過設置 list 表來顯示信息。其中這里主要說下關于 list 表的問題。其他的控件都比較簡單就不在這里多說了。 將 list 的屬性中的 style 里查看選項改成了 report 格式,然后通過插入語 第 15 頁 共 27 頁 句來實現對表項中每一列顯示信息種類的設置。 //設置監(jiān)聽狀況表項 ( 0, _T(協(xié)議類型 ), LVCFMT_LEFT, 60)。 ( 1, _T(時間 ), LVCFMT_LEFT, 70)。 ( 2, _T(包頭長 ), LVCFMT_LEFT, 60)。 ( 3, _T(源 IP地址 ), LVCFMT_LEFT, 125)。 ( 4, _T(目的 IP地址 ), LVCFMT_LEFT, 125)。 ( 5, _T(源端口號 ), LVCFMT_LEFT, 60)。 ( 6, _T(目的端口號 ), LVCFMT_LEFT, 80)。 設置第一列為協(xié)議類型,然后第二到七列分別為捕獲到數據包的時間戳、包頭長度、源 IP、目的 IP、源端口號和目的端口號。 然后在抓包函數執(zhí)行后得到我們需要的信息后執(zhí)行和列的插入來將數據返回界面并顯示出來。 row=()。 row=(row,ip_header_proto)。 //協(xié)議類型 (row,1,time1)。 //捕獲數據包的時間戳 (row,2,bag_header_len)。 //包頭長度 (row,3,sourceip)。 //源 IP (row,4,desip)。 //目的 IP (row,5,sourceport)。 //源端口號 (row,6,desport)。 //目的端口號 其中數據包的顯示是通過定時器每隔一秒鐘觸發(fā)調用一次將捕捉到的數據包信息返回插入到 list 表中 定時器和系統(tǒng)時間的獲得 SetTimer(1,1000,NULL); //設置定時器 ,1000ms觸發(fā)一次 ? ? CDialog::OnTimer(nIDEvent)。 // 獲得系統(tǒng)當前時間 SYSTEMTIME tNow。 GetLocalTime(amp。tNow)。 第 16 頁 共 27 頁 (%2d:%2d:%2d,)。 UpdateData(false)。 其中設置定時器放在程序的初始化里邊,通過控件顯示定時器每個一秒觸發(fā)一次獲取當前時間函數所得到的 時間。定時器的設置在捕獲網絡數據包函數還將會使用到,后面會詳細說明。 捕獲并顯示本機信息 int getworkcardinfo() //捕獲網卡信息函數 pcap_findalldevs(amp。alldevs, errbuf); //
點擊復制文檔內容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1