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

正文內(nèi)容

[計(jì)算機(jī)硬件及網(wǎng)絡(luò)]基于協(xié)議分析的網(wǎng)絡(luò)監(jiān)測系統(tǒng)研究與實(shí)現(xiàn)論文-資料下載頁

2025-05-13 20:40本頁面
  

【正文】 環(huán)境下 ,只有 Windows2021 提供了原始套接字 ,而且非常有限 .因此在 Windows環(huán)境下 ,WinPcap就成為首選的構(gòu)造數(shù)據(jù)包的函數(shù)庫 ,它提供了一套標(biāo)準(zhǔn)穩(wěn)定的函數(shù) .另外 ,NPF 增加了一些新的函數(shù) ,這些函數(shù)可以使數(shù)據(jù)包通過一次用戶和內(nèi)核模式之間的轉(zhuǎn)換就發(fā)送幾次 .數(shù)據(jù)復(fù)制到內(nèi)核中 ,然后通過調(diào)用一次 NDIS 將包發(fā)送到網(wǎng)絡(luò)中 . 盡管 WinPcap 提供了一套新的函數(shù)來開發(fā)這些特性 ,但它沒有提供那些強(qiáng)大的創(chuàng)建數(shù)據(jù)包的抽象函數(shù) ,這需要通過其它現(xiàn)有的工具來實(shí)現(xiàn) .程序員可以利用著名的 Lib Packet Assembly Library 的 Windows 版本實(shí)現(xiàn) ,這個(gè)函數(shù)庫增加了數(shù)據(jù)包結(jié)構(gòu)層并在WinPcap 上構(gòu)造數(shù)據(jù)包 . 系統(tǒng)開發(fā)環(huán)境 本系統(tǒng)開發(fā)和運(yùn)行環(huán)境為 Windows XP 操作系統(tǒng) ,開發(fā)過程中使用的工具是 Visual C++,驅(qū)動(dòng)和驅(qū)動(dòng)開發(fā)包為最新版 WinPcap_4_1_2,WinPcap 驅(qū)動(dòng)在 VC++ 環(huán)境中的設(shè)置 方法如下: 1. 到 下載安裝包 和 Developer39。s Pack. 。 ,解壓 Developer39。s Pack,分別找到 LIB 和 Include 目錄。打開VC++,首先在 Tools=Options=Directories,分別配置 lib 和 Include 目錄。當(dāng)中 Show Directories for 可以指定相應(yīng)的文件目錄 ++環(huán)境配置。 Project=Settings=Link=Object/Library Modules 里面添加需要的 LIB. ( ) 系統(tǒng)實(shí)現(xiàn)界面 網(wǎng)卡選擇界面 雙擊網(wǎng)卡名稱顯示每個(gè)網(wǎng)卡的具體信息,點(diǎn)擊確定綁定網(wǎng)卡。 如圖 13 所示: XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 25 圖 13 網(wǎng)卡綁定 示范圖 系統(tǒng)主界面 系統(tǒng)主界面分成五部分, 如圖 14 所示 ,分別是數(shù)據(jù)包列表、協(xié)議樹顯示、數(shù)據(jù)包內(nèi)容顯示、數(shù)據(jù)包統(tǒng)計(jì)、過濾規(guī)則設(shè)定模塊。 其中數(shù)據(jù)包列表顯示捕獲到的數(shù)據(jù)包的基本信息,包括編號、時(shí)間戳、源網(wǎng)卡地址、目的網(wǎng)卡地址、長度、協(xié)議、 源端口、源 IP 地址、目的地址、目的地址等;協(xié)議樹顯示的是協(xié)議樹視圖,展示了捕獲數(shù)據(jù)包協(xié)議解析后的結(jié)構(gòu);數(shù)據(jù)包內(nèi)容顯示模塊顯示數(shù)據(jù)包的 16 進(jìn)制表示及數(shù)據(jù)的 ASCII 編碼表示。 數(shù)據(jù)包統(tǒng)計(jì)模塊顯示數(shù)據(jù)包的統(tǒng)計(jì)結(jié)果,這樣可以很方便的顯示在整個(gè)包捕獲過程中捕獲的 TCP、 UDP、ARP 及其他包的數(shù)量及其變化 ;過濾規(guī)則可以設(shè)定你想得到的數(shù)據(jù)包,如 TCP 或 UDP 等 。 XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 26 圖 14 系統(tǒng)主界面 示范圖 系統(tǒng)數(shù)據(jù)包捕獲流程設(shè)計(jì) 首先,調(diào)用 pcap_findalldevs()函數(shù)查找可用的網(wǎng)卡并通過它來獲得網(wǎng)卡的詳細(xì)信息,用 pcap_open_live()函數(shù)打開網(wǎng)絡(luò)設(shè)備,建立捕獲會(huì)話,然后用 pcap_pile()編譯過濾器,編譯過濾規(guī)則形成內(nèi)核過濾碼,傳遞給 pcap_setfilter()使過濾器生效,調(diào)用pcap_loop()捕獲數(shù)據(jù)包并進(jìn)行協(xié)議分析,最后調(diào)用 pcap_close()釋放資源, 關(guān) 閉并返回,這就是基于 WinPcap 的數(shù)據(jù) 包 捕獲流程。 如圖 15 所示: XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 27 圖 15 數(shù)據(jù)包捕獲流程 示范圖 系統(tǒng)詳細(xì)設(shè)計(jì) 網(wǎng)卡捕獲模塊 我們用 WinPcap 來開發(fā)應(yīng)用程序,首先就要獲得這臺(tái)計(jì)算機(jī)上所有的網(wǎng)卡信息,此功能 通過 pcap_findalldevs()函數(shù)來實(shí)現(xiàn),它返回一個(gè) pcap_if 結(jié)構(gòu)的鏈表,每個(gè) pcap_if結(jié)構(gòu)含有一個(gè)網(wǎng)卡適配器的信息。包括本機(jī) IP 地址、子網(wǎng)掩碼、廣播地址和一個(gè)目的地XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 28 址,還有網(wǎng)卡描述信息。其中 name 和 description 這兩欺項(xiàng)分別包含了相應(yīng)網(wǎng)卡的名稱和描述,使我們更清楚的了解網(wǎng)卡的信息,增加了易讀性。 然后就要通過 pcap_open_live()函數(shù)來打開網(wǎng)絡(luò)適配器。 pcap_t * pcap_open_live(const char * device,//網(wǎng)卡的描述名字 int snaplen,//指定捕獲的網(wǎng)絡(luò)數(shù)據(jù)包長度最大值 int promisc,//決定網(wǎng)卡是否工作在混雜模式 int to_ms,//超時(shí)控制的時(shí)間設(shè)置 char *ebuf//存儲(chǔ)出錯(cuò)信息) 此模塊實(shí)現(xiàn)的部分主要代碼: //獲得計(jì)算機(jī)網(wǎng)卡列表及網(wǎng)卡信息 //初始化樹形選擇 HTREEITEM root = (_T(網(wǎng)絡(luò)適配器 ))。 if(pcap_findalldevs(amp。m_pAllDevs, m_strErrorBuf) == 1) return FALSE。 for(m_pDev = m_pAllDevs。m_pDev != NULL。m_pDev = m_pDevnext) { char temp[400]。 CString strText。 HTREEITEM hSubItem = (m_pDevname,root)。 if(m_pDevdescription != NULL) { (網(wǎng)卡描述信息 : %s,m_pDevdescription)。 (strText,hSubItem)。 } else { (網(wǎng)卡描述信息 : 空 ,hSubItem)。 } if(m_pDevaddresses != NULL amp。amp。 m_pDevaddressesaddr != NULL) { iptos(((struct sockaddr_in *)m_pDevaddressesaddr),temp)。 (IP 地址 : %s,temp)。 (strText,hSubItem)。 XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 29 } else { (IP 地址 : 空 ,hSubItem)。 } if(m_pDevaddresses != NULL amp。amp。 m_pDevaddressesbroadaddr != NULL) { iptos(((struct sockaddr_in *)m_pDevaddressesbroadaddr),temp)。 (廣播地址 : %s,temp)。 (strText,hSubItem)。 } else { (廣播地址 : 無 ,hSubItem)。 } if(m_pDevaddresses!=NULL amp。amp。 m_pDevaddressesmask!=NULL) { iptos(((struct sockaddr_in *)m_pDevaddressesmask),temp)。 (子網(wǎng)掩碼 : %s,temp)。 (strText,hSubItem)。 } else { (子網(wǎng)掩碼 : 空 ,hSubItem)。 } if(m_pDevaddresses!=NULL amp。amp。 m_pDevaddressesdstaddr!=NULL) { iptos(((struct sockaddr_in *)m_pDevaddressesdstaddr),temp)。 (目地地址 : %s,temp)。 (strText,hSubItem)。 } XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 30 else { (目地地址 : 無 ,hSubItem)。 } } m_pDev = NULL。 (root,TVE_EXPAND)。 return TRUE。 // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CAdapaterSelection::OnOK() { // TODO: Add extra validation here if(m_pDev == NULL) { MessageBox(請雙擊選擇網(wǎng)卡 !)。 return。 } if(m_pDevaddresses == NULL) { MessageBox(網(wǎng)卡不可用 !)。 return。 } MessageBox(網(wǎng)卡綁定成功 !)。 數(shù)據(jù)包過濾模塊 經(jīng)過以上的工作,我們已經(jīng)捕獲到了數(shù)據(jù)包,但是捕獲到的數(shù)據(jù)包的數(shù)量是很大的。我們只是對一些特定的服務(wù)或端口的通信感興趣,如我們想監(jiān)聽 FTP 服務(wù)的 21 端口,或Http 服務(wù)的 80端口,這就需要我們設(shè)定一定的過濾規(guī)則,把一些價(jià)值不大的包都過濾掉,只留下我們想看到的數(shù)據(jù)包,這就是數(shù)據(jù)包過濾模塊的作用。此處使用了 WinPcap 的兩個(gè)關(guān)鍵函數(shù) pcap_pile()和 pcap_setfilter()。 pcap_pile()接收一個(gè)高層布爾過濾表達(dá)式字符串,并翻譯成能被過濾引擎讀懂的低級二進(jìn)抽碼。如果沒有指定表達(dá)式,就存儲(chǔ)網(wǎng)絡(luò)全部數(shù)據(jù)包,否則就存儲(chǔ)表達(dá)式為 真的包。操作失敗會(huì)返回 1,返回其他值表示成功。 int pcap_pile(pcap_t* p,//表示已經(jīng)建立的捕獲會(huì)話句柄 XXXX 大學(xué) 2021 屆畢業(yè)論文(設(shè)計(jì)) 31 struct bpf_program * fp,//存放編譯以后的 NPF 過濾規(guī)則 char * str,//規(guī)則表達(dá)式格式的過濾規(guī)則 int optimize, //制定優(yōu)化選項(xiàng) bpf_u_int32 mask//網(wǎng)絡(luò)掩碼 ) pcap_setfilter()把編譯好的過濾規(guī)則與 NPF 核心驅(qū)動(dòng)進(jìn)行綁定,使捕獲和內(nèi)核驅(qū)動(dòng)相并聯(lián)。一旦 pcap_setfilter()被調(diào)用,相關(guān)的過濾器能夠用于網(wǎng)絡(luò)上到來的所有數(shù)據(jù)包,應(yīng)用程序只接受那些符合條件數(shù)據(jù)包。返回值 1表示操作失敗,其他值表示成功。 int pcap_setfilter(pcap_t *p,//表示已經(jīng)建立的捕獲會(huì)話包柄 struct bpf_program *fp//編譯后的 NPF 能識別的過濾規(guī)則 ) 一些基礎(chǔ)的過濾規(guī)則如下: (1)站過濾:只允許來自一臺(tái)主機(jī)或者服務(wù)器的數(shù)據(jù)。 (2)協(xié)議過濾:根據(jù)不同的協(xié)議來過濾數(shù)據(jù),如:選擇 TCP 數(shù)據(jù)而非 UDP 數(shù)據(jù);或者既選擇 TCP又選擇 UDP 數(shù)據(jù)。 (3)服務(wù)過濾:根據(jù)端口號來選擇特定數(shù)據(jù)包。 (4)通用過濾:從數(shù)據(jù)包中某一特定位置開始,選擇具有某些共同數(shù)據(jù)特征的數(shù)據(jù)包。 大多數(shù)情況下,過濾規(guī)則是上面基本規(guī)則的組合。 該系統(tǒng) 的過濾模塊可以同時(shí)對站、協(xié)議和服務(wù)端口進(jìn)行設(shè)置過濾,如: Src host and udp and port 8000。 過濾表達(dá)式由一個(gè)或多個(gè)原主( primitive)組成。原主通常由標(biāo)識和標(biāo)識前的多個(gè)修飾詞組成。修飾詞有 3種不同的類型,分別為類型、方向和協(xié)議。類型修飾詞表示標(biāo)識的種類: host 代表主機(jī)類型, 代表網(wǎng)絡(luò)類型, port 代表端口類型。方向修飾詞表示數(shù)據(jù)的傳輸方向:有 src、 dst,可以根據(jù)需要進(jìn)行組合。 src 表示源地址, dst 表示目的地址,src or dst 表示無方向, src and dst 表示源地址和目的地址都要滿足。協(xié)議修飾詞表示數(shù)據(jù) 使用的協(xié)議類型:有 ether、 ip、 arp、 rarp、 tcp 和 udp 等。另外還有一些特殊的原主關(guān)鍵字,如 gateway、 broadcast、 less 等和數(shù)學(xué)表達(dá)式,我們可能通過 and、 or 和 not連接原語來組建更復(fù)雜的過濾表達(dá)式。 數(shù)據(jù)包捕獲模塊 上面 我們 已經(jīng)設(shè)置好了數(shù)據(jù)的過濾規(guī)則,然后就要使用 pcap_dispatch()或pcap_loop()函數(shù)進(jìn)行捕獲。這兩個(gè)函數(shù)功能非常相似,區(qū)別是 pcap_dispatch()當(dāng)超時(shí)時(shí)間到了會(huì)返回,而 pcap_loop()直到數(shù)據(jù)包被捕獲才會(huì)返回。所以 pcap_loop()會(huì)在一段時(shí)間內(nèi),阻塞網(wǎng)絡(luò)的利用。這兩個(gè)函數(shù)都有一個(gè)回調(diào)參數(shù), packet_hangler 指向一個(gè)可以接收數(shù)據(jù)包的函數(shù)。每收到一個(gè)新的數(shù)據(jù)包就會(huì)去調(diào)用這個(gè)函數(shù)實(shí)現(xiàn)特定的功能。對于這個(gè) 模 塊 本 文選 用 的 是 pcap_loop() 函 數(shù), 而 沒 有選 用 pcap_dispatch()函數(shù),pcap_dispatch()函數(shù)一般用于比較復(fù)雜的程序中,對于此模塊來說, pcap_loop()就可以滿足需求了。捕獲到數(shù)據(jù)包,先將其存
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1