| name | katana |
| description | Auth/lab ref: ProjectDiscovery web crawler for endpoint and JS-endpoint discovery. |
| license | MIT |
| compatibility | Linux/macOS/Windows; Go binary; Targets: HTTP/HTTPS web applications. |
| metadata | {"author":"AeonDave","version":"1.0"} |
Katana
ProjectDiscovery web crawler — endpoints, JS paths, XHR calls, and API routes from modern web apps.
Quick start
katana -u https://target.com
katana -u https://target.com -jc
katana -u https://target.com -hl
katana -u https://target.com -jc -o endpoints.txt
katana -list urls.txt -jc -o all_endpoints.txt
Crawling scope
katana -u https://target.com -jc
katana -u https://target.com -jc -cs target.com
katana -u https://target.com -jc -d 5
katana -u https://target.com -jc -c 20 -p 20
katana -u https://target.com -jc -rl 50
katana -u https://target.com -d 3 -jc -kf robotstxt -c 10 -p 10 -rl 50 -timeout 10 -retry 1 -ef png,jpg,jpeg,gif,svg,css,woff,woff2,ttf,eot,map -silent -j -o katana.jsonl
JS endpoint extraction
Katana's JS crawling (-jc) uses JSLuice and regex patterns to extract endpoints from JavaScript files. This is the primary value over generic crawlers.
katana -u https://target.com -jc -xhr
katana -u https://target.com -d 5 -jc -jsl -kf all -c 10 -p 10 -rl 50 -o katana_urls.txt
katana -u https://target.com -jc | grep "\.js$" > js_files.txt
katana -u https://target.com -jc | grep -v "\.(png|jpg|gif|svg|ico|woff|css)$"
katana -u https://target.com -jc | grep -E "(/api/|/v[0-9]+/|/graphql|/rest/)"
Headless mode (SPA/React/Angular)
Standard crawler misses dynamically rendered content. Use headless for apps that require JavaScript execution.
katana -u https://target.com -hl -jc -d 3
katana -u https://target.com -hl -jc -nos
katana -u https://target.com -hl -sc -nos -xhr -j -o katana_headless.jsonl
katana -u https://target.com -hl -H "Cookie: session=<token>" -jc
Authentication and custom headers
katana -u https://api.target.com -H "Authorization: Bearer <token>" -jc
katana -u https://target.com -H "X-Api-Key: abc123" -H "Accept: application/json" -jc
katana -u https://target.com -X POST -H "Content-Type: application/json" \
-body '{"email":"test@test.com","password":"test"}' -jc
Pipeline integration
Katana integrates with the ProjectDiscovery ecosystem:
httpx -l live_hosts.txt -silent | katana -jc -o all_endpoints.txt
subfinder -d target.com -silent | httpx -silent | katana -jc -o endpoints.txt
katana -u https://target.com -jc -o endpoints.txt
nuclei -l endpoints.txt -t exposures/ -t vulnerabilities/
Output and filtering
katana -u https://target.com -jc -jsonl -o katana.jsonl
katana -u https://target.com -kf all -d 3 -silent
katana -u https://target.com -jc -ef png,jpg,jpeg,gif,svg,css,woff,woff2,ttf,eot,map
katana -u https://target.com -jc -fsc 200,301,302
katana -u https://target.com -jc | sort -u > unique_endpoints.txt
katana -u https://target.com -jc | grep "?" | cut -d"?" -f2 | tr "&" "\n" | cut -d"=" -f1 | sort -u
OPSEC notes
- Standard mode: one request per link — low noise but misses JS-rendered content.
- Headless mode: launches a real browser — higher resource use, slightly more detectable.
- Use
-rl rate limiting on sensitive or production scopes.
- Respect
robots.txt boundaries unless explicitly authorized to ignore them: -cr to crawl despite robots.
When to use vs. other crawlers
| Scenario | Tool |
|---|
| Modern SPA/React/Angular | katana -headless |
| API endpoint extraction from JS | katana -jc |
| Fast directory brute-force | feroxbuster |
| Historical URL collection | gau |
| Fast link extraction from static HTML | hakrawler |