willygoid/fofa-grabber
GitHub: willygoid/fofa-grabber
一款基于 Go 语言的 FOFA API 搜索结果批量抓取与多格式导出工具,支持并发请求与实时数据保存。
Stars: 0 | Forks: 0
# FOFA Grabber
一个强大且高效的 Go 工具,用于从 FOFA(网络空间搜索引擎)获取并保存搜索结果,支持实时数据保存、并发请求和速率限制。
## 功能
✨ **交互式查询输入** - 在运行工具时直接输入你的 FOFA 查询语句
🚀 **并发请求** - 可配置的并发获取以加快获取结果的速度
⏱️ **速率限制** - 可自定义请求间的延迟以避免触发 API 速率限制
💾 **实时保存** - 数据在获取后立即保存(中断也不会丢失数据)
📁 **多种输出格式** - 域名列表、JSON、CSV 和摘要文件
🔧 **模拟浏览器 Headers** - 模拟真实浏览器请求以避免被屏蔽
📊 **进度跟踪** - 实时进度显示,带有完成百分比
🗂️ **结构化输出** - 所有结果均保存在 `results/` 文件夹下带有时间戳的文件中
## 前置条件
- Go 1.16 或更高版本
- FOFA API Key(从 [FOFA 用户信息](https://fofa.info/userInfo) 获取)
## 安装说明
1. 克隆此仓库:
```
git clone https://github.com/willygoid/fofa-grabber.git
cd fofa-grabber
```
2. 运行程序(它将创建一个默认的 `.env` 文件):
```
go run main.go
```
3. 在 `.env` 文件中编辑你的 FOFA API key:
```
FOFA_API_KEY=your_api_key_here
DELAY_SECONDS=5
CONCURRENT_REQUESTS=1
```
## 用法
### 基本用法
```
go run main.go
```
出现提示时,输入你的 FOFA 查询语句:
```
Input Query: app="Apache-Tomcat" && country="ID"
```
### 构建二进制文件
创建一个独立的可执行文件:
```
go build -o fofa-grabber main.go
```
然后运行:
```
./fofa-grabber
```
## 配置
编辑 `.env` 文件以自定义行为:
| 变量 | 描述 | 默认值 |
|----------|-------------|---------|
| `FOFA_API_KEY` | 你的 FOFA API key | - |
| `DELAY_SECONDS` | 请求之间的延迟(秒) | 2 |
| `CONCURRENT_REQUESTS` | 并发请求的数量 | 3 |
### 推荐设置
- **安全/慢速**:`DELAY_SECONDS=3-5`, `CONCURRENT_REQUESTS=1-2`
- **普通**:`DELAY_SECONDS=2`, `CONCURRENT_REQUESTS=3`
- **快速**(有风险):`DELAY_SECONDS=1`, `CONCURRENT_REQUESTS=5`
⚠️ **警告**:过于激进的设置可能会触发速率限制 (HTTP 429)
## 查询示例
FOFA 使用强大的查询语法。以下是一些示例:
```
# 在印度尼西亚搜索 Livewire 应用
(body="wire:id" || body="wire:click=") && country="ID"
# 搜索 Apache Tomcat 服务器
app="Apache-Tomcat" && country="ID"
# 搜索特定端口
port="8080" && country="ID"
# 按 IP 范围搜索
ip="103.0.0.0/8" && country="ID"
# 按 domain 搜索
domain="example.com"
# 组合多个条件
app="nginx" && port="443" && country="ID"
```
如需了解更多查询语法,请访问 [FOFA 查询语法](https://fofa.info/api)。
## 输出文件
所有文件均保存在 `results/` 目录中,并带有时间戳:
```
results/
├── fofa_domain_20260123_143045.txt # List of domains/URLs (one per line)
├── fofa_json_20260123_143045.txt # Raw JSON results (one per line)
├── fofa_results_20260123_143045.csv # CSV format (URL, IP, Port)
└── summary_20260123_143045.json # Complete summary with metadata
```
### 文件说明
- **fofa_domain_*.txt**: 包含所有发现的域名/URL 的干净列表
- **fofa_json_*.txt**: 每个结果的原始 JSON 数据
- **fofa_results_*.csv**: 易于处理的 CSV 格式
- **summary_*.json**: 包含查询信息和时间戳的完整数据
## 输出示例
```
Configuration loaded:
- Delay: 2s
- Concurrent requests: 3
- Results will be saved to: results/
Input Query: app="Apache-Tomcat" && country="ID"
Query (Base64): YXBwPSJBcGFjaGUtVG9tY2F0IiAmJiBjb3VudHJ5PSJJRCI=
Fetching first page to determine total size...
Total size: 1500
Total pages to fetch: 15
Query: app="Apache-Tomcat" && country="ID"
Starting to fetch 15 pages with 3 concurrent requests and 2s delay...
✓ Progress: 3/15 pages completed (20.0%) - 100 results saved
✓ Progress: 6/15 pages completed (40.0%) - 100 results saved
✓ Progress: 9/15 pages completed (60.0%) - 100 results saved
✓ Progress: 12/15 pages completed (80.0%) - 100 results saved
✓ Progress: 15/15 pages completed (100.0%) - 100 results saved
✓ All pages fetched successfully!
Total results collected: 1500
✓ Summary saved to results/summary_20260123_143045.json
All files saved in results/ directory:
- fofa_domain_20260123_143045.txt (all domains)
- fofa_json_20260123_143045.txt (raw JSON results)
- fofa_results_20260123_143045.csv (CSV format)
- summary_20260123_143045.json (complete summary)
```
## 错误处理
### 速率限制 (HTTP 429)
如果你遇到速率限制:
```
❌ Error fetching page X: rate limit exceeded (429) - increase delay time
```
**解决方案**:在 `.env` 中增加 `DELAY_SECONDS` 或减少 `CONCURRENT_REQUESTS`
### 无效的 API Key
```
Error fetching first page: API returned error: Invalid API key
```
**解决方案**:检查你 `.env` 中的 `FOFA_API_KEY`
### 空查询
```
Error: Query cannot be empty
```
**解决方案**:在出现提示时输入有效的 FOFA 查询语句
## 高级功能
### 实时保存
数据在获取后会立即保存。如果程序被中断:
- 所有已获取的数据都已经保存
- 你可以安全地中断(Ctrl+C)并保留部分结果
- 通过使用不同的查询再次运行来恢复
### 线程安全操作
- 使用 mutex 锁进行并发文件写入
- 对于高并发请求设置是安全的
- 没有数据损坏或竞态条件
### GZIP 支持
自动处理 GZIP 压缩的 API 响应,以实现高效的数据传输。
## 许可证
本项目基于 MIT 许可证授权 - 详情请参阅 [LICENSE](LICENSE) 文件。
## 免责声明
此工具仅供教育和研究目的使用。请始终:
- 遵守 FOFA 的服务条款
- 使用适当的速率限制
- 不要使 API 过载
- 负责任地使用数据
## 作者
Willy The Great - [@willygoid](https://github.com/willygoid)
## 鸣谢
- [FOFA](https://fofa.info) - 网络空间搜索引擎
- Go 社区提供的优秀库
## 支持
如果你觉得这个工具有用,请在 GitHub 上给它点个 ⭐!
如有问题或疑问,请[提交一个 issue](https://github.com/willygoid/fofa-grabber/issues)。
标签:EVTX分析, Golang, 安全编程, 实时处理, 日志审计