劉洋 崔翠 李立新



摘要:隨著Internet技術的不斷發展,互聯網已經成為人們獲取信息的主要途徑,搜索引擎從互聯網中靶向性篩選出有用信息,而網絡爬蟲又是搜索引擎的基礎構件之一。本文實現了一個基于python語言的并行網絡爬蟲,利用關鍵字匹配技術對目標網站進行掃描,得到敏感數據并抓取,分析網站數據結構和受惡意攻擊的風險系數。
關鍵詞:搜索引擎 網絡爬蟲 python 敏感數據
1引言
網絡爬蟲(Crawler)是搜索引擎(search engine SE)的基本構件之一,其直接面向互聯網底層,它是搜索引擎的數據發源地,決定著整個系統的內容是否豐富、信息能否得到及時更新。它的性能表現直接影響整個搜索引擎的效果。網絡爬蟲的工作原理如下:從一個初始種子URLs出發,從中獲取一個URL,下載網頁,從網頁中抽取所有的URLs,并將新的URLs添加到URLs隊列中。然后,Crawler從隊列中獲取另一個URL。重復剛才的過程,直到Crawler達到某種停止標準為止。
搜索引擎以一定的策略在互聯網中搜集、發現信息,對信息進行理解、提取、組織和處理,并為用戶提供檢索服務,從而起到信息導航的目的。我們經??吹讲煌木W站發布著同樣的新聞,很多就是通過網絡爬蟲的技術從其它的網站爬取信息,然后放在自己的網站發布。同樣,這樣的爬蟲技術也可以用來幫助我們做安全掃描分析等工作,這也是本文研究的重點。
2國內外研究現狀及相關核心技術
2.1現狀
90年代出現了最早的搜索引擎,也就產生了網絡爬蟲。此時的爬蟲在爬取整個網絡的時候采取深度或廣度優先的遍歷方式。作為搜索引擎的信息資源采集的重要角色,網絡爬蟲的性能將直接影響整個搜索引擎索引網頁的數量、質量和更新周期。于是出現后面的分布式網絡爬蟲。分布式網絡爬蟲可以看做是由多個集中式網絡爬蟲組合而成,分布式系統中的每個節點都可以看作一個集中式網絡爬蟲。分布式網絡爬蟲大大提高了爬取效率,目前分布式網絡爬蟲已近有了不少的應用,例如現在著名的Google和Alta Vista搜索引擎所采用的網絡爬蟲系統。
由于爬蟲的重要性,Twisted使用python語言寫了一個廣受歡迎的爬蟲事件驅動網絡框架:scrapy,scrapy使用的是非堵塞的異步處理方式。scrapy能夠爬取web頁面,并從頁面中提取結構化的數據。它可以用來數據挖掘、監測、和自動化測試。
scrapy流程圖見圖1。
2.2 Python
本系統用python腳本語言開發,python腳本語言與其它編程語言相比的優勢在于它的語法簡單、系統庫強大、實現功能容易、高效率的高層數據結構、簡單的面向對象編程、代碼結構清晰易懂。如今python語言被廣泛的應用于系統后臺處理和web編程。由于python腳本語言有著這么多的優勢,所以通過python腳本語言自己實現了一個爬蟲、敏感文件掃描和日志分析程序。爬蟲通過任務隊列、線程池實現多線程并發爬取網頁,在爬取了網頁之后對網頁進行解碼分析,獲取目錄結構,對已知的目錄結構進行敏感文件掃描。同時也通過腳本程序利用攻擊規則庫對用戶請求的web日志進行安全分析,提取出日志中的sql注入攻擊,xss跨站腳本攻擊,可以利用這些方法發現網站的安全漏洞。
2.3并行爬蟲技術
由于WEB網站群結構層次多,目錄深度廣,數據量很大,單進程的爬蟲很難滿足快速抓取大量數據的要求,因此本文爬蟲進行了并行架構的擴展,實現了基于MPI的并行數據抓取功能。本文并行爬蟲主要采用主從模式,主節點負責維護整個爬蟲的抓取隊列以及任務分配工作,從節點負責對自己的任務列表按照第l章中的抓取規則進行數據抓取。每個從節點都需要維護兩個隊列,一個是任務隊列,另一個是新用戶隊列。當從節點完成了其任務隊列后會將自己的新用戶隊列交給主節點,由主節點來處理合并用戶的工作,同時,主節點會將新的任務隊列發送到從節點,由從節點繼續抓取新數據。
3系統設計與試驗分析
3.1系統功能模塊
本系統主要分為三個模塊。整個系統功能模塊結構見圖2。
3.1.1程序主模塊和線程池模塊
程序主模塊的主要功能是web爬取。通過用戶提供的初始URL開始爬取。
線程池決定著整個程序的執行效率,創建太多的線程,有些線程又有可能未被充分的利用,程序將會浪費一定的資源。銷毀太多線程,將導致之后浪費時間再次創建它們。創建線程太慢,將會導致長時間的等待,性能變差。銷毀線程太慢,將導致其它線程資源饑餓。所以在程序的開發中,線程池相當的重要,應做到合理有效的利用。
線程池模塊主要是用來創建線程,加載爬蟲模塊中的爬取url任務到任務隊列,每個線程從任務隊列中獲取任務并執行任務。
3.1.2敏感文件掃描模塊
網站中的敏感文件是不應被普通用戶查看的,通常這些敏感文件一旦被暴露出來則有可能泄露服務器的一些敏感信息,比如用戶名、密碼、源代碼、服務器信息、配置信息等。還有一些敏感文件則可能是網站的后臺管理員管理地址,一些已經公開有漏洞的編輯器。這些都能被攻擊者所利用,進而對網站實施攻擊,獲得網站控制權。
3.2試驗分析
用戶通過爬蟲的入口向程序提供需要爬取的目標,爬取的深度和使用多少個線程爬取,如果沒有定義線程數,程序會初始化為9個線程爬取。程序將爬取得到的網頁類容進行解碼分析,提取出里面的URL,并將這些URL做一些處理后加入隊列進行下一步爬取。目標爬取完畢之后會將結果保存下來,然后再調用敏感文件掃描模塊對這些目錄下進行敏感文件掃描,對于存在的敏感文件會將結果保存下來。
3.2.1目標網頁爬取
在目標爬取的測試過程中,程序在獲得一個目標站點后開始進行爬取。首先將這個目標url加入urlQueue隊列中,在start函數中從urlQueue隊列中獲取第一個url,隨后調用線程中addJob函數將url和工作work函數同時加入線程池任務隊列中。此時線程從線程池任務隊列中獲取任務,也就是獲取到的url和work函數,隨后線程開始開始執行work函數,work函數中開始對url進行爬取,將url加入已爬取的任務隊列readUrls中。爬取方法是調用requests模塊中的get函數對目標進行網頁抓?。?/p>
html=requests.get(url),此方法返回一個html對象。
該對象中的content屬性為網頁內容:htmldata=html.content。
接下來是對返回的網頁內容進行解析分析,本程序采用的是python的第三方模塊Beautiful Soup對其解析。Beautiful Soup 是用python 寫的一個 HTML/XML 的解析器,它可以很好的處理不規范標記并生成剖析樹。通常用來分析爬蟲抓取到的web文檔。對于不規則的 Html文檔,也有很多的補全功能,節省了開發者的時間和精力。通過Beautiful Soup對htmldata解析:
接著遍歷allurl列表,如果列表中的鏈接沒有在readUrls中,就將其加入urlQueue隊列中。如此循環操作,直到最后達到爬取的深度停止任務,完成網頁爬取。
爬取結果如圖3。
3.2.2敏感文件掃描
實現方法是通過python中requests類中get函數對url進行請求,通過http請求返回的狀態碼來識別url是否存在。
圖4是定義好的部分敏感文件信息。
在利用獲取到的網站目錄結構進行敏感文件掃描,對黑名單中的文件進行一一掃描,能夠將存在的敏感文件掃描出來,識別http狀態碼結果為200,該功能已經很好的實現。掃描結果如圖5。
結 語
本文設計的并行網絡爬蟲通過將網頁表單進行分類和檢索提交,在這個爬蟲的基礎上實現一些安全分析的工作,最終可以發現并下載更多的網頁內容和檢測更多的網站數據漏洞。實驗結果表明,和普通的網絡爬蟲相比,并行爬蟲產生的索引文件更大,可以檢索到更多的結果。其主要有以下幾個特點:
1)使用方便。使用者只需提供相似關鍵字,就能利用一般爬蟲抓取網站中的相關數據。
2)支持關鍵字匹配。使用者只需自定義感興趣的關鍵字爬蟲就能自動匹配相關內容并將符合條件的網站內容和目錄保存到磁盤之上。
3)支持并行爬蟲。對于需要集群式的網站數據,同時又需要快速獲取數據的用戶而言使用其并行功能,可以達到令人滿意的效果。
然而,由于并行爬蟲需要提取網頁中的表單并進行分類、提交以及頁面緩存和狀態保持,這些都需要更多的時間和系統資源。因此,如何盡量減少額外的系統資源消耗以適合大規模爬行需要進行進一步的研究。另外,雖然并行爬蟲發現了更多的網頁,但是它并沒有發現所有的深度網頁,這是由于其所依據的決策樹無法正確地對某些表單進行分類。而決策樹的準確性取決于訓練實例的特點和決策樹生成算法,所以,選擇更合理的訓練樣本和更合適的決策樹生成算法應該是可行的。
參考文獻:
[1]WELCH M J,SCHONFELD U,HE D,et al.Topical semantics of twitter links【C】//Proceedings of the Fourth ACM International Conference 0n Web Search and Data Mining. New York: ACM Press.2011:327—336.
[2] Sismanis Y,Deligiannakis A.Dwarf K Y.Shrinking the petacube[A].Proc ACM SIGMOD[C],Madison.Wisomin.2002 464—475
[3] ChunWJ, 吉廣. Python 核心編程[M].人民郵電出版社, 2008.
[4]Boldi P,Codenotti B.Santini M.UbiCrawler:A Scalable Fully Distributed Web Crawler[J].Software:Practice&Experience。2004,34:711-726
[5]Lee Hsin-Tsang,Leonard D.IRLbot:Scaling to 6 BillionPages and Beyond[A]//Proceedings of the 17th International World Wide Web Conference[C].ACM Press,2008:427—436
[6] 李勇, 韓亮. 主題搜索引擎中網絡爬蟲的搜索策略研究[J].計算機工程與科學, 2008, 30(3): 4-6.
[7] 張紅云, 劉煒, 熊前興. 一種基于語義本體的網絡爬蟲模型[J].計算機應用與軟件,2009, 26(11): 101-104.
[8] 劉世濤. 簡析搜索引擎中網絡爬蟲的搜索策略[J]. 阜陽師范學院學報: 自然科學版, 2006,23(3):59-62.