赞
踩
上一篇我们讲述了目前较为主流的几款网络探测系统,简单介绍了页面的使用方法。
链接如下,点击跳转:网络空间测绘引擎集合: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来完成这一请求了。
代码如下(示例):
- import urllib3
- import base64
- import requests
- import csv
引入数据库说明:
base64 提供了 b64encode() 和 b64decode() 等方法,用于对数据进行 Base64 编码和解码。
urllib3 是 Python 的一个HTTP 客户端库,用于发送 HTTP 请求并处理响应。
requests 是 Python 的一个简洁、用户友好的 HTTP 库,用于发送 HTTP 请求并处理响应。
csv提供了 reader 和 writer 等类,用于读取和写入 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)
- return True
-
- INS = GetResult()
- INS.get_fofa_result()
利用requests.get(url=url,params=data)的结构来发送请求
结果展示:
上面讲述的是我们通过简单处理把数据拿到,后面我将把数据放到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文档中的功能,后续会持续补充,欢迎关注!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。