当前位置:   article > 正文

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

fofa api

前言

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

链接如下,点击跳转:网络空间测绘引擎集合: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.引入库

代码如下(示例):

  1. import urllib3
  2. import base64
  3. import requests
  4. import csv

 引入数据库说明:

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

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

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

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

2.读取数据

代码如下(示例):

  1. import urllib3
  2. import base64
  3. import requests
  4. import csv
  5. class GetResult:
  6. def get_fofa_result(self):
  7. """开始发送 fofa 扫描请求"""
  8. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  9. data = {
  10. "key": "",
  11. "qbase64": base64.b64encode('ip="186.101.10.30" && port="80"'.encode("UTF-8")),
  12. "fields": 'ip,port,host,title,product,product_category',
  13. }
  14. req = requests.get(url='https://fofa.info/api/v1/search/all', verify=True, params=data, timeout=10)
  15. if req.status_code != 200:
  16. print('fofa 请求失败,请检查配置')
  17. return False
  18. data = req.json()
  19. if data.get("error", True) is not False:
  20. print('fofa 请求失败,请检查配置')
  21. return False
  22. print(data)
  23. return True
  24. INS = GetResult()
  25. INS.get_fofa_result()

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

结果展示:

3.写入csv文件中

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

  1. import urllib3
  2. import base64
  3. import requests
  4. import csv
  5. class GetResult:
  6. def get_fofa_result(self):
  7. """开始发送 fofa 扫描请求"""
  8. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  9. data = {
  10. "key": "",
  11. "qbase64": base64.b64encode('ip="186.101.10.30" && port="80"'.encode("UTF-8")),
  12. "fields": 'ip,port,host,title,product,product_category',
  13. }
  14. req = requests.get(url='https://fofa.info/api/v1/search/all', verify=True, params=data, timeout=10)
  15. if req.status_code != 200:
  16. print('fofa 请求失败,请检查配置')
  17. return False
  18. data = req.json()
  19. if data.get("error", True) is not False:
  20. print('fofa 请求失败,请检查配置')
  21. return False
  22. print(data)
  23. # 将结果存储到 CSV 文件
  24. with open("fofa_results.csv", "w", newline="", encoding="utf-8") as csvfile:
  25. fieldnames = ["ip", "port", "host", "title", "product", "product_category"]
  26. writer = csv.writer(csvfile)
  27. writer.writerow(fieldnames) # 写入标题行
  28. # 循环写入结果
  29. for result in data['results']:
  30. writer.writerow(result)
  31. print("FOFA 搜索结果已保存到 fofa_results.csv 文件中。")
  32. return True
  33. INS = GetResult()
  34. INS.get_fofa_result()
'
运行

结果展示:


总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/830212
推荐阅读
相关标签
  

闽ICP备14008679号