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

发布时间:2026/10/23 14:20:51

FOFA API v2.0 资产采集实战:Python 脚本 3 步自动化处理与 Rad 爬虫对接 FOFA API v2.0 资产采集与自动化处理实战指南1. 现代资产采集的技术演进在网络安全领域资产采集已经从传统的手工枚举发展为智能化的自动化流程。作为安全研究员我们需要掌握如何高效获取目标资产信息并将其转化为可操作的扫描目标。FOFA作为领先的网络空间测绘引擎其API v2.0版本提供了更强大的查询能力和更灵活的数据返回格式。资产采集的核心价值在于精准定位通过语法组合锁定特定技术栈的资产批量获取一次性收集数百甚至上千条相关资产数据持续监控定期执行采集任务发现新增暴露面# FOFA基础查询示例 import requests FOFA_EMAIL your_emaildomain.com FOFA_KEY your_api_key_here base_url https://fofa.info/api/v2/search query domainexample.com status_code200 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, paramsparams) 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查询需要关注三个维度目标特征识别目标的独特标识备案号、特定标题等技术指纹通过组件特征缩小范围中间件、框架等业务场景结合业务逻辑推测可能的资产分布# 高级查询构建示例 def build_fofa_query(target_domain, tech_stackNone): base_query fdomain{target_domain} if tech_stack: if tech_stack Spring: base_query headerX-Application-Context elif tech_stack ThinkPHP: base_query bodyThinkPHP # 排除常见干扰项 base_query !body403 Forbidden return base_query3. Python自动化处理流水线3.1 资产标准化处理采集到的原始数据往往需要经过清洗才能用于后续工具链。典型处理流程包括协议补充为IP或域名添加http/https前缀端口归一化根据服务类型标准化URL格式去重处理消除因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(fhttp://{ip}:{port}) processed.add(fhttps://{ip}:{port}) else: processed.add(fhttp://{asset}) processed.add(fhttps://{asset}) # 处理域名形式 else: if not asset.startswith((http://, https://)): processed.add(fhttp://{asset}) processed.add(fhttps://{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_filerad_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(fhttp://{host}:{port}\n) f.write(fhttps://{host}:{port}\n) print(f生成Rad输入文件{output_file})4. 实战构建端到端自动化流程4.1 完整工作流设计资产采集层FOFA API定时任务数据处理层自动清洗和标准化爬虫调度层并行启动Rad实例结果聚合层合并爬取结果供后续分析# 端到端自动化脚本框架 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: domainexample.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(retries3, backoff_factor0.3): session requests.Session() retry Retry( totalretries, readretries, connectretries, backoff_factorbackoff_factor, status_forcelist(500, 502, 504) ) adapter HTTPAdapter(max_retriesretry) session.mount(http://, adapter) session.mount(https://, adapter) return session # 使用示例 session setup_session() response session.get(https://fofa.info/api/v2/search, paramsparams)5. 高级应用场景5.1 持续监控系统构建通过将FOFA采集与自动化处理结合可以构建资产监控系统基线建立首次全量采集目标资产增量检测定期执行差异分析告警触发发现新暴露面时实时通知# 简易监控系统核心逻辑 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, removed5.2 多工具链集成现代安全研究需要多种工具协同工作典型集成模式包括FOFA → Rad → Xray全自动化漏洞发现FOFA → Nuclei针对性漏洞检测FOFA → Custom Scanner定制化扫描方案# 工具链集成示例 def run_full_scan(target_domain): # 步骤1FOFA资产采集 fofa_results fetch_from_fofa(fdomain{target_domain}) # 步骤2数据处理 normalized normalize_assets([r[host] for r in fofa_results]) # 步骤3Rad爬虫 generate_rad_input(normalized, rad_input.txt) os.system(rad -t 10 -f rad_input.txt -o rad_output) # 步骤4Xray扫描 os.system(xray webscan --listen 127.0.0.1:7777 --html-output xray_report.html) print(全流程扫描完成结果保存在xray_report.html)在实际项目中这套方法帮助我们将资产收集效率提升了3-5倍同时减少了人为错误。关键在于保持脚本的模块化设计便于针对不同场景调整流程。
延伸阅读

更多相关文章

2026/10/22 14:43:00

GEO系统实战:破解流量瓶颈与去中心化发布

痛点深度剖析 随着AI搜索流量逐步成为主流,我们发现大量技术团队正面临一个现实困境:网站自然流量持续下滑,技术文档和产品页面在AI搜索引擎中的曝光率急剧降低。我们团队在服务多家软件公司和品牌方的过程中,发现这些问题的根源…

2026/10/23 16:44:46

Python全栈开发家政服务管理系统架构解析

1. 项目概述:家政服务管理系统的技术架构解析这个基于Python全栈技术构建的家政服务管理系统,本质上是一个典型的B/S架构企业级应用。我在实际开发中发现,这类系统需要同时兼顾后台业务逻辑的严谨性和前端交互的流畅性。Vue.js作为前端框架能…

2026/10/23 16:44:46

SpringBoot与Android开发宠物社区APP实践

1. 项目背景与核心价值宠物社区类应用近年来呈现爆发式增长,根据行业数据显示,2022年全球宠物市场规模已突破2600亿美元。在这个背景下,基于SpringBoot和Android的宠物社区APP开发具有明确的现实需求。这类应用需要解决三个核心痛点&#xff…

2026/10/23 16:44:46

BPSK与QPSK误码率对比:Simulink仿真避坑指南

简介:这份课程设计资料面向通信工程、电子信息类专业学生及需要完成MATLAB/Simulink仿真实训的学习者,围绕AWGN信道下BPSK与QPSK两种调制方式展开建模与性能比较。内容从调制解调原理入手,涵盖需求分析、设计思路、Simulink模型搭建、误码率结…

2026/10/23 16:44:46

MATLAB脑网络分析实战:GRETNA-2.0.0功能连接与图论计算指南

简介:GRETNA 2.0.0 Release 是北京师范大学研发、面向 MATLAB 环境的脑成像数据分析插件,主要服务于脑电(EEG)与脑磁图(MEG)方向的神经科学研究人员及具备一定 MATLAB 编程基础的研究生。它集成滤波去噪、源…

2026/10/23 16:39:45

UVM面试第四套:TLM通信、phase与寄存器模型核心考点拆解

UVM 面试题出到第四套还能不重样,其实难度不小。前几套把框架、phase 基础、sequence 原理翻来覆去捋过之后,剩下的硬骨头基本都集中在通信机制、工厂与参数配置的边界、寄存器模型,以及那类根本没有标准答案的开放式设计题上。这套题就是给准…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑