zoukankan      html  css  js  c++  java
  • 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: 
    ')
        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: 
    ")
        #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+"
    ")
            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,这样就必然能够搜索到了,这些不足的地方在下次修改的时候进行改进吧,奥利给。

  • 相关阅读:
    (转)C#中String跟string的“区别”
    C#中的this关键字
    (转)VS2015基础 指定一个或多个项目执行
    C# 中如何输出双引号(转义字符的使用)
    (转) C#中使用throw和throw ex抛出异常的区别
    springboot
    Zookeeper
    Maven
    springboot
    springboot
  • 原文地址:https://www.cnblogs.com/Cl0ud/p/12384457.html
Copyright © 2011-2022 走看看