首页 > 编程语言 >FOFA-Python-SDK使用说明

FOFA-Python-SDK使用说明

时间:2022-12-31 17:35:30浏览次数:64  
标签:search handle Python ip pyfofa Client FOFA SDK

FOFA SDK使用说明文档

FOFA API

FOFA API 是资产搜索引擎 FOFA 为开发者提供的 RESTful API接口, 允许开发者在自己的项目中集成 FOFA 的功能。


FOFA SDK

基于 FOFA API编写的 python 版 SDK, 方便 python 开发者快速将 FOFA集成到自己的项目中。
项目地址:https://github.com/Moxin1044/pyfofa
更好的Markdown兼容阅读:https://m0x1n.easyctf.cn/moxin/13876

调用方法

配置文件


配置文件位于根目录下的config.json

{
    "email":"***",
    "key":"***",
    "api_url":"https://fofa.info/api/v1",
    "proxy":""
}

proxy默认为空,如需代理,可对其进行填写。

Email 用户登陆 FOFA 使用的Email
Key 前往 个人中心 查看 API Key
api_url 没有事情请不要修改哦,这里是FOFA的API请求地址
proxy 用户定义的代理,格式为127.0.0.1:8080,如无需代理,请设置为空

检查Fofa配置


import pyfofa


handle = pyfofa.Client()
print(handle.check_fofa_config())

只需要按照上述方法配置,即可检查配置信息。会在控制台输出你当前的emailkeyproxy

当然,每次执行前都会自动执行一次get_userinfo(),会根据您在config.json中填写的email和key进行获取信息。

调用示例

读取用户信息

代码示例

import pyfofa


handle = pyfofa.Client()
print(handle.userinfo())

返回信息

{
  "error": false,
  "email": "****@qq.com",
  "username": "***",
  "fcoin": 48,
  "isvip": true,
  "vip_level": 2,
  "is_verified": false,
  "avatar": "https://i.nosec.org/avatar/system/****",
  "message": "",
  "fofacli_ver": "4.0.3",
  "fofa_server": true
}

查询接口

提供搜索主机、获取详细信息的方法,使开发更容易。

代码示例

import pyfofa


handle = pyfofa.Client()
print(handle.search('title="bing"'))

返回信息

{
  "error": false,
  "size": 8683,
  "page": 1,
  "mode": "extended",
  "query": "title\u003d\"bing\"",
  "results": [
    [
      "46.101.204.107",
      "hotel-bing.hotels-rimini-it.com",
      "80"
    ],
    [
      "104.21.32.129",
      "https://peapix.com",
      "443"
    ],
    [
      "193.8.37.83",
      "https://www.thorsmindecamping.dk",
      "443"
    ]
  ]
}

注意:这里因为返回结果过多,所以修改了一下

说明

handle.search(query_text)中,可以指定的传参如下:

handle.search(query_text, field, page, size, full)
参数名 是否可空 默认值 传参类型 解释
query_text string 需要进行查询的语句,即输入的查询内容
field ['ip', 'host', 'port'] list 可选字段,默认host,ip,port,详见附录1或文末附录
page 1 int 是否翻页,默认为第一页,按照更新时间排序
size 100 int 每页查询数量,默认为100条,最大支持10,000条/页
full False boolean 默认搜索一年内的数据,指定为true即可搜索全部数据

注意:这里的field参数需要使用list传参哦,query_text无需再base64编码。

演示1.查询域名“qq.com”

handle.search('domain="qq.com"')

演示2.查询域名“qq.com”的第二页

handle.search('domain="qq.com"',page=2)

演示3.查询10个域名有关“qq.com”的资产

handle.search('domain="qq.com"',size=10)

演示4.查询10个域名有关“qq.com”的资产,并且获取其IP、端口、标题和ICP备案号

field =  ['ip','port','title','icp']
handle.search('domain="qq.com"',field=field,size=10)

注意:handle为handle = fofa.Client(),在环境中请不要忘了加上他哦!


统计聚合

根据当前的查询内容,生成全球统计信息,当前可统计每个字段的前5排名。该接口限制请求并发为 5秒/次。

代码示例

import pyfofa


handle = pyfofa.Client()
print(handle.search_stats('ip="103.35.168.38"'))

返回信息

{
  "error": false,
  "distinct": {
    "ip": 1,
    "title": 1
  },
  "aggs": {
    "countries": [],
    "title": [
      {
        "count": 1,
        "name": "RouterOS router configuration page"
      }
    ]
  },
  "lastupdatetime": "2022-06-11 07:00:00"
}
字段名 描述
distinct 唯一计数 支持字段: ip, server, icp, domain,title,host,fid
aggs 聚合信息

说明

handle.search_stats(query_text)中,可以指定的传参如下:

handle.search(query_text, field)
参数名 是否可空 默认值 传参类型 解释
query_text string 需要进行查询的语句,即输入的查询内容
field ['ip', 'host', 'port'] list 可选字段,默认title,详见附录2或文末附录

Host聚合

根据当前的查询内容,生成聚合信息,host通常是ip,包含基础信息和IP标签。该接口限制请求并发为 1s/次。

代码示例

import pyfofa


handle = pyfofa.Client()
print(handle.search_host('78.48.50.249'))

返回信息

{
  "error": false,
  "host": "78.48.50.249",
  "ip": "78.48.50.249",
  "asn": 6805,
  "org": "Telefonica Germany",
  "country_name": "Germany",
  "country_code": "DE",
  "protocol": [
    "http",
    "sip",
    "https"
  ],
  "port": [
    8089,
    5060,
    7170,
    80,
    443
  ],
  "category": [
    "CMS"
  ],
  "product": [
    "Synology-WebStation"
  ],
  "update_time": "2022-12-29 05:00:00"
}

当detail=false时,默认为普通模式,返回结果如下:

字段名 描述
port 端口列表
protocol 协议列表
domain 域名列表
categor 分类标签
product 产品标签

当detail=true时,默认为详情模式,返回结果如下:

字段名 描述
products 产品详情列表
product 产品名
category 产品分类
leve l产品分层: 5 应用层, 4 支持层, 3 服务层,2 系统层, 1 硬件层, 0 无组件分层
soft_hard_code 产品是否为硬件;值为 1 是硬件,否则为非硬件

说明

handle.search_stats(query_text)中,可以指定的传参如下:

handle.search_host(host, detail=False)
参数名 是否可空 默认值 传参类型 解释
host string host名,通常是ip
detail false boolean 显示端口详情

获取用户名

代码示例

import pyfofa

handle = pyfofa.Client()
print(handle.username)

返回信息

Moxin

(具体会返回用户名)

获取F币数量

代码示例

import pyfofa

handle = pyfofa.Client()
print(handle.fcoin)

返回信息

48

(这里是整数型哦)

获取VIP状态

代码示例

import pyfofa

handle = pyfofa.Client()
print(handle.isvip)

返回信息

true

(这里是布尔型)

获取VIP等级

代码示例

import pyfofa

handle = pyfofa.Client()
print(handle.viplevel)

返回信息

2

(这里是整数型哦)

获取头像链接

代码示例

import pyfofa

handle = pyfofa.Client()
print(handle.avatar)

返回信息

https://i.nosec.org/avatar/system/users/avatars/100/083/883/medium/3774a8c7500fc0a110aa957a1a3040c2_1.jpg?1671089293

(这里是String哦)

声明:通过上述方法进行获取用户名获取F币数量获取VIP状态获取VIP等级获取头像链接均不需要再次请求,变量是在初始化Client中默认进行并存储的,所以不会再次产生资源消耗。

使用

依赖


需要安装的库

pip install requests

一般不需要安装的库

json、base64、urllib

环境


开发环境

Win11 + Python3.10 + PyCharm 2022.2.3 (Professional Edition)

使用环境

支持python2.7+Python 3.x环境

附录

查询接口(FOFA附录1)

序号 字段名 描述 权限
1 ip ip地址
2 port 端口
3 protocol 协议名
4 country 国家代码
5 country_name 国家名
6 region 区域
7 city 城市
8 longitude 地理位置 经度
9 latitude 地理位置 纬度
10 as_number asn编号
11 as_organization asn组织
12 host 主机名
13 domain 域名
14 os 操作系统
15 server 网站server
16 icp icp备案号
17 title 网站标题
18 jarm jarm 指纹
19 header 网站header
20 banner 协议 banner
21 cert 证书
22 body 网站正文内容 企业会员
23 fid fid 企业会员
24 structinfo 结构化信息 (部分协议支持、比如elastic、mongodb) 企业会员

聚合接口统计(FOFA附录2)

序号 字段名 描述 权限
1 protocol 协议
2 domain 域名
3 port 端口
4 title http 标题
5 os 操作系统
6 server http server信息
7 country 国家、城市统计
8 as_number asn编号
9 as_organization asn组织
10 asset_type 资产类型
11 fid fid 统计
12 icp icp备案信息

标签:search,handle,Python,ip,pyfofa,Client,FOFA,SDK
From: https://www.cnblogs.com/M0x1n/p/Fofa-python-sdk.html

相关文章

  • 极客编程python入门-操作文件和目录
    操作文件和目录Python内置的os模块也可以直接调用操作系统提供的接口函数。>>>importos>>>os.name#操作系统类型'posix'如果是​​posix​​,说明系统是​​Linux​​、......
  • python中元组的介绍
    ###使用元组#原则与列表类似,是一种容器数据类型#定义元组t=('骆昊',30,True,'武汉')print(t)#获取元组中的元素print(t[0])#遍历元组中的值formemberint:......
  • python字符串练习
    a,b=5,10print('{0}*{1}={2}'.format(a,b,a*b))#5*10=50aa,bb=5,20print(f'{aa}*{bb}={aa*bb}')#5*20=100#Python列表```list=[1,3,5,7,1......
  • Python类的多态和多态性
    一、多态多态指的是一类事物有多种形态,一个类有很多个子类,因而多态的概念是基于继承的序列数据类型有多种形态:字符串,列表,元组动物有多种形态:人,狗,猪1.动物的多种形态......
  • 使用Python计算个人所得税
    企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40......
  • 安装embedded纯净版的python 3.11以及安装pip
    为了纯净,我在Win10上选择安装了embedded的版本的python3.11,结果为了安装pip倒腾了一早上。现记录如下。 一、安装python3.11从python官网下的,今天的版本是3.11.1,链接......
  • 关于python列表的insert和append方法的执行效率对比
    关于python中insert可以在指定的索引前插入元素,也即是插入的元素的索引即为指定的索引而append方法,是指的在列表的末尾处添加/追加一个元素 两种方法都是为列表新增加......
  • 01Python的标准数据类型
    #Number数字'''intlong(python2.0)floatcomplex'''#String字符串s='abcde'print(s[1:5])#List列表sList=['a','1',1,'bd','这']sList2=['A','c']sLis......
  • python 生成可执行文件带有后缀exe的文件
    #在windows安装pip是python安装的必用工具1.下载pip地址:https://pypi.python.org/pypi/pip#downloads注意选择tar.gz压缩包,目前最新版本为9.0.1,这里选择的版本是:pi......
  • python入门 之购物车程序
    #1.启动程序后,让用户输入工资,然后打印商品列表#2.允许用户根据商品编号购买商品#3.用户选择商品后,检查余额是否足够,够就直接扣款,不够就提醒#4.可随时退出,退出时,打印已......