轻量级 FOFA 资产查询助手 fofatoto 1.8.0 已发布。本次把「有没有新版本」「长时间挂 Web 时终端可不可读」「批量/导出进度是不是中文」三块体验补齐;同时 CLI + 本地 Web UI、零第三方依赖、全量导出、批量与 Icon 同款等产品底盘一如既往。仓库与安装包见文末。

做 FOFA 资产查询时,很多人已经习惯「网页端查一下、脚本再补一层」。我自己(GitHub @keyblues)把常用流程收成了开源工具 fofatoto:命令行 + 本地 Web UI,运行时零第三方依赖,把「查 → 拉全 → 去重 → 导出」这条链路尽量跑顺。它不是要替代 FOFA 官网,而是站在 API 之上,补一层更适合批量与落地的工具层。

1.8.0 没有堆花哨功能,而是把日常用下来最烦的几处体验做实。下面先说这次新增,再花更多篇幅把已经能用的特色能力讲清楚,方便直接装包试用的同学对齐预期。


1.8.0 有什么新?

1. 启动时提示「有新版本」

本地工具的常见痛点是:用着旧包,不知道上游已经修了问题或加了能力。1.8.0 在启动时对照 GitHub Releases,把「有没有新版本」做成可感知、但不打扰的提示:

  • 命令行:Banner 后提示新版本与下载地址;
  • Web UI:顶栏版本号旁出现可点击的「新版本 vx.y.z」,链到发布页;
  • 失败不打扰:离线、超时、限流时静默跳过,不打断正常查询;
  • 有缓存:成功结果缓存约 12 小时,失败约 1 小时,避免每次启动都打网络;
  • 可关闭:--no-update-check 或环境变量 FOFATOTO_NO_UPDATE_CHECK=1。

对习惯「下一次二进制长期挂着」的同学,这条改动能少踩一次「还在跑旧包」的坑;内网或明确不想联网检查时,关掉即可。

2. Web 访问日志不再被轮询刷屏

本地起 Web UI 做深度导出或批量时,进度轮询、浏览器 favicon、Chrome DevTools 探测(如 /json/version)很容易把终端刷成瀑布——真正想看的搜索、导出、错误反而被淹没。1.8.0 把访问日志收成对齐的单行(时间、方法、路径、状态码、来源 IP,方法与状态码着色),并大幅降噪:

  • 成功的 /api/progress、favicon、DevTools 探测默认不再打印;
  • 账户信息、版本检查仍会打印;
  • 同一来源 30 秒内反复打开页面,只保留第一行;
  • 搜索、导出、下载和 5xx 等仍会输出。

长时间挂着界面盯进度时,终端可读性会好很多;需要排查异常时,关键请求和错误路径也还在。

3. 导出与批量进度状态统一中文

Web 端单次导出的进度文案本来偏中文,批量 / 导出面板上却还能看到 Target i/n、retry、Partial: n/m failed、Cancelled by user 这类英文。1.8.0 把面板上能看到的状态统一成中文,与单次导出句式对齐——例如取消且无可保留结果时显示「已取消」。这是纯体验向的本地化,没有改查询语义,打开界面立刻能感觉到。


产品底盘:已经能用的特色能力

1.8.0 的「新」主要在体验层;真正支撑日常干活的,仍是下面这套 README 里写明的能力。若你是第一次接触 fofatoto,这一节比「三点小更新」更值得先看。

零依赖与跨平台二进制

运行时仅使用 Python 标准库(Python ≥ 3.11),无需 pip install 任何第三方包;源码就是单文件 fofatoto.py,python fofatoto.py 或 uv run 即可。另有 GitHub Actions 编译的 Windows / Linux(amd64、arm64)/ macOS arm64 二进制,开箱即用。Windows 用户下载后双击 fofatoto.exe 就会进本地 Web UI——对不想碰命令行的同学很友好。

CLI + 本地 Web UI 双入口

同一套查询与导出逻辑,两种入口随时切换:

  • CLI:适合脚本、管道、定时任务;-c 只看账户状态,-w 显式起 Web;
  • Web UI:无参数运行或双击二进制即启动;默认监听 127.0.0.1(端口从 17380 自动探测),启动后自动打开浏览器;SSH / 无 DISPLAY 环境会跳过自动打开并提示手动访问;WSL 会调起 Windows 默认浏览器。

前端内联在二进制里(无外部 CDN),后端用标准库 http.server,多线程处理——依旧零第三方依赖。

全量导出:突破单次 1 万条

FOFA 单次接口有 10000 条上限。把 -l 设为大于 10000 的值或 max,即启用深度抓取:

  1. 先用 size=1 探测总匹配数;
  2. 按 before 时间游标递进,每批最多 10000 条;
  3. 自动去重合并,实时显示进度与配额消耗;
  4. 遇到 [-501]、超时等临时失败,自动放慢请求节奏,而不是一把梭把额度打爆。

可用 --fill 控制覆盖率(默认 0.8),--full 搜索近一年之外的历史数据。Web 端「深度导出」走同一套游标逻辑,页面展示进度、目标、配额、耗时,完成后下载 CSV / JSON / TXT。

批量查询与占位符

-b 读目标文件,查询里写 {}(或自定义 -p 占位符),逐条替换后执行并合并导出;文件里空行和 # 注释会自动跳过,目标之间默认间隔 2 秒减轻限流。没有占位符时,文件每行当作独立 FOFA 语句执行。Web「批量模式」复用深度导出流程,还可设「每目标上限」(0 为不限制;1–10000 走单次查询,避免对每个目标都先探测再游标)。

Icon 同款:favicon → icon_hash

输入网站地址,自动抓取 favicon 并按 Shodan/FOFA 通用约定计算 icon_hash(base64 后的 MurmurHash3 x86_32 有符号 32 位,与网页版 Icon 提取一致),即可查「同图标 = 同框架/同产品默认页」一类资产(OA、中间件控制台等)。CLI -i/--icon 支持三种目标:网站地址(缺省 scheme 先 https 再回退 http)、本地 icon 文件、已知 hash 整数;可叠加位置参数作 AND 过滤。Web 即时预览旁有「Icon 提取」弹窗,填网址后自动写入查询框。为保持零依赖,MurmurHash3 是内置纯 Python 实现。

字段定制、智能去重与多格式导出

  • 字段:CLI -f 指定返回字段;默认 host,ip,port,protocol,domain,title,server,country,city。自定义字段 url 由本地按 host/port/protocol 拼接,请求前自动从 API 字段剥离。
  • 去重:--dedup 支持单字段、多字段组合及 url;去重字段会自动追加到查询请求。
  • 格式:CSV(UTF-8-BOM)/ JSON / TXT;TXT 在只查 ip/domain 时输出对应列表,否则输出 URL 列表。未指定输出文件名时自动生成带时间戳的文件名。

配置热更新与中转站

config.json 固定放在可执行文件同目录,首次运行自动生成。改完 Key 或把 url 换成第三方中转站后,下一个请求即生效,无需重启 Web 服务。内置对 fafaapi.info 的账户接口适配,账户信息统一展示;其余地址按标准 FOFA 接口处理。CLI -c/--check 可只看 VIP、剩余查询、过期时间等后退出。

Web UI:三种模式与一批顺手交互

模式 做什么
即时预览 快速查、表格看:虚拟滚动最多承载 10000 条,字段 chip 拖拽排序,表头点击排序,URL 可跳转,当前预览可直接导出 CSV/JSON/TXT
深度导出 后台按 before 游标分批拉全量,面板看进度与配额,完成后下载
批量模式 占位符批量替换,合并结果;可设每目标导出上限

顺手的交互还包括:

  • 字段 chip:搜索、增删、拖拽排序;可拖入查询框自动插入 字段=""(光标落在引号内,已有条件用 || 连接);「不看」本地排除、「选取查询」把单元格变成 字段="值" 条件(可配合自动搜索);
  • 查询历史:浏览器 localStorage,内联建议、过滤、键盘上下选择;设置里可关下拉框(记录仍写入);
  • 设置:适应窗口宽度、全部数据、选取后自动搜索、显示历史等;
  • 账户信息:顶栏展示 VIP / 剩余查询 / 过期时间等,约每 3 分钟静默刷新(页面隐藏时暂停);
  • 超长查询:输入框聚焦展开换行(浮起不挤布局),Enter 搜索、Shift+Enter 换行;
  • Icon 提取:见上一节。

这些不是 1.8.0 才有的「新卖点」,而是工具一直在打磨的日常体验;1.8.0 只是让「版本提示、日志可读、进度中文」跟上同一水准。


快速上手(请用 1.8.0)

下载:
https://github.com/keyblues/fofatoto/releases

平台 文件
Windows amd64 fofatoto.exe(可双击进 Web UI)
Linux amd64 / arm64 fofatoto / fofatoto_arm64
macOS arm64(M 系列) fofatoto_mac_arm64

首次运行会在同目录生成 config.json,填入 API Key 即可。源码运行同样不需要第三方包(Python ≥ 3.11):

git clone https://github.com/keyblues/fofatoto.git
cd fofatoto
python fofatoto.py -c          # 只看账户状态
python fofatoto.py -w          # 本地 Web UI

常用 CLI 示例:

./fofatoto "domain=example.com" -l max -o all.csv
./fofatoto "host={}" -b targets.txt -o batch.csv
./fofatoto --icon https://example.com -l 500 -o twins.csv

不想每次启动检查更新时:

./fofatoto -w --no-update-check
# 或
export FOFATOTO_NO_UPDATE_CHECK=1

使用与合规提醒

  1. 配额是硬成本。 全量 / 批量会吃查询量,建议先用小 limit 或即时预览摸规模,再用 -c 看剩余额度。
  2. Web UI 默认本机、无鉴权。 保持 127.0.0.1;只有可信局域网才考虑 --host 0.0.0.0。
  3. 请在合法授权范围内使用测绘数据,遵守 FOFA 服务条款与当地法规。工具只是查询与导出辅助层。

开源与反馈

项目还年轻,欢迎试用、提 Issue,也欢迎直接改。这次 1.8.0 把「知新版本、日志干净、进度中文」三件小事做实;日常查资产、拉全量、跑批量、找 Icon 同款时,希望少一点烦躁、多一点可读。

GitHub:https://github.com/keyblues/fofatoto