Fofa會員的爬蟲版工具【分享】
阿新 • • 發佈:2020-08-07
發現個不錯Fofa工具,轉載分享一波,僅供學習程式碼使用。
作者連結
https://github.com/sv3nbeast/X-Fofa
相關用法
Usage: python3 X-Fofa.py 'app="Solr"' Solr 94bbbb177c4a564feddb8c7d413d5d61
Usage: python3 X-Fofa.py Fofa搜尋語法 搜尋結果檔名 Fofa的Cookie的_fofapro_ars_session值
然後按照需求輸入 從哪頁開始 和 獲取多少頁數 即可
指令碼原始碼
#!/usr/bin/python3 import requests,time,random,os,re,sys,base64,urllib.parse from pyquery import PyQuery as pq banner = ''' __ __ ______ __ \ \ / / | ____| / _| \ V / ______ | |__ ___ | |_ __ _ > < |______| | __| / _ \ | _| / _` | / . \ | | | (_) | | | | (_| | /_/ \_\ |_| \___/ |_| \__,_| by 斯文 ''' def usera(): #user_agent 集合 user_agent_list = [ 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)', 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0', 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', ] #隨機選擇一個 user_agent = random.choice(user_agent_list) #傳遞給header headers = { 'User-Agent': user_agent } return headers def getPage(cookie,search): url='https://classic.fofa.so/result?page=1&qbase64={}'.format(search) cookies = {'_fofapro_ars_session':cookie} req = requests.get(url=url,headers=usera(),cookies=cookies) pageHtml = pq(req.text) page = (pageHtml('div.list_jg')).text() # page = page.find('') pattern = re.compile(u'獲得 (.*?) 條匹配結果') result = re.findall(pattern,page) result = result[0].replace(',','') if (int(result) % 10) >0: allPage = int(result) // 10 + 1 else: allPage = int(result) // 10 return allPage def start(search,file,cookie): search=search.encode(encoding="utf-8") search=base64.b64encode(search).decode() search=urllib.parse.quote(search) # if os.path.exists("result.txt"): #刪除存在的檔案 # os.remove("result.txt") # cookie = input("請輸入Fofa的Cookie的_fofapro_ars_session值:") allPage = getPage(cookie,search) print(banner) startPage = input("[+ 搜尋結果共有{}頁,請輸入從第幾頁開始收集地址(例:5):".format(allPage)) page = input("[+ 搜尋結果共有{}頁,請輸入準備收集頁數(例:20):".format(allPage)) endPage = int(startPage) + int(page) cookies={'_fofapro_ars_session':cookie}#這裡是你的fofa賬號登入後的cookie值 url='https://fofa.so/result?qbase64={}'.format(search) # doc=pq(url) print("[+ 正在向{}.txt檔案寫入結果".format(file)) with open('%s.txt'%file,'a+',encoding='utf-8') as f: for i in range(int(startPage),endPage): url='https://classic.fofa.so/result?page={}&qbase64={}'.format(i,search) req = requests.get(url=url,headers=usera(),cookies=cookies) if '登入' in req.text: print('[- Cookie已失效,請重新填寫https://classic.fofa.so的Cookie,不是https://fofa.so的Cookie') break print("[+ 正在讀取第{}頁 狀態碼:{}".format(i,req.status_code)) doc=pq(req.text) url=doc('div.results_content .list_mod_t').items() title=doc('div.list_mod_c ul').items() for u,t in zip(url,title): t.find('i').remove() relUrl = u.find('a').eq(0).attr.href relTitle = t.find('li').eq(0).text() if 'result?qbase64=' in relUrl: relDoc = pq(u) relIp = relDoc('.ip-no-url').text() relPort = (relDoc('.span')).find('a').eq(0).text() relUrl = 'http://{}:{}'.format(str(relIp),relPort) if relTitle == '': relTitle = '空' print("Url: %s Title: %s"%(relUrl, relTitle)) f.write("%s\n"%(relUrl)) f.flush() time.sleep(2) if __name__ == '__main__': if len(sys.argv)==1: print(banner) print('''Usage:請輸入引數\n例如:python X-Fofa.py 'app="Solr"' Solr 94bbbb177c4a564feddb8c7d413d5d61\n例如:python FofaCrawler.py 'app="Solr"'(Fofa搜尋語法) Solr(搜尋結果檔名) 94bbbb177c4a564feddb8c7d413d5d61(Fofa的Cookie的_fofapro_ars_session值)''') sys.exit(0) search=sys.argv[1] file=sys.argv[2] cookie = sys.argv[3] start(search,file,cookie)