一种方便、优美的使用Python调用fofa API的方法

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。 

学习网络安全的过程中,绕不开fofa搜索,我的需求是使用fofa获取互联网所有某OA特定版本的网站,但是搜索了许多人的博客,解决方案都很杂乱,一会base64编码出错,一会接口定义不一致,fofa返回的信息不知道如何处理,加上调试这个事用了我两个小时的时间,于是自己写了一个API类可以很方便调用fofa API。

这个类也参考了一个开源项目,pyfofa,但是这个项目已经无人维护了,连fofa的API地址都没改,所以我自己把核心代码提取出来,成了这个。

类定义如下:

import base64

import requests


class FofaAPI(object):

    def __init__(self, email, key):
        self.email = email
        self.key = key
        self.base_url = 'https://fofa.info'
        self.search_api_url = '/api/v1/search/all'
        self.login_api_url = '/api/v1/info/my'
        self.get_userinfo()

    def get_userinfo(self):
        try:
            url = '{url}{api}'.format(url=self.base_url, api=self.login_api_url)
            data = {"email": self.email, 'key': self.key}
            req = requests.get(url, params=data)
            return req.json()
        except requests.exceptions.ConnectionError:
            error_msg = {"error": True, "errmsg": "Connect error"}
            return error_msg

    def get_data(self, query_str='', size=1000, page=1, fields='protocol,host,ip,port,title'):
        try:
            url = '{url}{api}'.format(url=self.base_url, api=self.search_api_url)
            query_str = bytes(query_str, 'utf-8')
            data = {'qbase64': base64.b64encode(query_str), 'email': self.email, 'key': self.key, 'page': page,
                    'size': size,
                    'fields': fields}
            req = requests.get(url, params=data, timeout=10)
            return req.json()
        except requests.exceptions.ConnectionError:
            error_msg = {"error": True, "errmsg": "Connect error"}
            return error_msg

使用示例:

fofa = FofaAPI(email, api_key) # 这里的email和apikey都要自己在fofa网站中找到。
query = u"title=\"OA\"" # 这里只是一个示例,要自己改成需要查询的语句,u代表utf-8编码
response = fofa.get_data(query_str=query)

response就是fofa返回的值,其中results字段就是所有网站的信息。例子如下:

如果需要自定义返回的结果,可以直接使用fields这个参数,fields就是results中的内容,其中的顺序按照fields里面的字段排列,其他可以定义的参数见FofaAPI类源代码(也可以自己根据这个类自定义功能)。比如:

r = fofa.get_data(query_str=query, fields="ip,host,port,title")

在使用之前,建议调用这句话,看看用户信息对不对。

u=fofa.get_userinfo()

 例子如下

  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值