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

从零写一个 Python 目录扫描器:学习笔记

从零写一个 Python 目录扫描器:学习笔记

作者:boz-ling
项目地址:https://github.com/boz-ling/dirbuster


前言

这篇文章记录我从零开始写一个 Web 目录扫描器的过程。

代码已经放到了 GitHub:https://github.com/boz-ling/dirbuster


为什么写目录扫描器?

目录扫描是渗透测试中信息收集的重要一步。通过爆破常见的目录和文件名,可以快速了解目标网站的资产结构:

  • 发现隐藏的管理后台(admin/manager/
  • 找到敏感文件(.git/.envrobots.txt
  • 识别备份文件(backup.zipdb.sql

现成的工具有很多(dirb、gobuster、ffuf),但自己写一遍才能真正理解它的原理。


第一版:单线程,10 条路径

最开始我写了一个极其简单的版本:

importrequests TARGET="http://example.com"WORDLIST=["admin","login","config","backup","phpinfo.php"]forpathinWORDLIST:url=TARGET+"/"+path r=requests.get(url)print(f"[{r.status_code}]{url}")

就跑通了 10 条路径。这一步虽然简单,但让我理解了核心逻辑:拼 URL → 发请求 → 看状态码


第二版:并发 + 字典文件

10 条路径单线程跑还行,但要跑几百上千条就太慢了。我加上了ThreadPoolExecutor

fromconcurrent.futuresimportThreadPoolExecutor,as_completedwithThreadPoolExecutor(max_workers=20)asexecutor:futures={executor.submit(check_path,path):pathforpathinpaths}forfutureinas_completed(futures):# 处理结果

同时把字典从代码里抽出来,单独放到common.txt里。我从网上收集了 351 条常见的路径,覆盖了后台路径、敏感文件、备份文件、API 端点等。

这一版的提升很明显:351 条路径,20 线程并发,跑完不到 2 秒


第三版:命令行参数

为了让工具更像一个正经的 CLI 工具,我加了argparse支持:

python dirbuster.py-uhttp://target.com-wcommon.txt-t50-oresult.txt

参数设计参考了 gobuster 和 dirb 的习惯,让用过类似工具的人能立刻上手。

这一版我还加了:

  • 响应大小显示
  • 扫描耗时计时
  • 进度提示(每 200 条输出一次)

第四版:状态码筛选

默认情况下,工具会显示 200/301/302/401/403/500 等状态码。但有时候我只想看 200 的页面(确认可访问),或者只看 403 的目录(可能隐藏了内容),于是加上了-s参数:

python dirbuster.py-uhttp://target.com-wcommon.txt-s200,403

做这一步时遇到了一个小坑:302 重定向到登录页的路径要不要显示?我最终决定默认显示,因为重定向也说明这个路径存在,只是需要登录或认证。


第五版:递归扫描

这是最复杂的一版。当扫到一个目录(比如admin/config/)时,自动把它作为新目标继续往下扫。

defis_directory(code,path):# 判断路径是不是目录# 403 或 200 且以 / 结尾 → 可能是目录

一开始有个 bug:.htaccess返回 403 被当成目录递归了,结果多扫了几百次无意义的请求。后来加了文件扩展名黑名单,才算修好。


第六版:异常处理

之前的版本有个问题:如果目标超时或连接拒绝,程序不会提示原因。我加上了详细的错误分类:

  • 连接超时 vs 读取超时
  • 连接拒绝 vs 其他错误
  • SSL 错误
  • Ctrl+C 优雅中断

现在跑完会显示统计信息:

[*] 扫描结束! 耗时: 2.0s [*] 成功请求: 1404 [*] 超时: 0 [*] 发现路径: 16 个

遇到的问题汇总

问题原因解决
全部报连接拒绝Apache 没启动检查 phpstudy 状态
扫出奇怪的路径.htaccess被当成目录加文件扩展名黑名单
CSV 格式乱码编码问题统一用 UTF-8
线程开太多被封目标有限制-t参数控制

收获

写这个工具最大的收获不是代码本身,而是对目录扫描这个操作的理解深了一层:

  1. 状态码的意义— 200 不一定安全,404 不一定不存在(可能有自定义 404 页面)
  2. 并发与效率— 单线程 vs 多线程的区别,以及对目标服务器的压力
  3. 字典的重要性— 工具有多强取决于字典有多好
  4. 异常处理— 网络安全工具必须能够应对各种网络状况

下一步想做的事

  • 支持 HTML 报告输出
  • 集成 more 字典(如 dirb 的 common.txt、big.txt)
  • 自动识别自定义 404 页面(避免误报)
  • 支持代理(配合 BurpSuite)

代码与链接

  • GitHub: https://github.com/boz-ling/dirbuster
  • 字典文件:common.txt(351 条路径)
http://www.jsqmd.com/news/903887/

相关文章:

  • Adobe-GenP 3.0:5分钟破解Adobe全家桶的终极解决方案
  • 戴尔G15终极散热控制指南:轻量级开源替代方案tcc-g15完全教程 [特殊字符]
  • 2026年Q2耐擦洗墙面涂料厂家地址排行一览:防潮防霉墙面施工、全屋墙面找平、刷墙面大白找谁、卧室艺术漆墙面、嘉兴艺术漆选择指南 - 优质品牌商家
  • 2026 火眼审阅智能审查深度测评:3 类合同实测,真能替代人工审合同吗? - 资讯焦点
  • 添加.local到pkg-config配置
  • 水基导电聚合物枝晶技术:材料、机理与应用
  • 盖狮中式菓子|亲子家庭健康零食新选,全家共享文化“味” - 博客万
  • AlwaysOnTop:告别窗口切换烦恼,让重要信息始终在眼前
  • 用RDKit的摩根指纹做分子相似性分析:从SMILES到相似度矩阵的完整流程
  • 大同黄金回收选哪家靠谱 这份五月实测指南给你答案 - 专业黄金回收
  • 蓝牙音箱DIY焊接组装全攻略:从PCB到成品的电子制作实践
  • 邮件系统国密加密改造,到底该怎么做?(附真实案例)
  • 中石化加油卡回收一般几折?2026最新面值折扣对照表 - 可可收公众号
  • 2026韩国F2/F5签证办理优选|深度测评:口碑TOP5移民机构全解析 - 资讯焦点
  • AI搜索优化标杆,助力山东企业抢占AI流量入口
  • 基于BLE与ESP32-C3的智能门铃DIY:告别RF干扰,实现低功耗与远程监控
  • 3步解密网易云音乐NCM格式:重获音乐自由的开源方案
  • Agent设计模式
  • 网站SEO优化要注意什么?AI写文章不被惩罚的2个细节
  • 2026年6月浪琴中国区售后全面升级|最新官方维修服务探测报告及售后指南 - 浪琴服务中心
  • Windows NAS进阶玩法:除了存电影,如何用它搭建私人远程办公与媒体库(Jellyfin+内网穿透实战)
  • 论文党必看!书匠策AI的免费查重功能到底有多香?手把手带你搞定
  • 老旧厂房升级管道系统,2026哪些工程公司能兼顾效率与安全? - 品牌2025
  • 2026年腻子品牌推荐需补充权威数据支撑:湖州艺术漆/耐擦洗墙面涂料/腻子品牌推荐/腻子施工服务/刷墙面大白找谁/选择指南 - 优质品牌商家
  • MON51调试器I2C通信改造与嵌入式开发实践
  • 阿里 AgenUI 开源库前后端实战教程 —— Day 2:后端接入 Spring AI Alibaba 鸿蒙端引入 AgenUI
  • Windows环境下RTL1090与adsbscope联调避坑指南:解决端口31011与地图定位问题
  • 广告监管升级,赣州实体店AI获客的正确姿势是什么? - 优家闲谈
  • 【ChatGPT影评写作黄金公式】:豆瓣9.0+高赞影评的5步生成法(附23个真实失效prompt避坑清单)
  • AI 智能体培训后可以做什么工作?就业方向全景图