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()) |
只需要按照上述方法配置,即可检查配置信息。会在控制台输出你当前的email
、key
和proxy
。
当然,每次执行前都会自动执行一次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) |
返回信息
(具体会返回用户名)
获取F币数量
代码示例
| import pyfofa |
| |
| handle = pyfofa.Client() |
| print(handle.fcoin) |
返回信息
(这里是整数型哦)
获取VIP状态
代码示例
| import pyfofa |
| |
| handle = pyfofa.Client() |
| print(handle.isvip) |
返回信息
(这里是布尔型)
获取VIP等级
代码示例
| import pyfofa |
| |
| handle = pyfofa.Client() |
| print(handle.viplevel) |
返回信息
(这里是整数型哦)
获取头像链接
代码示例
| 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中默认进行并存储的,所以不会再次产生资源消耗。
使用
依赖
需要安装的库
一般不需要安装的库
环境
开发环境
| 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备案信息 |
无 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步