大家都知道,在進(jìn)行滲透測(cè)試最重要的一個(gè)環(huán)節(jié)就是信息收集。說到信息收集怎么能不讓能聯(lián)想到谷歌以及谷歌語法呢?如果是人工的搜索并且提取相關(guān)信息無疑是一個(gè)工作量很大的一個(gè)事情。并且也是相當(dāng)浪費(fèi)時(shí)間的一個(gè)事情。那么我們?nèi)绾慰焖俚厝コ恍?span id="35rdr0b" class="wpcom_tag_link">重復(fù)性工作呢?通過代碼語言無疑是我們一個(gè)很好的選擇,接下來我將介紹使用Python3 + Selenium + pymysql + Google來完成這樣一個(gè)重復(fù)性任務(wù)。下面我們將以提取站點(diǎn)域名以及URL為例。
首先我先介紹一下Selenium庫以及pymysql是什么?Python3 以及Google我就不贅述了。簡(jiǎn)單地說明一下,selenium 是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。那么我們可以利用該庫去操作WEB瀏覽器。pymysql 是python3當(dāng)中操控數(shù)據(jù)庫的一個(gè)組件。
下面我們來分析,我們需要利用Selenium來自動(dòng)運(yùn)行WEB瀏覽器。我們需要在瀏覽器上做什么樣的操作呢?輸入谷歌url,在谷歌搜索欄輸入谷歌語法,然后提取我們需要的內(nèi)容。對(duì)不對(duì)?好的,那么我們腦子里面已經(jīng)有了一個(gè)初步的概念。接下來,我們需要做的是告訴Selenium我們的想法,并且它需要做的事情。接下來,我們來看下面的代碼:
#提取數(shù)據(jù)class driver_1(object): def __init__(self): self.driver = webdriver.Chrome(‘D:chromedriver_win32chromedriver.exe’) #訪問谷歌,搜索信息 def logload_Chrome(self,search): self.driver.get(‘https://www.google.com/’) #定位搜索欄位置 Search = self.driver.find_element_by_name(‘q’) self.driver.implicitly_wait(30) Search.send_keys(search) Search.send_keys(Keys.ENTER) #提取站點(diǎn)信息 def Search_site(self,site,num): dict_name_url = {} now_site = ‘site:’ + ”’ + site + ”’ self.logload_Chrome(now_site) #提取url和name for a in range(0,num): if a > 0 and a a[href]’) i = 0 while i a[href]’) i = 0 while i < len(Result_name): dict_name_url[str(Result_name[i].text)] = str(Result_url[i].get_attribute('href')) i += 1 return dict_name_url
上述代碼的作用是:登錄谷歌并且輸入搜索內(nèi)容,并且通過循環(huán)來提取Google搜索出來的內(nèi)容。
當(dāng)我們順利地提取出內(nèi)容的時(shí)候就可以將內(nèi)容放入數(shù)據(jù)庫。這個(gè)時(shí)候,我們需要利用到pymysql庫。通過它我們可以操控?cái)?shù)據(jù)庫。詳細(xì)情況請(qǐng)看下面代碼:
#保存數(shù)據(jù)信息class Save_to_DB(object): #鏈接出入數(shù)據(jù) def connect(self,i,key,value): conn = pymysql.connect( host = ‘localhost’, user = ‘root’, password = ‘Password@2020’, database = ‘suda’ ) #創(chuàng)建游標(biāo)對(duì)象 cursor = conn.cursor() try: cursor.execute(“insert into information_site_suda values(%s,’%s’,’%s’);” %(int(i),key,value)) conn.commit() conn.close() except: conn.ping() cursor = conn.cursor() cursor.execute(“insert into information_site values(%s,’%s’,’%s’);” % (int(i), key, value)) conn.commit() conn.close()
上述代碼的作用是將查詢出來的數(shù)據(jù)存放入數(shù)據(jù)庫當(dāng)中。
既然功能模塊已經(jīng)實(shí)現(xiàn),接下來就是調(diào)用了。詳細(xì)代碼可以查看附件(注意:中的一些部分需要修改才能運(yùn)行,不如,MYSQL數(shù)據(jù)庫名等等)。該文章或許一些人看不懂。沒有關(guān)系,文章當(dāng)中的模塊可以自己學(xué)習(xí)并不難。主要是希望各位了解到盡量不要去做重復(fù)性的勞動(dòng)。學(xué)會(huì)利用工具。我一直認(rèn)為代碼功底是區(qū)分腳本小子和大牛的分水線。請(qǐng)各位一起加油?。?!