FOFA鏈接爬蟲爬取fofa spider


之前一直是用的github上別人爬取fofa的腳本,前兩天用的時候只能爬取第一頁的鏈接了,猜測是fofa修改了一部分規則(或者是我不小心刪除了一部分文件導致不能正常運行了)

於是重新寫了一下爬取fofa的代碼,寫的不好:(

因為fofa的登錄界面是https://i.nosec.org/login?service=https%3A%2F%2Ffofa.so%2Fusers%2Fservice

 

 FOFA的登錄跟一般網站登錄不同,在nosec登錄成功后,只擁有nosec的cookie,並沒有fofa的cookie,所以訪問fofa還是未登錄狀態,需要再訪問https://fofa.so/users/sign_in才會生成fofa的cookie。

然后我就換了一種方式,手動添加_fofapro_ars_session來進行登錄,fofapro_ars_session在我們登錄fofa之后使用F12可以查看,這一步比較麻煩

添加了對應的session之后,我們對輸入內容進行base64編碼,因為當我們在fofa網站進行搜索的時候,網站也是將我們輸入的內容進行base64編碼然后進行搜索的

接着解析頁面獲取相應鏈接,持續找到下一頁即可。

需要注意的是,因為fofa也有防止快速爬取的機制,所以我們在爬取的時候要設置一點延時,防止抓取到的IP地址有漏掉的。

在檢索到了搜索的內容之后,首先顯示該搜索對象有多少頁,爬取的頁數也是由輸入者自己決定。

代碼如下:(有一個漂亮的字符畫大LOGO)

# -*- coding:utf-8 -*-
import requests
from lxml import etree
import base64
import re
import time

cookie = ''


def logo():
    print('''
                
            
             /$$$$$$$$ /$$$$$$  /$$$$$$$$ /$$$$$$                                   
            | $$_____//$$__  $$| $$_____//$$__  $$                                  
            | $$     | $$  \ $$| $$     | $$  \ $$                                  
            | $$$$$  | $$  | $$| $$$$$  | $$$$$$$$                                  
            | $$__/  | $$  | $$| $$__/  | $$__  $$                                  
            | $$     | $$  | $$| $$     | $$  | $$                                  
            | $$     |  $$$$$$/| $$     | $$  | $$                                  
            |__/      \______/ |__/     |__/  |__/                                  
                                                                                    
                                                                                    
                                                                                    
                                /$$$$$$            /$$       /$$                    
                               /$$__  $$          |__/      | $$                    
                              | $$  \__/  /$$$$$$  /$$  /$$$$$$$  /$$$$$$   /$$$$$$ 
                              |  $$$$$$  /$$__  $$| $$ /$$__  $$ /$$__  $$ /$$__  $$
                               \____  $$| $$  \ $$| $$| $$  | $$| $$$$$$$$| $$  \__/
                               /$$  \ $$| $$  | $$| $$| $$  | $$| $$_____/| $$      
                              |  $$$$$$/| $$$$$$$/| $$|  $$$$$$$|  $$$$$$$| $$      
                               \______/ | $$____/ |__/ \_______/ \_______/|__/      
                                        | $$                                        
                                        | $$                                        
                                        |__/                                        
                                
                                                                                version:1.0
    ''')


def spider():
    header = {
        "Connection": "keep-alive",
        "Cookie": "_fofapro_ars_session=" + cookie,
    }
    search = input('please input your key: \n')
    searchbs64 = (str(base64.b64encode(search.encode('utf-8')), 'utf-8'))
    print("spider website is :https://fofa.so/result?&qbase64=" + searchbs64)
    html = requests.get(url="https://fofa.so/result?&qbase64=" + searchbs64, headers=header).text
    pagenum = re.findall('>(\d*)</a> <a class="next_page" rel="next"', html)
    print("have page: "+pagenum[0])
    stop_page=input("please input stop page: \n")
    #print(stop_page)
    doc = open("hello_world.txt", "a+")
    for i in range(1,int(pagenum[0])):
        print("Now write " + str(i) + " page")
        pageurl = requests.get('https://fofa.so/result?page=' + str(i) + '&qbase64=' + searchbs64, headers=header)
        tree = etree.HTML(pageurl.text)
        urllist=tree.xpath('//div[@class="list_mod_t"]//a[@target="_blank"]/@href')
        for j in urllist:
            #print(j)
            doc.write(j+"\n")
        if i==int(stop_page):
            break
        time.sleep(10)
    doc.close()
    print("OK,Spider is End .")

def start():
    print("Hello!My name is Spring bird.First you should make sure _fofapro_ars_session!!!")
    print("And time sleep is 10s")

def main():
    logo()
    start()
    spider()

if __name__ == '__main__':
    main()

  Github鏈接:https://github.com/Cl0udG0d/Fofa-script

我設置的time.sleep()延時是10秒,可以根據自己的需求進行修改,以及,雖然在代碼里面進行了base64解碼,但是有的時候總會出現編碼問題而導致搜索不到想要的結果,pagenum[0]等於0的情況,如果修改關鍵字還是不行的話,可以自己在fofa網站里面查了之后,在url中將base64之后的搜索關鍵字替換成代碼里面的searchbs64,這樣就必然能夠搜索到了,這些不足的地方在下次修改的時候進行改進吧,奧利給。


免責聲明!

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



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