dirsearch
v0.5.0 open-sourceThe section your link pointed to isn't on dirsearch's page any more, so we've brought you to the top.
dirsearch is an advanced web path brute-forcer that discovers paths on web servers using wordlists.
python3 dirsearch.py -u https://target --wordlist-categories aggressive
python3 dirsearch.py -u https://target --wordlist-status --wordlist-max-size 500000
python3 dirsearch.py -e json -u https://api.target --wordlist-max-size 200000 --wordlist-categories all
import requests
from dirsearch import DirsearchFuzzer, FuzzerConfig
def session_factory():
session = requests.Session()
session.headers.update({"authorization": "Bearer TOKEN"})
session.proxies.update({"https": "http://127.0.0.1:8080"})
return session
results = DirsearchFuzzer(
FuzzerConfig(
url="https://example.com",
wordlist=["admin", "api/users"],
session_factory=session_factory,
include_status_codes={200, 401, 403},
)
).run()
for r in results:
print(r.status, r.url)
from dirsearch import DirsearchFuzzer, FuzzerConfig, Wordlist, WordlistTemplate, WordlistLimitError
template = WordlistTemplate.from_builtin(
"api",
placeholders={"SUBJECT": ["users", "orders", "invoices", "health"]},
)
try:
wordlist = Wordlist.from_template(template, extensions=("json",), max_entries=10_000)
except WordlistLimitError:
raise RuntimeError("Template too broad — narrow subjects or extensions")
results = DirsearchFuzzer(
FuzzerConfig(
url="https://api.example.com",
wordlist=wordlist,
include_status_codes={200, 204, 401, 403},
)
).run()
from dirsearch import DirsearchFuzzer, FuzzerConfig
config = FuzzerConfig.from_raw_request(
raw_file="tmp/request.txt",
scheme="https",
wordlist=["admin", "api/users", "api/orders"],
include_status_codes={200, 401, 403},
)
results = DirsearchFuzzer(config).run()
for r in results:
print(r.status, r.url)
python3 dirsearch.py -s sessions/my_session
python3 dirsearch.py --list-sessions --sessions-dir /path/to/sessions
dirsearch -u https://example.com -w /usr/share/wordlists/dirb/common.txt --save-response ./responses/
dirsearch -u https://example.com -w /usr/share/wordlists/dirb/common.txt --save-response-jsonl ./results.jsonl
dirsearch -hh
dirsearch -u https://example.com --request-backend native --wordlist-backend native
dirsearch -u https://example.com --wordlist-categories php,infrastructure
dirsearch --list-sessions
from dirsearch import DirsearchFuzzer, FuzzerConfig, Wordlist
# In config.ini
mysql-url = mysql://scanner:secret@dbhost/dirsearch
output-sql-table = {scheme}_{host}:{port}
output-formats = plain
# In config.ini
filter-mode = or
filter-size = 0
filter-regex = "not found"
matcher-mode = or
match-size = 100-2000
match-status = 200-299,401,403
# In config.ini
output-formats = json
output-file = reports/{host}/{scheme}_{port}.{extension}
skip-on-status = 429
target-max-time = 300
# config.ini
output-formats = html
output-file = reports/{host}/{date}.{extension}
postgres-url = postgres://user:password@localhost/dirsearch
# config.ini
matcher-mode = or
match-size = 100-2000
match-words = 10-100
filter-size = 0
# config.ini
skip-on-status = 429
target-max-time = 120
auto-calibration = True
dirsearch -u https://target -e php,html,js --request-backend native --wordlist-backend native -w /path/to/wordlist
dirsearch -u https://target -e php,js --wordlist-categories php,node
from lib.core.api import DirsearchFuzzer, FuzzerConfig, FuzzerResult, Wordlist
dirsearch -u https://target.com -f sqlite --output-dir ./reports
dirsearch -t '192.168.1.0/24' --cidr
dirsearch -u https://example.com -f csv --status-codes-range '200-299'
dirsearch -u https://example.com --socks-proxy socks5://127.0.0.1:9050 --headers-file headers.txt
dirsearch -u https://example.com/admin --http-method POST -d 'key=value' --include-status-codes 200,404
dirsearch -u https://example.com --prefix '/api/' --suffix '.json' --exclude-extensions php,aspx
dirsearch -u https://example.com --clean-view --minimal-response-length 100 --maximal-response-length 500
Summary
dirsearch is an open-source, GPL-licensed command-line tool that brute-forces web paths and directories on a target URL using wordlists, filtering results by status, size, word count, or regex. It runs as a script or installed package on a laptop, cloning from GitHub or installing via pip, with prebuilt binaries and Docker images also available, and it now exposes a Python API for embeddingembeddingLists of numbers a model produces to represent the meaning of text, images or code, so similar items sit close together. They power semantic search and RAG. scans into other tooling. Its wordlist categories cover specific stacks like PHP, Python, Java, .NET, and Node, which points to penetration testers and red teamers doing web reconnaissance rather than continuous monitoring. It sits alongside other web-fuzzing tools such as ffuf and wfuzz, whose match/filter conventions its own release notes say it borrows. First committed in 2013, it has 121 contributors and 127 commits in the past year, with its latest release 84 days ago.
dirsearch is an advanced web path brute-forcer that discovers paths on web servers using wordlists.
How dirsearch helps
What hidden files and directories exist on this web server that nothing links to?
brute-forces the target URL against a wordlist and reports every path that returns a live response, revealing endpoints no crawler would find
Which of these discovered paths are actually worth investigating versus noise from a custom error page?
filters results by status code, response size, word count, or a regex pattern so near-identical junk responses can be excluded from the results
Is this target running PHP, Node, Java, or .NET, and what would I look for on each?
applies wordlist categories built for specific stacks, so the brute-force targets paths and file extensions typical of that framework instead of a generic list
Did a recent change on this server expose or remove any paths since the last time I scanned it?
writes results to a report file whose path and table names can carry variables, letting successive scans against the same target be compared
Are there whole subtrees on this server I'm missing by only checking the paths I thought of?
recurses into any directory it finds live, re-running the wordlist inside each discovered folder up to a configurable depth
Is a slow or unstable target hiding real findings behind connection errors and timeouts?
classifies SSL and network errors separately from genuine misses and can calibrate against wildcard responses so unstable hosts don't get reported as full of open paths
Languages
Command line
No command matches.
| option | found in | since | description |
|---|
Values are placeholders taken from each option’s declared default. Nothing is executed here — the output shown is a recording of a run that already happened.
Score card
-
Shipping velocity releases a month, last 12 months
-
Documentation quality release-notes rubric, 0–100
-
Breaking-change discipline how rarely a release breaks users, and notice given
-
Maintenance risk quiet time against its own cadence, maintainers
-
Innovation & surface new capabilities, API and MCP surface
- Community health
-
Contributor trend distinct committers, this year against last
-
Maintainer concentration bus factor now against a year ago
-
Issue backlog trend issues closed per issue opened, 12 months
-
Responsiveness median time to a maintainer’s first reply
Nine scores for dirsearch, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.
Score cards are part of every paid plan.
See plans → Already subscribed? Sign in →Trajectory
Blank means never measured; nothing here is a filled-in zero.
Peer standings are included with Researcher and Business. See how this tool ranks against its competitors, using data we don't publish anywhere else.
See plans →Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.
How this is scored
- Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
- Documentation quality — the release-notes rubric published on the analytics page, unchanged.
- Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
- Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
- Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
- Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
- Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
- Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.
Release-note detail over time
See how much detail dirsearch puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.
Checking release-note history…
Releases
20 entries
No entries match these filters.
- October 20262
- August 202611
- July 20262
- October 20221
- September 20211
- December 20201
- September 20201
- July 20141
Project health
Issue, contributor and maintainer activity in maurosoria/dirsearch, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.
- Contributors 7 −1 vs prior 12 months
- Maintainers 1 +2 joined · −3 left, last 12 months
- Bus factor 1 committers behind half the commits
- Community-filed 68% of issues opened, last 12 months
- Median time to close 128 days first maintainer reply 37 hours
- Open backlog 14 of 600 issues ever filed
- Issues opened / month 1 · 0 communitymaintainers
- Open backlog 14
- Contributors / month 1
- Commits / month 106
- Stars 14,744
- bugs 24%
- features 36%
- questions 12%
- other 28%
Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this
Articles
2 articles · updated Nov 4, 2026Where dirsearch turns up in what others publish: how-tos, attack reports that name it, and incident write-ups. A row says why it is here and quotes where the article names it; the link goes to the publisher.
Tutorials & guides 2
-
Comprehensive Guide on Dirsearch (Part 2)
This is the second instalment of our series comprehensive guide on dirsearch.
2 more quotes
In the first part of this series, we discussed some basic commands on dirsearch.
In this part, we will try to explore some more options of this command-line tool, dirsearch.
-
Comprehensive Guide on Dirsearch
In this article, we will learn how we can use Dirsearch.
2 more quotes
Table of Content Introduction to Dirsearch Setup Target URL Save Output in Different Formats No Colour Quite mode Normal scan vs Recursive scan Post method Delay request Version scan Introduction to Dirsearch Dirsearch…
Dirsearch is a strong competitor in the directory scanner arena, with features such as multi-threading, proxy support, request latency, user agent randomization, and support for multiple extensions.
Libraries its release ships
What its latest release locks, checked against known advisories.None of its release's images build from a lockfile we can read.
Add the badge to your README
Maintain this project? The badge links readers straight to this page, so they can follow every release here.