当前位置: 首页 > news >正文

FOFA API v2.0 资产采集实战:Python 脚本 3 步自动化处理与 Rad 爬虫对接

FOFA API v2.0 资产采集与自动化处理实战指南

1. 现代资产采集的技术演进

在网络安全领域,资产采集已经从传统的手工枚举发展为智能化的自动化流程。作为安全研究员,我们需要掌握如何高效获取目标资产信息,并将其转化为可操作的扫描目标。FOFA作为领先的网络空间测绘引擎,其API v2.0版本提供了更强大的查询能力和更灵活的数据返回格式。

资产采集的核心价值在于:

  • 精准定位:通过语法组合锁定特定技术栈的资产
  • 批量获取:一次性收集数百甚至上千条相关资产数据
  • 持续监控:定期执行采集任务,发现新增暴露面
# FOFA基础查询示例 import requests FOFA_EMAIL = "your_email@domain.com" FOFA_KEY = "your_api_key_here" base_url = "https://fofa.info/api/v2/search" query = 'domain="example.com" && status_code="200"' fields = "host,title,ip,port,server" size = 100 # 每页结果数 page = 1 # 页码 params = { "email": FOFA_EMAIL, "key": FOFA_KEY, "qbase64": base64.b64encode(query.encode()).decode(), "fields": fields, "size": size, "page": page } response = requests.get(base_url, params=params) if response.status_code == 200: data = response.json() print(f"获取到 {len(data['results'])} 条结果")

2. FOFA API v2.0 深度解析

2.1 API核心功能对比

功能特性v1.0版本v2.0增强点
查询语法基础支持支持更复杂的逻辑组合
结果字段固定字段可自定义返回字段
分页机制简单分页支持大结果集高效遍历
速率限制较严格按账户等级动态调整
数据新鲜度延迟更新近实时数据返回

2.2 高效查询构建技巧

构建优质FOFA查询需要关注三个维度:

  1. 目标特征:识别目标的独特标识(备案号、特定标题等)
  2. 技术指纹:通过组件特征缩小范围(中间件、框架等)
  3. 业务场景:结合业务逻辑推测可能的资产分布
# 高级查询构建示例 def build_fofa_query(target_domain, tech_stack=None): base_query = f'domain="{target_domain}"' if tech_stack: if tech_stack == "Spring": base_query += ' && header="X-Application-Context"' elif tech_stack == "ThinkPHP": base_query += ' && body="ThinkPHP"' # 排除常见干扰项 base_query += ' && !body="403 Forbidden"' return base_query

3. Python自动化处理流水线

3.1 资产标准化处理

采集到的原始数据往往需要经过清洗才能用于后续工具链。典型处理流程包括:

  1. 协议补充:为IP或域名添加http/https前缀
  2. 端口归一化:根据服务类型标准化URL格式
  3. 去重处理:消除因CDN等导致的重复资产
# URL标准化处理脚本 import re from urllib.parse import urlparse def normalize_assets(raw_assets): processed = set() for asset in raw_assets: # 处理IP形式 if re.match(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?$', asset): if ':' in asset: ip, port = asset.split(':') processed.add(f"http://{ip}:{port}") processed.add(f"https://{ip}:{port}") else: processed.add(f"http://{asset}") processed.add(f"https://{asset}") # 处理域名形式 else: if not asset.startswith(('http://', 'https://')): processed.add(f"http://{asset}") processed.add(f"https://{asset}") else: parsed = urlparse(asset) if not parsed.path or parsed.path == '/': processed.add(asset) return sorted(processed)

3.2 与Rad爬虫的高效对接

Rad作为现代爬虫工具,对输入格式有特定要求。我们需要确保:

  • 每个URL独立一行
  • 支持HTTP/HTTPS协议
  • 保留端口号信息(非标准端口时)
# Rad输入文件生成器 def generate_rad_input(fofa_results, output_file="rad_input.txt"): with open(output_file, 'w') as f: for result in fofa_results: host = result.get('host', '') port = str(result.get('port', '80')) if not host: continue if port in ['80', '443']: scheme = 'https' if port == '443' else 'http' f.write(f"{scheme}://{host}\n") else: f.write(f"http://{host}:{port}\n") f.write(f"https://{host}:{port}\n") print(f"生成Rad输入文件:{output_file}")

4. 实战:构建端到端自动化流程

4.1 完整工作流设计

  1. 资产采集层:FOFA API定时任务
  2. 数据处理层:自动清洗和标准化
  3. 爬虫调度层:并行启动Rad实例
  4. 结果聚合层:合并爬取结果供后续分析
# 端到端自动化脚本框架 import json from concurrent.futures import ThreadPoolExecutor class AssetPipeline: def __init__(self, config): self.config = config self.raw_assets = [] self.processed_assets = [] def fetch_from_fofa(self, query): # 实现FOFA API调用 pass def process_assets(self): # 实现资产标准化 pass def run_rad_crawler(self, input_file): # 实现Rad调用 pass def execute(self): print("启动资产采集流水线") self.fetch_from_fofa(self.config['fofa_query']) self.process_assets() self.run_rad_crawler("rad_input.txt") print("流水线执行完成") # 示例配置 config = { "fofa_query": 'domain="example.com"', "concurrency": 5 } pipeline = AssetPipeline(config) pipeline.execute()

4.2 性能优化技巧

  • 异步请求:使用aiohttp提升API调用效率
  • 结果缓存:避免重复查询相同条件
  • 智能重试:对失败请求实现指数退避重试
  • 资源限制:根据硬件条件调整并发度
# 带重试机制的API调用 import time from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry def setup_session(retries=3, backoff_factor=0.3): session = requests.Session() retry = Retry( total=retries, read=retries, connect=retries, backoff_factor=backoff_factor, status_forcelist=(500, 502, 504) ) adapter = HTTPAdapter(max_retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) return session # 使用示例 session = setup_session() response = session.get('https://fofa.info/api/v2/search', params=params)

5. 高级应用场景

5.1 持续监控系统构建

通过将FOFA采集与自动化处理结合,可以构建资产监控系统:

  1. 基线建立:首次全量采集目标资产
  2. 增量检测:定期执行差异分析
  3. 告警触发:发现新暴露面时实时通知
# 简易监控系统核心逻辑 class AssetMonitor: def __init__(self, baseline_file): self.baseline = self.load_baseline(baseline_file) self.current = set() def load_baseline(self, filepath): with open(filepath) as f: return set(line.strip() for line in f) def detect_changes(self, new_assets): new_assets = set(new_assets) added = new_assets - self.baseline removed = self.baseline - new_assets if added: print(f"发现 {len(added)} 个新增资产") with open('new_assets.txt', 'w') as f: f.write('\n'.join(added)) if removed: print(f"发现 {len(removed)} 个资产下线") return added, removed

5.2 多工具链集成

现代安全研究需要多种工具协同工作,典型集成模式包括:

  • FOFA → Rad → Xray:全自动化漏洞发现
  • FOFA → Nuclei:针对性漏洞检测
  • FOFA → Custom Scanner:定制化扫描方案
# 工具链集成示例 def run_full_scan(target_domain): # 步骤1:FOFA资产采集 fofa_results = fetch_from_fofa(f'domain="{target_domain}"') # 步骤2:数据处理 normalized = normalize_assets([r['host'] for r in fofa_results]) # 步骤3:Rad爬虫 generate_rad_input(normalized, "rad_input.txt") os.system("rad -t 10 -f rad_input.txt -o rad_output") # 步骤4:Xray扫描 os.system("xray webscan --listen 127.0.0.1:7777 --html-output xray_report.html") print("全流程扫描完成,结果保存在xray_report.html")

在实际项目中,这套方法帮助我们将资产收集效率提升了3-5倍,同时减少了人为错误。关键在于保持脚本的模块化设计,便于针对不同场景调整流程。

http://www.jsqmd.com/news/1159684/

相关文章:

  • AAAI 2026 | SACF:光谱引导自适应跨层融合模块,频域纹理双重增强让遥感检测细节拉满!
  • 2026年7月最新嘉兴万国官方售后服务热线与网点地址查询 - 万国中国官方服务中心
  • 2026贵阳黄金回收白银回收铂金回收价格高无损耗专业鉴定本地人常去门店联系方式推荐
  • 告别黑苹果配置噩梦:OpCore Simplify如何用智能自动化破解技术壁垒
  • 2026年7月最新帝舵北京王府井喜悦购物中心维修保养服务电话 - 帝舵中国官方服务中心
  • 关于梳理 2026 年亨得利全国官方售后维修联络信息公告(最新保养热线与门店明细) - 亨得利维修保养中心
  • Simulink 零阶保持器 (ZOH) 仿真:3种采样周期对系统稳定性的影响对比
  • B站资源下载新体验:三分钟掌握跨平台工具箱的实用技巧
  • 亨得利官方名表服务中心|完整地址与售后热线电话权威信息声明(2026年7月最新) - 亨得利官方博客
  • ESP32 WiFi/蓝牙网关实战:基于ESP-IDF v5.1 实现10设备并发扫描与TCP转发
  • C# .NET 8 集成 SQLite 加密:3 种 NuGet 包方案对比与实战选型
  • Logback 1.4.x 生产环境配置:3种滚动策略与2个关键参数调优实战
  • 亲身到店探访海口亨得利官方名表服务中心|详细地址与24小时售后热线(2026年7月更新) - 亨得利官方
  • (7)CNN卷积层verilog实现
  • 搬家寄大件经验分享,怎样寄大件更省钱?
  • 智能车三岔路口处理:麦轮全向车8步分解法与左右不对称补偿策略
  • STM32CubeMX FreeRTOS 配置避坑 3 要点:TIM6 时基、堆栈与 Newlib 重入
  • RISC-V特权模式切换实战:从M到U的3步汇编代码与QEMU调试
  • Python/pip 命令报错排查:从环境变量到系统路径冲突的5步诊断法
  • 实战指南:3步完成黑苹果SMBIOS智能生成与配置
  • 高精度ADC与STM32的信号采集系统设计实践
  • 湖北世达实用外国语学校 2026 年秋季招生报名指南 流程、要求一文详解 - 湖北找学校
  • 2026年7月最新亨得利官方名表服务中心|详细地址与售后服务电话权威信息公示 - 亨得利官方博客
  • 2026 浙江柴油发电机组厂家 TOP3 履约能力实测榜|本地现货 + 售后时效 + 合规验收三维核验 - ZJYDZH
  • 湖北省世达实用外国语学校 2026 年秋季招生简章【官网发布】 - 湖北找学校
  • 2026 年湖北省世达实用外国语学校秋季招生简章(官方完整版) - 湖北找学校
  • 唐山丰南区丰南镇亨得利官方钟表服务中心电话公示(2026年7月最新) - 亨得利钟表维修中心
  • VOFA+ 3种协议深度对比:JustFloat vs FireWater vs RawData,STM32实测带宽与易用性
  • Windows Cleaner:3步解决C盘爆红问题,开源免费的系统优化神器
  • FPGA差分信号转换:IBUFDS、OBUFDS与IOBUFDS 3原语对比与选型