Python调用fofa API接口并写入csv文件中

本文详细介绍了如何使用Python调用fofa的API接口,查询指定IP和端口的信息,获取返回数据,并将关键字段写入CSV文件的过程。
摘要由CSDN通过智能技术生成

前言

上一篇我们讲述了目前较为主流的几款网络探测系统,简单介绍了页面的使用方法。

链接如下,点击跳转:网络空间测绘引擎集合:Zoomeye、fofa、360、shodan、censys、鹰图

然而当我们需要针对单个引擎进行二次开发时,页面就不能满足我们的需求了,这就需要参考API文档进行简单的数据处理,接下来,给大家介绍一下Python调用fofa的api接口并写入csv文件中的方法。


一.功能目的

1.使用python调fofa的api接口,实现查询单个靶机(ip+port)的信息,并拿取返回数据。

2.将拿取的数据中的重要字段写到csv文档中。

二.功能调研

我们需要参考官方api文档:点击此处跳转至fofa官方api文档

根据浏览官方文档,我们可以提取到以下信息:

1.示例里面的总体请求是

https://fofa.info/api/v1/search/all?&key=your_key&qbase64=dGl0bGU9ImJpbmci

2.我们要用的url是

https://fofa.info/api/v1/search/all

3.qbase64是经过base64编码后的查询内容

原始查询条件:ip="186.101.10.30" && port="80"
加密后的查询条件:aXA9IjE4Ni4xMDEuMTAuMzAiICYmIHBvcnQ9IjgwIg==

4.key值要拿取到

注册登录后,点击主页的头像-点击个人中心,就可以复制key值

5.可以根据fields=ip,host,port来筛选返回的结果

了解到这些,我们便可以开始用python来完成这一请求了。

三.编写代码

1.引入库

代码如下(示例):

import urllib3
import base64
import requests
import csv

 引入数据库说明:

        base64 提供了 b64encode() 和 b64decode() 等方法,用于对数据进行 Base64 编码和解码。

        urllib3 是 Python 的一个HTTP 客户端库,用于发送 HTTP 请求并处理响应。

        requests 是 Python 的一个简洁、用户友好的 HTTP 库,用于发送 HTTP 请求并处理响应。

        csv提供了 reader 和 writer 等类,用于读取和写入 CSV 文件

2.读取数据

代码如下(示例):

import urllib3
import base64
import requests
import csv

class GetResult:
    def get_fofa_result(self):
        """开始发送 fofa 扫描请求"""

        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        data = {
            "key": "",
            "qbase64": base64.b64encode('ip="186.101.10.30" && port="80"'.encode("UTF-8")),
            "fields": 'ip,port,host,title,product,product_category',
        }
        req = requests.get(url='https://fofa.info/api/v1/search/all', verify=True, params=data, timeout=10)
        if req.status_code != 200:
            print('fofa 请求失败,请检查配置')
            return False

        data = req.json()
        if data.get("error", True) is not False:
            print('fofa 请求失败,请检查配置')
            return False

        print(data)
        return True

INS = GetResult()
INS.get_fofa_result()

利用requests.get(url=url,params=data)的结构来发送请求

结果展示:

3.写入csv文件中

上面讲述的是我们通过简单处理把数据拿到,后面我将把数据放到csv里面进行统计

import urllib3
import base64
import requests
import csv

class GetResult:
    def get_fofa_result(self):
        """开始发送 fofa 扫描请求"""

        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        data = {
            "key": "",
            "qbase64": base64.b64encode('ip="186.101.10.30" && port="80"'.encode("UTF-8")),
            "fields": 'ip,port,host,title,product,product_category',
        }
        req = requests.get(url='https://fofa.info/api/v1/search/all', verify=True, params=data, timeout=10)
        if req.status_code != 200:
            print('fofa 请求失败,请检查配置')
            return False

        data = req.json()
        if data.get("error", True) is not False:
            print('fofa 请求失败,请检查配置')
            return False

        print(data)
        # 将结果存储到 CSV 文件
        with open("fofa_results.csv", "w", newline="", encoding="utf-8") as csvfile:
            fieldnames = ["ip", "port", "host", "title", "product", "product_category"]
            writer = csv.writer(csvfile)
            writer.writerow(fieldnames)  # 写入标题行

        # 循环写入结果
            for result in data['results']:
                writer.writerow(result)
            print("FOFA 搜索结果已保存到 fofa_results.csv 文件中。")
        return True

INS = GetResult()
INS.get_fofa_result()

结果展示:


总结

本文主要讲了使用python调fofa的api接口,实现查询单个靶机(ip+port)的信息,拿取返回数据,并将数据中的重要字段写到csv文档中的功能,后续会持续补充,欢迎关注!

  • 33
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值