摘? 要:網(wǎng)絡(luò)信息獲取在企業(yè)的決策制定中占據(jù)了重要的位置,結(jié)合“網(wǎng)絡(luò)爬蟲設(shè)計”課程內(nèi)容,針對信息的自動抓取設(shè)計實現(xiàn)了一套基于HTTP報文交互的網(wǎng)絡(luò)抓包軟件。本軟件設(shè)計并實現(xiàn)了多線程網(wǎng)絡(luò)信息請求及解析、數(shù)據(jù)存儲、參數(shù)配置、日志記錄等功能,用于實時自動地獲取特定網(wǎng)絡(luò)信息并進行解析提取以及存儲,以便后續(xù)統(tǒng)計分析。該軟件抓住企業(yè)需求,具有較好的實用性。
關(guān)鍵詞:網(wǎng)絡(luò)信息;抓取解析;自動實時;實用性;抓包軟件
中圖分類號:TP391;TP311.5? ? ? ?文獻標識碼:A 文章編號:2096-4706(2020)22-0020-03
Analysis and Design of Network Packet Capture Software Based on HTTP Message
XIE Jian
(Hunan College of Information,Changsha? 410200,China)
Abstract:Network information acquisition occupies an important position in the decision-making of enterprises. Combined with the content of the “Web Crawler Design” course,a set of network packet capture software based on HTTP message interaction is implemented for the design of automatic information capture. The software design and implementation of multithreading network information request and parsing,data storage,parameter configuration,log recording and other functions,which are used to automatically obtain specific network information in real time,extract and store it for subsequent statistical analysis. The software has good practicability by grasping the needs of enterprises.
Keywords:network information;grab and parsing;automatic and real-time;practicality;packet capture software
0? 引? 言
企業(yè)經(jīng)營決策的制定離不開有效信息的支撐,特別是互聯(lián)網(wǎng)時代的網(wǎng)絡(luò)信息,信息量大、更新速度快,若仍采用人工方式收集,不僅需要花費較高的人力成本,而且還不能保證信息能夠?qū)崟r收集、實時上報,從而影響到企業(yè)運營策略的及時修正,進而影響到企業(yè)效益,這種情形在以賺取中間差價為盈利點的行業(yè)企業(yè)中尤為突出。軟件通過程序方式自動抓取、解析指定網(wǎng)站數(shù)據(jù)并保存到數(shù)據(jù)庫,從而取代傳統(tǒng)的人工收集保存方式,在降低成本、提高效率的同時,也保證了數(shù)據(jù)的時效性。
本軟件是筆者針對學校的專業(yè)課程“網(wǎng)絡(luò)爬蟲設(shè)計”而設(shè)計的一個案例,通過此案例的分析與設(shè)計,使學生加深對相關(guān)知識點的理解與應用。
1? 系統(tǒng)需求分析與設(shè)計
1.1? 系統(tǒng)需求分析
此系統(tǒng)的使用對象是企業(yè)員工。主要涉及的模塊有網(wǎng)絡(luò)請求模塊、多線程處理模塊、數(shù)據(jù)庫訪問模塊、配置模塊以及日志模塊。網(wǎng)絡(luò)請求模塊用于向指定的網(wǎng)站發(fā)送網(wǎng)絡(luò)請求,并對返回的數(shù)據(jù)進行解析,提取出需要的數(shù)據(jù),為提高效率應采用多線程處理,可同時發(fā)起多個請求。數(shù)據(jù)庫訪問模塊采用數(shù)據(jù)庫連接池的方式實現(xiàn),將解析出的數(shù)據(jù)入庫保存,以便后續(xù)進行統(tǒng)計分析,指導決策。配置模塊能夠?qū)B接的數(shù)據(jù)庫信息、需要請求的網(wǎng)站、日志的級別、線程的數(shù)量等進行配置,程序根據(jù)配置的信息進行抓包及保存處理。日志模塊主要用于記錄網(wǎng)絡(luò)交互過程、數(shù)據(jù)庫操作等關(guān)鍵環(huán)節(jié)的日志信息,以便出現(xiàn)問題時能及時查找并解決。
1.2? 開發(fā)環(huán)境及關(guān)鍵技術(shù)
該軟件是基于Widows 10系統(tǒng),采用C++語言來實現(xiàn)的一個抓包軟件。
數(shù)據(jù)存儲采用MySQL數(shù)據(jù)庫,MySQL數(shù)據(jù)庫是當前最流行的關(guān)系型數(shù)據(jù)庫之一。與其他數(shù)據(jù)庫將數(shù)據(jù)存放在一個大倉庫內(nèi)的存儲方式不同,MySQL數(shù)據(jù)庫將數(shù)據(jù)存儲在不同的表結(jié)構(gòu)中,以此加快訪問速度,提高數(shù)據(jù)訪問的靈活性。同時MySQL數(shù)據(jù)庫也是支持處理千萬級數(shù)據(jù)記錄的大型數(shù)據(jù)庫,而且是開源的軟件,不需要收取版權(quán)費用,因此本軟件采用MySQL數(shù)據(jù)庫來存儲和管理數(shù)據(jù)。
軟件的開發(fā)語言選取的是C++,開發(fā)工具采用Visual Studio,Visual Studio是目前流行的Windows平臺應用程序的集成開發(fā)環(huán)境,支持多種語言開發(fā),使用起來方便快捷,可以有效提高開發(fā)效率。
軟件關(guān)鍵技術(shù)在于多線程HTTP報文請求的異步處理及數(shù)據(jù)保存,因此采用線程池、數(shù)據(jù)庫連接池、IO完成端口相結(jié)合的技術(shù)手段實現(xiàn)。線程池是指程序根據(jù)配置文件的配置,在啟動時就創(chuàng)建相對應的任務(wù)線程數(shù),并保存到一個隊列結(jié)構(gòu)中,當有HTTP請求交互時,從線程中取出一個任務(wù)線程進行任務(wù)處理,完成后再放進隊列中,這樣可避免頻繁的線程創(chuàng)建及釋放,提高性能。數(shù)據(jù)庫連接池同樣也是程序根據(jù)配置在啟動時就創(chuàng)建相應的數(shù)據(jù)庫連接對象,并將這些連接對象保存到隊列中,當需要進行數(shù)據(jù)保存時,從隊列中取出一個連接對象進行數(shù)據(jù)庫操作,完成后再放回隊列中,避免頻繁的創(chuàng)建及釋放數(shù)據(jù)庫連接對象,消耗資源。IO完成端口是一種網(wǎng)絡(luò)編程模型,是Windows平臺下最高效的處理網(wǎng)絡(luò)異步請求的方式,本軟件使用IO完成端口來實現(xiàn)網(wǎng)絡(luò)請求模塊中異步通信功能。
1.3? 系統(tǒng)詳細設(shè)計
1.3.1? 系統(tǒng)功能結(jié)構(gòu)設(shè)計
軟件主要由5個功能模塊組成,功能結(jié)構(gòu)圖如圖1所示,以下將從實現(xiàn)類圖的角度對各個模塊進行闡述說明。
(1)網(wǎng)絡(luò)請求模塊。該模塊主要用于進行HTTP請求的發(fā)送、接收以及數(shù)據(jù)的解析,其主要實現(xiàn)類圖如圖2所示。
Cookie類是用于保存網(wǎng)絡(luò)會話過程中服務(wù)器端生成的用來確定用戶身份及會話連續(xù)性的信息的類,一個Cookie對象只保存一個鍵值對數(shù)據(jù)。CookieCollection類是依賴Cookie類,用來保存并解析多個Cookie信息,并且對保存的數(shù)據(jù)可以進行增加或更新等操作,可隨時計算出當前獲取的Cookie數(shù)目并進行相關(guān)判斷。CookieHelper類依賴了上述兩個類,負責從網(wǎng)絡(luò)通信數(shù)據(jù)中截取出Cookie信息,生成對應的Cookie對象,并將新生成的對象放入到CookieCollection對象中,便于同一會話過程中的后續(xù)請求報文使用,保證服務(wù)器端的身份驗證可以通過。
WebResponse類是用于進行網(wǎng)絡(luò)報文交互的基類,該類封裝了報文交互相關(guān)的標準操作,可進行報文的發(fā)送和接收,并可獲取到接收報文中的長度、報文頭、報文體等相關(guān)內(nèi)容。HttpWebResponse類繼承自基類WebResponse,主要進行超文本傳輸協(xié)議(Hypertext transfer protocol,HTTP)報文交互,是互聯(lián)網(wǎng)上一種主流的協(xié)議方式。該類提供一種無狀態(tài)的交互方式,可實現(xiàn)客戶端與服務(wù)器的數(shù)據(jù)、Office文檔、圖片、音頻、視頻等文件的交互功能。HttpWebResponseUtinity類則提供了HTTP協(xié)議定義的兩種請求方式:Post請求和Get請求。兩種請求在參數(shù)傳遞和報文數(shù)據(jù)上會有一定差異,不同服務(wù)器有不同要求。通過對抓取報文的分析,可用該類模擬發(fā)送不同請求方式的報文并對返回數(shù)據(jù)的提取和解析工作,提取出所需要的信息進行保存,不同網(wǎng)站具體實現(xiàn)不同。
(2)多線程處理模塊。該模塊用于提供并發(fā)執(zhí)行網(wǎng)絡(luò)請求任務(wù)的能力,其實現(xiàn)類圖如圖3所示。
CThread類是基礎(chǔ)的線程類,該類用于在主程序中創(chuàng)建工作子線程,并可對正在執(zhí)行的子線程執(zhí)行暫停、恢復以及關(guān)閉操作。CThreadTask類依賴CThread類,該類對基礎(chǔ)類進行了封裝,用來記錄或獲取子線程的工作狀態(tài)(如運行、休眠等),并且與具體的網(wǎng)絡(luò)請求任務(wù)相關(guān)聯(lián),當接收到任務(wù)請求時,就進行子線程的創(chuàng)建及相關(guān)初始化工作,并根據(jù)指令對線程的工作狀態(tài)進行修改。CThreadTaskProcess類用來管理CThreadTask類,該類中實現(xiàn)了對線程數(shù)目的動態(tài)管理,根據(jù)實際需要進行線程數(shù)目的增減,實現(xiàn)一個線程池的功能,有利于資源的利用。同時該類還實現(xiàn)了同步鎖,防止多個子線程在訪問同一資源時出現(xiàn)死鎖現(xiàn)象,提高了程序的穩(wěn)定性,避免程序在出現(xiàn)此類問題時出現(xiàn)異??ㄋ赖默F(xiàn)象。
(3)數(shù)據(jù)庫訪問模塊。該模塊用于連接數(shù)據(jù)庫并進行數(shù)據(jù)庫相關(guān)操作,支持訪問MySQL數(shù)據(jù)庫,其實現(xiàn)類圖如圖4所示。
CDataBase類是數(shù)據(jù)庫的操作類,封裝了相關(guān)的系統(tǒng)API函數(shù),直接與數(shù)據(jù)庫交互,負責相關(guān)初始化操作,并與具體的數(shù)據(jù)庫進行連接,執(zhí)行SQL語句,獲得執(zhí)行結(jié)果。CDBConncetPool類是數(shù)據(jù)庫連接池類,負責管理數(shù)據(jù)庫連接對象隊列,該類根據(jù)配置文件中的數(shù)據(jù)庫相關(guān)配置(如:數(shù)據(jù)庫地址、數(shù)據(jù)庫名、數(shù)據(jù)庫端口、數(shù)據(jù)庫用戶名及密碼等)在程序啟動時就創(chuàng)建好多個數(shù)據(jù)庫連接對象,在程序退出時才釋放這些連接資源。多線程情況下,每個線程只需要從該池中取出一個空閑的連接對象,當使用完時再把該連接對象放回隊列中,供其他線程使用。
(4)配置及日志模塊。配置模塊支持數(shù)據(jù)庫、訪問網(wǎng)站、日志級別、初始線程數(shù)等多種數(shù)據(jù)的文件配置,配置項格式為鍵值對的形式,鍵值改動后需要重啟程序才可生效。其實現(xiàn)類圖如圖5所示。
日志模塊用于記錄網(wǎng)絡(luò)交互及數(shù)據(jù)庫操的日志記錄,以便出現(xiàn)問題時進行問題的分析查找。日志類以天為記錄單位,跨天自動生成新文件,輸出的每行日志記錄時間精確到毫秒,同時會在每行頭部顯示該日志的級別,當配置為某一級別時,該級別及該級別以上日志會輸出,該級別以下的日志不會輸出。其實現(xiàn)類圖如圖6所示。
1.3.2? 系統(tǒng)數(shù)據(jù)庫設(shè)計
軟件主要功能是網(wǎng)絡(luò)信息的爬取及保存,不涉及其他業(yè)務(wù)需求,因此設(shè)計的數(shù)據(jù)庫表只有信息保存表,用于存儲抓取數(shù)據(jù)的相關(guān)信息,比如時間、信息類型、具體信息內(nèi)容等。
2? 結(jié)? 論
本文詳細描述了網(wǎng)絡(luò)抓包軟件的需求,開發(fā)環(huán)境及技術(shù)的選取、功能的詳細設(shè)計與數(shù)據(jù)庫表的設(shè)計,并已根據(jù)設(shè)計完成實現(xiàn)。若實際投入使用,企業(yè)可以通過此軟件實現(xiàn)網(wǎng)絡(luò)信息的自動收集及保存,可提高企業(yè)員工的工作效率,節(jié)約企業(yè)的人力成本。案例應用在了“網(wǎng)絡(luò)爬蟲設(shè)計”的課程中,通過講解網(wǎng)絡(luò)抓包軟件的分析和設(shè)計過程,加深學生對知識點的理解及應用,同時提高學生系統(tǒng)分析與設(shè)計的能力。
參考文獻:
[1] 吳潔明,方英蘭.軟件工程實例教程 [M].北京:清華大學出版社,2010.
[2] 王英英.MySQL 8從入門到精通 [M].北京:清華大學出版社,2019.
[3] 彭云鵑.應用設(shè)計模式的校園停車位收費系統(tǒng)的設(shè)計與實現(xiàn) [J].冶金管理,2019(23):79-81.
[4] 王佳珣.高校實驗室知識管理系統(tǒng)用戶需求分析與系統(tǒng)設(shè)計 [D].上海:華東理工大學,2013.
[5] 康昕宇,耿恒山,翟丹娜,等.基于Android的物流與財務(wù)管理系統(tǒng)的設(shè)計與實現(xiàn) [J].計算機應用與軟件,2016,33(8):315-318.
作者簡介:謝劍(1987.06—),男,漢族,湖南長沙人,就職于軟件學院,教師,初級職稱,碩士,研究方向:計算機應用、圖像處理。