Dirble 是一款适用于 Windows 和 Linux 的网站目录扫描工具。它旨在快速运行且易于使用。
从 预编译二进制文件 下载适用于 Linux、Windows 或 Mac 的版本,或使用 Cargo 编译源代码,然后在终端中运行。Dirble 默认使用的字典文件是与可执行文件同目录下的 dirble_wordlist.txt。
在 BlackArch 中可使用 sudo pacman -S dirble 安装。
还有一个 Docker 镜像,可如下运行:
docker run --rm -t isona/dirble [dirble 参数]
帮助文本可通过 dirble --help 显示,也可在 GitHub 维基上找到:https://github.com/nccgroup/dirble/wiki/Help-Text
使用当前目录下的默认 dirble_wordlist.txt 对某个网站进行扫描:
dirble [地址]
使用不同的字典文件并包含 .php 和 .html 扩展名:
dirble [地址] -w example_wordlist.txt -x .php,.html
启用可列出目录的抓取:
dirble [地址] --scrape-listable
提供扩展名列表和主机列表:
dirble [地址] -X wordlists/web.lst -U hostlist.txt
通过命令行提供多个待扫描主机:
dirble [地址] -u [地址] -u [地址]
以 Gobuster 默认风格运行并启用多线程,禁用递归,用 10 个线程扫描主目录:
dirble [地址] --max-threads 10 --wordlist-split 10 -r
要在当前平台上构建,请确保已安装 Cargo,然后运行 cargo build --release。或者,运行 make 将以 release 模式构建二进制文件(内部运行 cargo build --release)。
为了交叉编译到 32 位和 64 位的 Linux 及 Windows 目标平台,提供了一个便捷的 makefile。make release 将使用 cross 为所有四个目标构建。这依赖于已安装 cross 和 docker(cargo install cross)。
以下图表是针对一个延迟为 5ms、丢包率为 1% 的测试服务器,使用 Hyperfine 运行每个工具生成的。(Gobuster 因不支持递归而省略)。

Dirble 根据服务器返回的响应码来检测文件。其行为可大致按响应码类型分类。
200:路径存在且有效301, 302:重定向;报告状态码、大小及 Location 头部404:未找到;默认情况下不报告这些响应+ [url] (CODE:[code]|SIZE:[size])如果一个路径在请求 [url](不带尾部斜杠)时返回 301 或 302 重定向到 [url]/(带尾部斜杠),则该路径被归类为目录。此类结果以 D 前缀报告,若启用递归,则会加入扫描队列。
此方法不依赖于重定向目标是否存在或可访问,因此会单独发送请求以确定该目录的响应码和大小。
可列出目录通过检查 url/ 的内容来检测:如果返回 200 响应码,且响应正文包含 "parent directory"、"up to " 或 "directory listing for"(不区分大小写),则很可能是可列出目录。如果启用了 --scrape-listable,则会从目录列表中解析出 URL(忽略排序链接或范围外的链接),并将尾部带斜杠的 URL 加入扫描队列。可列出目录在输出中以 L 前缀显示。
Dirble 的多线程行为基于字典和作业的概念。作业是可以独立于其他任务运行的任何任务,例如请求一系列 URL。字典是一组具有已定义转换规则的单词列表,例如列表 {admin, config, shop} 加上转换规则 append ".php" 就构成了一个字典实例。
为了进一步提升性能,我们引入了字典拆分的概念。这是指将一个字典实例(即带有转换规则的单词)拆分成多个作业,每个作业负责列表的一部分。每个字典被拆分成交错部分的数量由 --wordlist-split 选项定义(默认值为 3)。
每当检测到一个目录(且递归启用时),就会为每个拆分后的字典(带转换规则)创建新作业,并添加到中央作业队列中。
最大并发任务数由 --max-threads 参数定义,Dirble 会在作业加入队列时启动它们,直至达到此限制。每当一个作业完成时(即一个拆分后的字典耗尽),Dirble 会从队列中取出下一个作业并启动它。
基于 GPL v3.0 许可协议发布,更多信息请参阅 LICENSE 文件。