guilhermegui08/pcap2api-rs
GitHub: guilhermegui08/pcap2api-rs
一个用Rust编写的命令行工具,从PCAP文件中提取可观测指标并与多个公开及商业威胁情报源进行交叉比对,在单一二进制中重现了IntelMQ的完整流水线。
Stars: 0 | Forks: 0
# pcap2api-rs
`pcap2api` 从一个或多个 PCAP/CAP 文件中提取 IP、域名和 URL,并将它们与七个公开威胁情报源及可选的商业 API 进行交叉比对。它在一个独立的命令行工具中重现了 **IntelMQ Collector → Parser → Output pipeline**。
```
$ pcap2api ./2021-0* --verbose
pcap2api v2.1.0 (Rust · 7 backends)
Extracting observables from 10 file(s) with 4 workers…
Unique observables: 800 (IPs: 106 domains: 144 URLs: 550)
[00:00:06] ████████████████████████████████████████ 5600/5600 checks hits:12
▶ 2021-08-16-formbook.pcap [24 ip 35 domain 130 url] → 1 match(es) on 1 observable(s)
▶ 2021-08-17-formbook.pcap [17 ip 36 domain 96 url] → 5 match(es) on 5 observable(s)
▶ 2021-08-19-redline-2.pcap [ 5 ip 2 domain 9 url] → 1 match(es) on 1 observable(s)
▶ 2021-08-19-redline.pcap [ 9 ip 3 domain 18 url] → clean
▶ 2021-08-20-formbook.pcap [11 ip 18 domain 60 url] → 1 match(es) on 1 observable(s)
════════════════════════════════════════════════════════════════════════════
pcap2api v2.1.0 — Consolidated Report (10 file(s))
════════════════════════════════════════════════════════════════════════════
Observables : 800 total (106 IP, 144 DOM, 550 URL)
Backends : URLhaus · FeodoTracker · PhishTank · Bambenek · Blocklist.de · EmergingThreats · LocalHeuristic
Threats : 12 match(es) on 12 unique observable(s) [ 6 HIGH 6 MED 0 LOW ]
─── Threat Matches ─────────────────────────────────────────────────────────
SEV TYPE OBSERVABLE TI SOURCE CLASS.TYPE CONF KEY DETAIL
─────────────────────────────────────────────────────────────────────────────────────────
HIGH IP 49.156.179.85 EmergingThreats infected-system 82% 49.156.160.0/19
HIGH DOM www.linkedin.com PhishTank phishing 92% www.linkedin.com
MED DOM hypercustom.top LocalHeuristic dga-domain 65% DGA-like + cheap TLD
MED DOM bearcreekcattlebeef.com LocalHeuristic dga-domain 55% Long random label
─── Flagged Observables ────────────────────────────────────────────────────
TYPE VALUE CONTEXT COUNT FILE SOURCES
───────────────────────────────────────────────────────────────────────────
IP 49.156.179.85 destination 73 2021-08-20-for… EmergingThreats
DOM hypercustom.top dns-query 25 2021-08-19-red… LocalHeuristic
DOM www.linkedin.com http-host 6 2021-08-17-for… PhishTank
```
## 功能特性
### 七个内置威胁情报源
该工具为每个情报源模拟了 IntelMQ 的 **Collector → Parser → Cache → Lookup** 流水线。每个情报源都会被自动下载,解析为内存中的 hash set,并缓存到磁盘上。六个公开情报源无需 API 密钥。
| 情报源 | 检测内容 | TTL | 关键说明 |
|---|---|---|---|
| **URLhaus** (Abuse.ch) | 恶意软件分发 URL 及其托管 IP | 60 分钟 | |
| **Feodo Tracker** (Abuse.ch) | 活跃的僵尸网络 C2 IP (Emotet、TrickBot、QakBot 等) | 60 分钟 | |
| **PhishTank** | 已验证的钓鱼 URL 和域名 | 60 分钟 | API 密钥可选(可提高速率限制) |
| **Bambenek Consulting** | C2 域名和 DGA 主列表 | 60 分钟 | 未注册会返回 HTTP 403 |
| **Blocklist.de** | 具有 SSH/FTP/SMTP 暴力破解历史的 IP | 12 小时 | 志愿服务 —— 文件较大 |
| **Emerging Threats** (Proofpoint) | 僵尸网络和 C2 IP,支持 CIDR | 24 小时 | 直接存储 CIDR —— 无需扩展主机 |
| **AlienVault OTX** | 社区威胁 pulse:IP、域名、URL | 30 分钟 | 需要免费的 API 密钥 |
### 从 PCAP 提取观测指标
文件以流式方式逐包处理(不会全部加载到内存中),这使得该工具适用于大型抓包文件。
| 观测指标 | 提取方式 |
|---|---|
| **IPs** | IPv4/IPv6 头 —— 包括源地址和目的地址 |
| **Domains** | 来自 DNSQR 层的 DNS 查询名 |
| **URLs** | 从 HTTP 负载重构 (`Host:` 头 + 请求行) |
| **Ports** | TCP/UDP 目标端口,如果在已知恶意集合中则进行标记 |
### 综合文件级报告
每个文件在提取后立即生成摘要。最终将打印一份完整的综合报告,包括:
- **Threat Matches** (威胁匹配) 表 —— 严重性徽章 (`HIGH`/`MED`/`LOW`)、资产类型徽章 (`IP`/`DOM`/`URL`)、TI 来源、分类类型和分类法、置信度以及关键细节
- **Flagged Observables** (标记的观测指标) 表 —— 上下文 (dns-query、http-host、source、destination 等)、数据包数量、源文件以及标记它的后端
- **Feed Status** (情报源状态) 表 —— 每个后端的 TTL、缓存期限,以及远程与本地分类对比
### 带有 TTL 管理的本地磁盘缓存
情报源存储在 `~/.cache/pcap2api/` 目录下。每个情报源的推荐刷新间隔都会得到严格执行。使用 `--refresh-feeds` 可强制立即重新下载。在网络故障时,该工具会回退到最近过期的缓存条目,并提示其期限。
### 可选的远程 API 后端
| 后端 | 检查内容 | 关键说明 |
|---|---|---|
| **AbuseIPDB** | IP 信誉 | 可配置的最低置信度分数 |
| **VirusTotal** | IP、域名、URL | 可配置的最低引擎检测数 |
| **Shodan** | 开放端口,危险主机标签 | 标记已知恶意标签 (c2、scanner、honeypot 等) |
| **IntelMQ REST API** | IP、FQDN、URL | 查询实时 IntelMQ 事件存储 |
速率限制(默认 200 毫秒)**仅**适用于远程 API 后端。本地情报源查询以全内存速度运行。
### 本地启发式检测
- **DGA 域名检测** —— 针对长随机标签、字母数字混合以及廉价 TLD (`.xyz`、`.top`、`.tk`、`.ml`、`.ga`、`.cf`、`.gq`、`.pw`) 的正则表达式模式
- **可疑端口标记** —— 4444、1337、31337、9050、9051 及更多
### 输出格式
- **彩色终端报告** —— 严重性和资产类型彩色徽章、文件摘要、综合报告
- **JSON** —— 包含摘要元数据、所有观测指标和所有匹配项的完整结构化报告
- **CSV** —— 20 列,包括 `severity`、`asset_type`、`asset_context`、`asset_count`,以及每个后端的扩展详情列(AbuseIPDB 分数、ISP、国家、VT 引擎计数、Shodan 标签等)
- **Exit code 1** 如果发现威胁,0 如果无威胁 —— 适用于 CI/CD pipeline
## 安装说明
### 1. 安装 Rust
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
```
### 2. 安装系统依赖
**Ubuntu / Debian / Kali**
```
sudo apt update && sudo apt install -y libpcap-dev build-essential
```
**Fedora / RHEL / CentOS Stream**
```
sudo dnf install -y libpcap-devel gcc
```
**Arch Linux / Manjaro**
```
sudo pacman -S libpcap base-devel
```
### 3. 构建
```
git clone https://github.com/guilhermegui08/pcap2api-rs
cd pcap2api
cargo build --release
```
二进制文件位于 `target/release/pcap2api`。将其复制到您的 `$PATH` 中:
```
cp target/release/pcap2api ~/.local/bin/
```
## 使用说明
### 扫描并使用所有内置情报源(无需密钥)
```
pcap2api capture.pcap
```
### 多个文件 —— 并行处理,生成单一的综合报告
```
pcap2api morning.pcap afternoon.cap night.pcapng
```
### 强制重新下载情报源(忽略缓存)
```
pcap2api capture.pcap --refresh-feeds
```
### 添加 AlienVault OTX
```
pcap2api capture.pcap --otx-key YOUR_OTX_KEY
```
### 全栈 —— 所有情报源 + 远程 API + 导出
```
pcap2api a.pcap b.cap \
--otx-key OTX_KEY \
--abuseipdb-key AIPDB_KEY \
--virustotal-key VT_KEY \
--shodan-key SHODAN_KEY \
--output-json report.json \
--output-csv report.csv \
--verbose
```
### 禁用不可用或不需要的情报源
```
pcap2api capture.pcap --no-bambenek --no-blocklist-de
```
### CI/CD —— 如果发现威胁则使 pipeline 失败
```
pcap2api capture.pcap --quiet
echo "Exit: $?" # 0 = clean, 1 = threats detected
```
### 使用自定义缓存目录
```
pcap2api capture.pcap --cache-dir /var/cache/pcap2api
```
## 环境变量
| 变量 | 后端 |
|---|---|
| `OTX_KEY` | AlienVault OTX |
| `PHISHTANK_KEY` | PhishTank(可选,提高速率限制) |
| `ABUSEIPDB_KEY` | AbuseIPDB |
| `VIRUSTOTAL_KEY` | VirusTotal |
| `SHODAN_KEY` | Shodan |
```
export ABUSEIPDB_KEY=your_key
pcap2api capture.pcap
```
## 完整选项参考
```
Usage: pcap2api [OPTIONS] ...
Arguments:
... One or more PCAP/CAP capture files to analyse
General:
--workers Parallel extraction workers [default: 4]
-v, --verbose Show per-check detail and feed download progress
-q, --quiet Suppress all output except errors (exit code only)
--refresh-feeds Force re-download of all feeds, ignoring TTL cache
--cache-dir Feed cache directory [default: ~/.cache/pcap2api]
--include-private Include private/RFC1918 IPs in lookups
--kinds ... Observable kinds to look up [default: ip domain url]
--rate-limit Pause between remote API calls [default: 0.2]
Output:
--output-json Save full results to a JSON file
--output-csv Save threat matches to a CSV file (20 columns)
Feed collectors (all enabled by default):
--no-urlhaus Disable URLhaus feed
--no-feodo Disable Feodo Tracker feed
--no-phishtank Disable PhishTank feed
--no-bambenek Disable Bambenek feed
--no-blocklist-de Disable Blocklist.de feed
--no-emerging-threats Disable Emerging Threats feed
--no-heuristics Disable local DGA / suspicious-port heuristics
--otx-key AlienVault OTX API key (env: OTX_KEY)
--phishtank-key PhishTank API key (env: PHISHTANK_KEY)
Remote API backends (disabled unless key is provided):
--abuseipdb-key AbuseIPDB v2 API key (env: ABUSEIPDB_KEY)
--abuseipdb-min-score Minimum confidence score [default: 25]
--virustotal-key VirusTotal v3 API key (env: VIRUSTOTAL_KEY)
--virustotal-min-detections Minimum engine detections [default: 2]
--shodan-key Shodan API key (env: SHODAN_KEY)
--intelmq-url IntelMQ REST API base URL
--intelmq-user IntelMQ REST API username
--intelmq-pass IntelMQ REST API password
-h, --help Print help
-V, --version Print version
```
## 退出代码
| 代码 | 含义 |
|---|---|
| `0` | 未检测到威胁 |
| `1` | 发现一个或多个威胁匹配 |
| `2` | 参数或文件错误 |
## CSV 列参考
`--output-csv` 文件包含 20 列:
| 列 | 描述 |
|---|---|
| `asset_type` | `ip`、`domain` 或 `url` |
| `asset_value` | 观测指标值 |
| `asset_context` | 提取方式:`dns-query`、`http-host`、`source`、`destination` 等 |
| `asset_count` | 包含此观测指标的数据包数量 |
| `source_file` | 来源 PCAP 文件 |
| `ti_source` | 标记它的后端(URLhaus、PhishTank 等) |
| `classification_type` | IntelMQ/RSIT 类型(c2-server、phishing、brute-force 等) |
| `classification_taxonomy` | IntelMQ/RSIT 分类法(malicious-code、fraud、intrusion-attempts 等) |
| `severity` | `HIGH`、`MED` 或 `LOW`(从置信度派生) |
| `confidence_pct` | 整数 0–100 |
| `detail_matched` | 匹配的确切值(CIDR 块、URL 前缀、父域名等) |
| `detail_reason` | 启发式原因文本 |
| `detail_abuse_score` | AbuseIPDB 置信度分数 |
| `detail_isp` | AbuseIPDB —— 该 IP 的 ISP |
| `detail_country` | AbuseIPDB / Shodan 国家 |
| `detail_malicious_engines` | VirusTotal —— 恶意引擎计数 |
| `detail_suspicious_engines` | VirusTotal —— 可疑引擎计数 |
| `detail_total_engines` | VirusTotal —— 总引擎计数 |
| `detail_dangerous_tags` | Shodan —— 危险主机标签 |
| `detail_suspicious_ports` | Shodan —— 开放的可疑端口 |
| `details_json` | 完整的原始详细信息块(全包含) |
## 设计说明
**为什么不直接使用 IntelMQ?**
IntelMQ 是一个完整的 pipeline 平台,需要 Redis、多个进程和 YAML 配置。此工具适用于需要快速、临时 PCAP 分析而无需搭建基础设施的分析师 —— 一个二进制文件,一条命令。
**情报源选择理由**
选择这些情报源是为了在没有冗余的情况下涵盖主要的威胁类别:恶意软件分发 (URLhaus)、活跃僵尸网络和 C2 (Feodo Tracker、Bambenek)、钓鱼 (PhishTank)、机会主义攻击者 (Blocklist.de)、广泛的 IP 覆盖 (Emerging Threats) 以及社区情报 (OTX)。结合在一起,它们涵盖了在实际捕获中最常见的恶意软件家族,正如针对 Formbook、RedLine、LokiBot 和 SquirrelWaffle 样本的测试结果所展示的那样。
**缓存和速率限制设计**
速率限制(可通过 `--rate-limit` 配置)仅适用于强制执行服务条款的远程 API 后端。本地情报源查询 —— 即 hash set 成员测试 —— 在运行时没有任何延迟。情报源的 TTL 设置得较为保守,以尊重志愿服务 (Blocklist.de 为 12 小时,Emerging Threats 为 24 小时)。
**内存设计**
Emerging Threats 将 CIDR 块存储为 `ipnet::IpNet` 对象,而不是将它们扩展为单个主机 IP,否则将生成数亿个条目。所有其他情报源均使用 `HashSet` 并具有 O(1) 查找性能。观测指标提取通过 libpcap 逐个流式传输数据包,因此即使是多 GB 的抓包文件也永远不会完全加载到内存中。
**分类法**
所有匹配均使用 [IntelMQ Data Harmonisation](https://docs.intelmq.org/latest/dev/data-format/) / [RSIT](https://github.com/enisaeu/Reference-Security-Incident-Taxonomy-Task-Force/) 本体(`classification.type` 和 `classification.taxonomy`),使得输出直接兼容 IntelMQ 事件存储和 MISP。
## 致谢
- [IntelMQ](https://github.com/certtools/intelmq) —— 感谢其启发本工具的数据协调本体和情报源架构
- [Abuse.ch](https://abuse.ch) —— URLhaus 和 Feodo Tracker
- [PhishTank](https://www.phishtank.com)
- [Bambenek Consulting](https://osint.bambenekconsulting.com)
- [Blocklist.de](https://www.blocklist.de)
- [Proofpoint Emerging Threats](https://rules.emergingthreats.net)
- [AlienVault OTX](https://otx.alienvault.com)
## 许可证
GPLv3 —— 参见 [LICENSE](LICENSE)。
标签:ESC4, IntelMQ, IP 地址批量处理, IP提取, Linux安全, OSINT, pcap2api-rs, PCAP解析, Rust, URL发现, URL提取, 反编译, 可视化界面, 域名提取, 威胁情报, 威胁情报聚合, 安全检测, 开发者工具, 数据清洗, 深度包检测, 网络信息收集, 网络协议分析, 网络安全, 网络安全分析, 网络流量审计, 通知系统, 隐私保护