资讯动态

FofaViewer批量搜索实战:JDK8环境配置与API Key接入指南

发布时间:2026/10/9 6:05:40 来源:尧图企业网站定制
简介FofaViewer俗称“佛法”是一款面向网络安全研究人员与渗透测试人员的批量搜索爬虫工具基于FOFA网络资产搜索引擎接口帮助用户快速定位和分析互联网公开资产。资源包共2个文件包含1个jar可执行程序与1个properties配置文件压缩包约32.69MB前者为工具主程序后者用于设置API Key、搜索限制与输出参数便于个性化调整。工具支持按关键字、域名、IP范围等条件批量检索结果可导出为CSV或Excel并提供图形界面降低上手门槛同时支持定时任务持续监控资产变化。目前已有2015人学习下载适合需要高效收集网络资产数据、开展安全评估与风险防范的安全从业者参考使用。1. 从一次应急响应说起FofaViewer 到底解决了什么痛点上个月帮朋友处理一起外网暴露面排查对方丢过来一个 IP 段要求两小时内给出所有对外开放的 Web 资产清单。手工在 FOFA 网页上一页页翻、一条条复制别说两小时半天都搞不定。当时我翻出硬盘里躺了很久的FofaViewer_1.1.11_JDK8.zip解压、填 Key、批量跑四十分钟交差。这就是 FofaViewer 这类工具存在的意义——它把 FOFA 搜索引擎的查询能力从浏览器里拽出来变成可批量、可导出、可定时跑的本地客户端。FofaViewer 在圈子里被叫成“佛法”本质是一个基于 Java 的 FOFA 批量搜索爬虫工具。它通过 FOFA 的 API 接口拉取资产数据支持关键字、域名、IP 段、协议、端口等多维度组合查询结果能直接导出 CSV 或 Excel。适合谁用做资产测绘、渗透测试前期信息收集、SRC 漏洞挖掘、企业外网暴露面梳理的安全从业者。如果你只是偶尔查一两个域名网页版够用但一旦涉及成百上千条查询语句的批量作业FofaViewer 的批量模式和定时任务就是刚需。这一版压缩包里三个核心文件fofaviewer.jar是主程序config.properties是配置文件JDK8 是运行环境要求。下面从环境搭建到批量实战把踩过的坑一个个摊开讲。2. 环境准备与首次启动JDK8 不是随便说说的2.1 为什么偏偏锁死 JDK8FofaViewer 1.1.11 编译时用的就是 JDK8 的 target这不是作者偷懒而是 JavaFX 在 JDK11 之后被剥离出标准库导致 GUI 启动直接报NoClassDefFoundError: javafx/application/Application。我试过用本机的 JDK17 去跑双击 jar 毫无反应命令行启动才看到这个异常。所以别想着“高版本兼容低版本”Java 的向下兼容在 GUI 库这块经常翻车。确认本机 Java 版本java -version如果输出里带1.8.0_xxx就对了。如果显示 11、17、21需要单独装一个 JDK8 并切换JAVA_HOME。Windows 下可以在环境变量里把 JDK8 的路径提到最前面Linux/macOS 用update-alternatives或直接指定绝对路径启动。2.2 解压后的目录结构与启动方式解压FofaViewer_1.1.11_JDK8.zip后正常会看到文件/目录作用fofaviewer.jar主程序GUI 入口config.propertiesAPI Key、查询限制、导出路径等配置lib/部分版本依赖库若为 fat jar 则无此目录README简要说明版本不同内容有差异启动方式两种。双击 jar 最省事但出问题时看不到日志。我一般用命令行启动方便观察异常java -jar fofaviewer.jar如果报Unable to access jarfile检查当前目录是否在 jar 所在路径或者用绝对路径。启动成功后会出现一个 Swing/JavaFX 窗口左侧是查询条件区右侧是结果表格区底部有导出按钮和状态栏。提示首次启动如果窗口一闪而过九成是 JDK 版本不对。别急着重下压缩包先看命令行报什么错。3. config.properties 配置详解与 API Key 接入3.1 配置文件里到底有哪些参数config.properties是纯文本键值对文件用记事本或 VS Code 都能改。不同版本字段略有增减但核心就几个# FOFA API Key必填 fofa.keyyour_api_key_here # 单次查询返回的最大记录数免费账号通常限制 100 fofa.maxSize100 # 查询超时时间单位秒 fofa.timeout30 # 导出文件默认保存目录 export.path./output # 是否开启去重按 host 维度 dedup.enabledtruefofa.key是唯一必须改的。fofa.maxSize要根据你 FOFA 账号的权限来设免费账号设成 1000 会直接返回权限错误。fofa.timeout在网络抖动时可以适当调大但别超过 60否则界面会假死。export.path建议改成绝对路径相对路径在不同启动方式下解析结果不一样我遇到过双击启动时导出到了C:\Windows\System32的尴尬情况。3.2 获取并填入 API Key 的正确姿势登录 FOFA 官网进个人中心找到 API Key 管理页面。免费账号每月有额度限制具体数值以官网当前公示为准。复制 Key 之后粘贴到config.properties的fofa.key后面注意不要留空格不要加引号。改完配置后重启 FofaViewer 才生效。有些版本支持界面内修改配置但 1.1.11 我实测下来还是改文件最稳。重启后在界面底部状态栏如果看到“已连接”或类似提示说明 Key 生效了。如果提示“认证失败”先检查 Key 有没有复制全再检查账号是否欠费或额度耗尽。# 改完配置后可以用这条命令快速验证 Key 是否被正确读取 grep fofa.key config.properties输出应该是一行完整的键值对如果显示fofa.key后面为空说明没保存成功。这个检查习惯帮我省过好几次“为什么搜不出结果”的排查时间。4. 批量搜索实战从单条查询到定时监控4.1 查询语法与批量模式的操作逻辑FofaViewer 的查询语法完全继承 FOFA 网页版比如domainexample.com、ip192.168.1.0/24、port6379 protocolredis。区别在于它支持把多条查询语句放进一个文本文件逐条执行并合并结果。我一般会建一个queries.txt每行一条查询语句domaintarget.com ip203.0.113.0/24 title后台管理 countryCN bodyShiro port8080然后在 FofaViewer 界面选择“批量查询”模式导入这个文件。工具会按顺序执行每条查询之间自动加延迟避免触发 FOFA 的频率限制。延迟时间在部分版本里可以在配置文件中调整字段名类似query.interval默认 1 到 2 秒。注意批量模式下如果某条语句语法错误工具通常会跳过并继续执行后续语句但错误日志不一定弹窗提示。跑完后务必检查结果条数是否和预期一致少了就去日志文件里翻。4.2 结果导出与字段说明搜索结果表格里常见字段包括host、ip、port、protocol、title、domain、server、country、header。导出 CSV 时默认全字段输出如果只需要特定列可以在导出对话框里勾选。# 导出后的 CSV 用命令行快速统计资产数量 wc -l result.csv # 按端口分组统计 awk -F, NR1{print $3} result.csv | sort | uniq -c | sort -rn | head -20上面这段awk假设端口在第三列实际列序以导出文件为准。这个统计能快速告诉你目标资产里哪些端口最集中比如 80、443、8080 排前三那后续渗透测试的优先级就清楚了。4.3 定时任务的配置与验证FofaViewer 支持定时执行查询适合做资产变化监控。配置方式一般是在界面里设置间隔时间比如每 6 小时然后指定要监控的查询语句文件。工具会在后台按周期跑结果追加到带时间戳的文件里。验证定时任务是否生效最直接的方法是看输出目录里有没有新文件生成文件名通常带日期时间。如果过了周期还没动静检查三点程序是否还在运行、系统时间是否准确、输出目录是否有写权限。我习惯在定时任务跑完第一轮后手动去目录里确认一次确认没问题再让它长期跑。5. 避坑与排查那些让我加班到凌晨的坑5.1 启动报 JavaFX 缺失现象双击 jar 无反应命令行报NoClassDefFoundError: javafx/application/Application。原因当前JAVA_HOME指向 JDK11 及以上版本JavaFX 不在标准库中。解决切换到 JDK8 启动或者手动下载 JavaFX SDK 并加--module-path参数。最省事的还是装个 JDK8。5.2 API Key 正确但查询返回空现象状态栏显示已连接但任何查询都返回 0 条结果。原因FOFA 免费账号对部分查询语法有限制比如body全文检索需要高级权限或者查询语句里的引号用了中文引号。解决先用最简单的domainbaidu.com测试如果能出结果说明 Key 没问题再逐步加条件定位是哪条语法被限制。中文引号问题肉眼难辨建议在编辑器里开启显示不可见字符。5.3 批量查询中途卡死现象批量执行到第 N 条时界面无响应进度条不动。原因某条查询返回数据量过大或者网络超时后工具没有正确处理异常。解决在config.properties里把fofa.timeout调小到 15 秒让超时快速失败而不是一直等。同时把大批量查询拆成多个小文件每个文件不超过 20 条语句分批跑。5.4 导出 CSV 中文乱码现象Excel 打开导出的 CSV中文标题变成乱码。原因工具默认用 UTF-8 编码写文件而 Excel 在中文 Windows 下默认用 GBK 解析 CSV。解决用记事本打开 CSV 后另存为 ANSI 编码或者用 Excel 的“数据→从文本导入”功能手动指定 UTF-8。我后来干脆用 Python 的 pandas 读没再纠结 Excel 的编码问题。5.5 定时任务跑着跑着停了现象定时监控运行几天后不再生成新文件。原因FOFA API 额度耗尽或者程序所在机器休眠/锁屏导致 Java 进程被挂起。解决定期检查 FOFA 账号剩余额度把程序跑在一台不休眠的机器上或者用nohup在 Linux 下后台运行。Windows 下可以在电源设置里把休眠关掉。6. 进阶技巧用 Python 把导出结果接进自动化流程FofaViewer 的导出功能解决了“拿到数据”的问题但后续的资产分类、存活探测、指纹识别如果全靠手工效率还是上不去。我一般会把导出的 CSV 直接喂给 Python 脚本做二次处理。import pandas as pd import requests # 读取 FofaViewer 导出的 CSV df pd.read_csv(result.csv, encodingutf-8) # 按端口去重保留每个 host 的第一条记录 df_dedup df.drop_duplicates(subset[host], keepfirst) # 提取所有 URL构造存活探测列表 urls [] for _, row in df_dedup.iterrows(): protocol str(row.get(protocol, http)).lower() host str(row[host]) port str(row[port]) if protocol in (http, https): urls.append(f{protocol}://{host}:{port}) else: urls.append(fhttp://{host}:{port}) # 批量探测 HTTP 状态码超时设 5 秒 alive [] for url in urls: try: r requests.get(url, timeout5, verifyFalse) alive.append((url, r.status_code, len(r.content))) except Exception: alive.append((url, dead, 0)) # 输出存活结果 result pd.DataFrame(alive, columns[url, status, size]) result.to_csv(alive.csv, indexFalse) print(f总资产 {len(urls)} 条存活 {len(result[result[status] ! dead])} 条)这段脚本的逻辑很直白先去重再把不同协议的资产统一成可请求的 URL然后逐个发 HTTP 请求看状态码。verifyFalse是为了跳过自签名证书报错在内网资产探测场景下可以接受。timeout5是经验值超过 5 秒没响应的资产大概率不值得继续跟。输出alive.csv里保留了状态码和响应大小后续可以用状态码筛出 200、302、401 这些有进一步测试价值的资产。参数调整方面如果目标资产量很大上万条单线程requests会非常慢可以把探测部分改成concurrent.futures.ThreadPoolExecutor并发跑线程数控制在 20 到 50 之间再高容易把目标打挂或者被 WAF 封 IP。另外drop_duplicates的subset参数可以根据实际需求改成[ip, port]或[domain]取决于你关心的是主机维度还是域名维度。还有一个我常用的技巧把 FofaViewer 的定时任务输出目录直接设成 Python 脚本的输入目录脚本用watchdog库监听文件变化一有新 CSV 生成就自动跑一遍存活探测和指纹识别结果推送到内部资产管理系统。这样从 FOFA 查询到资产入库基本不需要人工介入。从那以后我每次配好 FofaViewer 的定时任务都会先手动跑一轮完整流程——导出、Python 处理、结果核对——确认整条链路通了再让它自动跑。这个习惯帮我避免过好几次“定时任务跑了三天结果因为导出路径写错一条数据都没存下来”的事故。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑