fofa自动化爬虫脚本更新+详解
fofa自動化爬蟲腳本更新+詳解
起因
最近要用到fofa爬蟲,為什么要用爬蟲不用api,問就是窮,想起來之前寫過一個相關的腳本:Fofa-python-腳本,是很久以前寫的了,之前寫的時候有點問題,昨天重新修改了一下,記錄一下整個過程
關于fofa
在其他大佬博客上摘抄的FOFA簡介及使用教程
FOFA 是白帽匯推出的一款網絡空間搜索引擎,它通過進行網絡空間測繪,能夠幫助研究人員或者企業迅速進行網絡資產匹配,例如進行漏洞影響范圍分析、應用分布統計、應用流行度等。
FOFA 搜索引擎檢索到的內容主要是服務器,數據庫,某個網站管理后臺,路由器,交換機,公共ip的打印機,網絡攝像頭,門禁系統,Web服務 ……
FOFA 這類搜索引擎又有另一個名字:網絡空間測繪系統。—— 它們就像是現實生活中的衛星地圖那樣,一點點勾勒出公共網絡空間的樣子,每一個網站、每一臺公共環境下的服務器……當一個高危漏洞爆發,FOFA系統便能向衛星定位地址一樣,通過特征迅速找到全網的脆弱設備。
網站:https://fofa.so/ FOFA不僅提供了在線搜索還提供了FOFA Pro客戶端版本
簡單來說就是跟國外的shodan,國內的ZoomEye一樣是網絡空間測繪工具
流程
登陸 -> 輸入關鍵字 -> 爬取 -> 保存
登陸
登陸流程比較復雜,為了簡單暴力直接使用Authorization,每次使用時需要在 config.py 文件中修改 Authorization值
此外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)先讓用戶確定爬取的開始和結束頁碼
config.StartPage=input("請輸入開始頁碼:\n")config.StopPage=input("請輸入終止頁碼: \n")使用xpath提取頁面url
# urllist=tree.xpath('//span[@class="aSpan"]//@href')# urllist = [value.strip('\n').strip(' ').strip('\n') for value in urllist if len(value.strip('\n').strip(' ').strip('\n')) != 0]pattern = re.compile('"link":"(.*?)",')urllist = re.findall(pattern, rep.text)print(urllist)保存
保存在 hello_world.txt文件中
doc = open("hello_world.txt", "a+")for i in range(int(config.StartPage),int(pagenum)):print("Now write " + str(i) + " page")rep = requests.get('https://api.fofa.so/v1/search?qbase64=' + searchbs64+"&full=false&pn="+str(i)+"&ps=10", headers=config.headers)# tree = etree.HTML(pageurl.text)# urllist=tree.xpath('//span[@class="aSpan"]//@href')# urllist = [value.strip('\n').strip(' ').strip('\n') for value in urllist if len(value.strip('\n').strip(' ').strip('\n')) != 0]pattern = re.compile('"link":"(.*?)",')urllist = re.findall(pattern, rep.text)print(urllist)for j in urllist:print(j)doc.write(j+"\n")if i==int(config.StopPage):breaktime.sleep(config.TimeSleep)doc.close()完成
END
全部代碼放在 github上:https://github.com/Cl0udG0d/Fofa-script
EOF
總結
以上是生活随笔為你收集整理的fofa自动化爬虫脚本更新+详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 文件读写
- 下一篇: JS文件信息收集工具-LinkFinde