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

news2024/11/28 5:06:49

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

学习网络安全的过程中,绕不开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()

 例子如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker的理解

docker最底层就是bootfs(boot file system)主要包含 bpotloader 和 kernel,bootloader主要是引导加载 kernel,Linux 刚启动时会加载 bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含…

儿童台灯怎么选对眼睛好?专业儿童护眼台灯分享

随着时代的改革和发展,现在的孩子学业压力要远比我们想象中的繁重很多,而且随着年龄的增长,用眼到需求也会越来越大。再加上过早的接触电子产品,导致现在的孩子近视率都非常高! 因此作为家长一定要重视孩子的视力健康&…

C语言进阶指南(11)(指针数组与二维数组)

*欢迎来到博主的专栏——C语言进阶指南 博主id:reverie_ly 文章目录 N级指针指针数组指针数组与二维数组数组指针作为函数的参数 N级指针 指针变量是一个存放地址的变量,在C语言中,每个变量都会有一个地址值。所以指针变量也有一个地址。 …

《git小白笔记·一》记住这些Git使用就够了

到底选gitlab还是选github?: 只要掌握这些git命令完全够用: (1)首先我们先下载一个git,下载完成后属于右键会看到git GUI here和git Bash here,我们常用git Bash here,打开Git我们看…

TDA4VM LInux SDK编译

文章目录 前言编译步骤前言 上篇TDA4VM EVM开发板调试笔记我们尝试把EVM开发板跑起来了,本篇主要记录,Linux SDK 的编译过程。 编译步骤 安装依赖: $ sudo apt-get update $ # Install packages required for builds $ sudo apt-get -f -y install \

使用React+SpringBoot开发一个协同编辑的表格文档

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 随着云计算和团队协作的兴起,协同编辑成为了许多企业和组织中必不可少的需求。通过协同编辑&#x…

Spring Boot + MyBatis-Plus实现数据库读写分离

文章目录 1. 引言2. MyBatis-Plus简介3. 准备工作4. 配置数据源5. 配置MyBatis-Plus6. 创建实体类和Mapper接口7. 编写Service8. 控制器层9. 测试10. 数据库读写分离的原理11. 拓展11.1. 动态数据源11.2. 多数据源事务管理11.3. 多租户支持 12. 总结 🎉Spring Boot …

ubuntu安装远程桌面

ubuntu安装远程桌面 xrdp远程桌面访问 #用windows远程桌面连接成功,只能用root用户,用普通用户连接是灰色 sudo apt install xrdp systemctl status xrdpsystemctl stop xrdp解决普通用户连接是灰色 参考链接: https://blog.csdn.net/leegh1992/article/details/51160864 s…

图像异常检测研究现状综述

论文标题:图像异常检测研究现状综述 作者:吕承侃 1, 2 沈 飞 1, 2, 3 张正涛 1, 2, 3 张 峰 1, 2, 3 发表日期:2022年6月 阅读日期 :2023年11月28 研究背景: 图像异常检测是计算机视觉领域的一个热门研究课题, 其目…

C语言进阶指南(13)(字符串与指针)

欢迎来到博主的专栏——C语言进阶指南 博主id:reverie_ly 文章目录 字符串字符串与字符数组字符串与指针常量字符串字符串的输入与输出字符串的输出字符串的输入 实现存放字符串的数组 字符串 字符串是由一连串字符组成的字符数据,C语言中并没有给字符…

Kafka 保证消息消费全局顺序性

当有消息被生产出来的时候,如果没有指定分区或者指定 key ,那么消费会按照【轮询】的方式均匀地分配到所有可用分区中,但不一定按照分区顺序来分配 我们知道,在 Kafka 中消费者可以订阅一个或多个主题,并被分配一个或多…

【预测爆款不用愁,有服饰RFID小助手】

时尚服饰行业库存成本高,数据不精准,爆款服饰一直抓不住,增加库存滞销风险难脱逃,给服饰零售企业带来极大困扰。 帮您提前预测爆款服饰小塔服饰RFID系统 小塔RFID系统作为服饰新零售小助手,通过RFID系统与硬件结合&a…

Vue3 Teleport

假设情景 以下面截图为例,A组件中可以操控数字的加减,想把这个功能放到B组件中使用,AB两个组件非父子组件,甚至可能被嵌套了其他组件,一般办法可能是将A组件数据传给AB组件的父组件,然后在相办法给B&#…

贝叶斯Sklearn实践

贝叶斯统计学是一种基于贝叶斯定理的概率推理方法,它提供了一种对概率进行建模和更新的框架。贝叶斯方法在机器学习中得到了广泛的应用,特别是在分类问题中,如垃圾邮件过滤、文本分类等。与传统的频率主义方法相比,贝叶斯方法具有…

【PyQt】QPixmap与numpy.array互转

这里给出QPixmap→numpy.ndarray的两条转换(一个是使用PIL.Image而另一个不用), 以及numpy.ndarray→QPixmap两条转换(同样也是用不用PIL.Image的区别)。 代码运行结果: from PyQt5.QtCore import QPoint,QRect,Qt from PyQt5.QtWidgets import QLabel …

如何拥有免费的docker镜像仓库

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 hello,伙伴们,最近在研究devops的事情,发现了很有意思的东西。 就是我们所有…

springboot整合redis+自定义注解+反射+aop实现分布式锁

1.定义注解 import java.lang.annotation.*; import java.util.concurrent.TimeUnit;/** Author: best_liu* Description:* Date: 16:13 2023/9/4* Param * return **/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface RedisLo…

怎么把dwg格式转换pdf?

怎么把dwg格式转换pdf?DWG是一种由AutoCAD开发的二维和三维计算机辅助设计(CAD)文件格式,它的名称是“绘图(Drawing)”的缩写。DWG文件通常包含了设计图纸、模型和元数据等信息,并且被广泛用于工…

工艺系统所管理数字化实践

摘要 本文介绍了上海核工程设计研究院在数字化转型方面的实践,包括业务数字化和管理数字化两个方面。业务数字化方面,该院通过开发小工具改进工作流程。管理数字化方面,该院采用零代码平台集中管理管道力学信息相关模型和数据,并…