fofatoto 1.8.0 发布:启动即知新版本、中文进度面板与更干净的 Web 日志
轻量级 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,即启用深度抓取:
- 先用
size=1探测总匹配数; - 按
before时间游标递进,每批最多 10000 条; - 自动去重合并,实时显示进度与配额消耗;
- 遇到
[-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
使用与合规提醒
- 配额是硬成本。 全量 / 批量会吃查询量,建议先用小 limit 或即时预览摸规模,再用
-c看剩余额度。 - Web UI 默认本机、无鉴权。 保持
127.0.0.1;只有可信局域网才考虑--host 0.0.0.0。 - 请在合法授权范围内使用测绘数据,遵守 FOFA 服务条款与当地法规。工具只是查询与导出辅助层。
开源与反馈
- 仓库:https://github.com/keyblues/fofatoto
- Releases(1.8.0):https://github.com/keyblues/fofatoto/releases
项目还年轻,欢迎试用、提 Issue,也欢迎直接改。这次 1.8.0 把「知新版本、日志干净、进度中文」三件小事做实;日常查资产、拉全量、跑批量、找 Icon 同款时,希望少一点烦躁、多一点可读。
