多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

用100万域名压测BBRF:高吞吐子域名入库管道是怎么实现的(含测试数据与源码)

用100万域名压测BBRF:高吞吐子域名入库管道是怎么实现的(含测试数据与源码) 用100万域名压测BBRF高吞吐子域名入库管道是怎么实现的含测试数据与源码【免费下载链接】bbrf-clientThe Bug Bounty Reconnaissance Framework (BBRF) can help you coordinate your reconnaissance workflows across multiple devices项目地址: https://gitcode.com/gh_mirrors/bb/bbrf-clientBBRFBug Bounty Reconnaissance Framework漏洞赏金侦察框架是一个可以跨多台设备协调渗透测试侦察流程的开源工具。本文用项目自带的100万条域名测试集完整压测它的子域名入库管道拆解这套高吞吐批量写入是怎么实现的并附上全部测试数据与源码位置。一、先认识BBRF侦察数据的中枢系统对新手来说可以把 BBRF 理解成侦察数据的中枢系统存什么域名、IP、URL、服务开放端口全部以 JSON 文档形式存放在后端的 CouchDB 里管什么按项目Program划分作用域inscope/outscope只有作用域内、格式合法的数据才能入库跨设备客户端、监听器、仪表盘都指向同一个服务端数据实时同步整个客户端的核心只有两个文件src/bbrf.py命令行入口与本地数据清洗逻辑src/bbrf_api.py与服务端的 API 交互批量写入就发生在这里二、压测数据准备100万域名从哪来项目src/test/目录自带两份压测数据这是复现本文的关键文件行数用途src/test/1m-domains.txt1,000,000极限压测100万个subN.example.com格式的子域名src/test/50k-domains.txt50,000快速验证小批量跑通流程数据格式非常干净每行一个域名从sub1.example.com一直编号到sub1000000.example.com正好可以整体落入*.example.com的作用域内——这意味着压测时几乎不存在被作用域过滤的干扰变量。三、高吞吐入库管道5个关键设计 把cat 1m-domains.txt | bbrf domain add -这条命令拆开看管道由 5 个环节组成。1. 管道式批量读取一次读完不逐行往返bbrf domain add -中的-表示从标准输入读入。入口函数process_stdin()位于src/bbrf.py末尾只做一件事一次性read()全部输入过滤空行。100万行在客户端内存中变成一个 Python 列表没有任何网络往返。2. 本地预清洗正则 黑名单 作用域垃圾进不来add_domains()在本地完成全部校验只有合格数据才会进入待写入列表统一小写、去掉末尾句点*.domain形式的通配符会被展开用预编译正则REGEX_DOMAIN校验域名合法性非法直接丢弃命中黑名单域名或解析到的 IP直接跳过必须匹配 inscope 且不命中 outscope否则丢弃这一步的价值把 100万行的脏活全部留在本地 CPU 上完成服务端收到的都是干净数据。3. 一次批量写入_bulk_docs是吞吐的关键 ⚡这是整个管道最核心的一步。add_documents()位于src/bbrf_api.py把清洗后的所有域名组装成一个{docs: [...]}结构只发一个 HTTP 请求到 CouchDB 的/_bulk_docs接口。对比一下量级差异就明白了逐条写入需要 100万次网络往返而 BBRF 用 1 次批量请求完成。这正是它能扛住 100万域名压测的根本原因。4. 冲突不报错重复域名自动降级为更新批量写入的响应会区分两类结果ok新文档和conflict已存在的文档。BBRF 的处理很聪明——把 conflict 视为更新信号二次批量调用把这些域名更新而非报错并用--show-new输出[NEW]/[UPDATED]标记。重复数据入库不会让压测中断。5. 作用域变更也合并提交如果输入中出现符合 inscope 的*.domain通配符add_domains()会先收集这些新增作用域一次性合并提交源码注释原话drastically reduce runtime of large input。大输入下的运行时开销因此被大幅压低。四、动手压测三步复现 前提已部署 BBRF 服务端并配置好~/.bbrf/config.json。第 1 步创建测试项目并定义作用域bbrf new test bbrf inscope add *.example.com第 2 步管道压测100万域名time cat src/test/1m-domains.txt | bbrf domain add - --show-new第 3 步验证入库结果bbrf domains | wc -l bbrf show sub1.example.com | jq如果想先小规模跑通流程把输入换成src/test/50k-domains.txt即可。此外src/test/bbrf_test.py中有一套完整的单元测试作用域过滤、去重、标签、--show-new输出等可以作为压测前的功能验证。五、压测结论值得抄的 3 条设计经验客户端预清洗校验、去噪、作用域过滤全部本地完成服务端只接收净数据请求合并100万条数据 1 次_bulk_docs请求网络往返次数与数据量解耦幂等设计重复输入走更新路径而非失败路径管道可以安全地反复重放入库不是终点。BBRF 的监听器还会在检测到新域名后自动执行~/.bbrf/hooks/domain/new/下的脚本比如仓库里自带的 resolve.sh 会对新域名自动 DNS 解析并回写——这才构成收集→入库→解析→回写的完整自动化管道闭环。延伸阅读清洗逻辑见src/bbrf.py的add_domains()批量写入见src/bbrf_api.py的add_documents()与update_documents()压测数据在src/test/1m-domains.txt。【免费下载链接】bbrf-clientThe Bug Bounty Reconnaissance Framework (BBRF) can help you coordinate your reconnaissance workflows across multiple devices项目地址: https://gitcode.com/gh_mirrors/bb/bbrf-client创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表