fofa自動化爬蟲腳本更新+詳解


起因

最近要用到fofa爬蟲,為什么要用爬蟲不用api,問就是窮,想起來之前寫過一個相關的腳本:Fofa-python-腳本,是很久以前寫的了,之前寫的時候有點問題,昨天重新修改了一下,記錄一下整個過程

關於fofa

在其他大佬博客上摘抄的FOFA簡介及使用教程

FOFA 是白帽匯推出的一款網絡空間搜索引擎,它通過進行網絡空間測繪,能夠幫助研究人員或者企業迅速進行網絡資產匹配,例如進行漏洞影響范圍分析、應用分布統計、應用流行度等。
FOFA 搜索引擎檢索到的內容主要是服務器,數據庫,某個網站管理后台,路由器,交換機,公共ip的打印機,網絡攝像頭,門禁系統,Web服務 ……
FOFA 這類搜索引擎又有另一個名字:網絡空間測繪系統。—— 它們就像是現實生活中的衛星地圖那樣,一點點勾勒出公共網絡空間的樣子,每一個網站、每一台公共環境下的服務器……當一個高危漏洞爆發,FOFA系統便能向衛星定位地址一樣,通過特征迅速找到全網的脆弱設備。
網站:https://fofa.so/ FOFA不僅提供了在線搜索還提供了FOFA Pro客戶端版本

簡單來說就是跟國外的shodan,國內的ZoomEye一樣是網絡空間測繪工具

流程

登陸 -> 輸入關鍵字 -> 爬取 -> 保存

登陸

登陸流程比較復雜,為了簡單暴力直接使用cookie,每次使用時需要在 config.py 文件中修改 cookie

此外config.py里面還存儲了一些全局的配置信息

輸入關鍵字

在頁面輸入我們需要查找的關鍵字,例如 aaa

跳轉網頁為:https://fofa.so/result?q=aaa&qbase64=YWFh&file=&file=

可以看出來qbase64是關鍵字base64的編碼,經過測試只需要這兩個關鍵字即可進行搜索

https://fofa.so/result?page=&qbase64=

page為頁碼,qbase64為關鍵字的base64編碼

關鍵字轉base64編碼關鍵代碼如下

searchbs64 = quote(str(base64.b64encode(config.SearchKEY.encode()), encoding='utf-8'))

使用quote對URL進行編碼,防止出現錯誤

爬取

使用正則表達式顯示該關鍵字在fofa中一共有多少頁

pagenum = re.findall('>(\d*)</a> <a class="next_page" rel="next"', html)
print("該關鍵字存在頁碼: "+pagenum[0])

先讓用戶確定爬取的開始和結束頁碼

config.StartPage=input("請輸入開始頁碼:\n")
config.StopPage=input("請輸入終止頁碼: \n")

使用xpath提取頁面url

urllist=tree.xpath('//div[@class="re-domain"]//text()')
urllist = [value.strip('\n').strip(' ').strip('\n') for value in urllist if len(value.strip('\n').strip(' ').strip('\n')) != 0]
print(urllist)

保存

保存在 hello_world.txt文件中

doc = open("hello_world.txt", "a+")
for i in range(int(config.StartPage),int(pagenum[0])):
    print("Now write " + str(i) + " page")
    pageurl = requests.get('https://fofa.so/result?page=' + str(i) + '&qbase64=' + searchbs64, headers=config.header)
    tree = etree.HTML(pageurl.text)
    urllist=tree.xpath('//div[@class="re-domain"]//text()')
    urllist = [value.strip('\n').strip(' ').strip('\n') for value in urllist if len(value.strip('\n').strip(' ').strip('\n')) != 0]
    print(urllist)
    for j in urllist:

        print(j)
        doc.write(j+"\n")
    if i==int(config.StopPage):
        break
    time.sleep(config.TimeSleep)
doc.close()

完成

END

全部代碼放在 github上:https://github.com/Cl0udG0d/Fofa-script


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM