ββββββββ ββββββ ββββββββββββββββββββββββ ββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββ ββββββββββββββββ βββ βββ ββββββββββββββ
ββββββ ββββββββββββββββ βββ βββ ββββββββββββββ
βββ βββ βββββββββββ βββ ββββββββββββββ βββ
βββ βββ βββββββββββ βββ βββββββ ββββββ βββ
The fastest directory brute forcer on GitHub! π₯
Built with Elixir's legendary concurrency model, FastDir delivers unmatched performance with beautiful real-time progress tracking and intelligent load balancing.
By lgdev2002 - Co-CEO BackTrackSec
git clone https://github.com/devlg2002/fastdir.git && cd fastdir && make install- Features
- Performance Benchmarks
- Quick Start
- Usage Examples
- Installation Options
- Configuration
- Contributing
- License
- Massive Concurrency: Thousands of simultaneous requests using Elixir's Actor model
- Connection Pooling: Intelligent HTTP connection reuse
- Smart Load Balancing: Automatic work distribution across workers
- Memory Efficient: Handles massive wordlists without memory explosion
- Real-time Progress Bar: Visual progress with ETA calculation
- Live Metrics: Requests/second, elapsed time, estimated completion
- Verbose Mode: Detailed request/response logging per worker
- Color-coded Results: Status code highlighting for quick analysis
- Remote Wordlists: Direct loading from GitHub/URLs
- Multiple Extensions: Automatic extension testing
- Recursive Scanning: Deep directory traversal
- Smart Retries: Configurable retry logic with backoff
- Custom Headers: WAF bypassing capabilities
- Output Formats: Multiple output options
| Tool | Requests/sec | Concurrency | Memory Usage |
|---|---|---|---|
| FastDir | 1,200+ | 200 | 45MB |
| Dirb | 50 | 20 | 15MB |
| Gobuster | 300 | 50 | 85MB |
| FFuF | 800 | 100 | 120MB |
| Dirsearch | 400 | 80 | 95MB |
Benchmarked on: Intel i7-10700K, 32GB RAM, 1Gbps connection
# Basic directory scan
fastdir -u https://target.com -w /path/to/wordlist.txt
# High-performance scan with 200 threads
fastdir -u https://target.com -w common.txt -t 200
# Remote wordlist with extensions
fastdir -u https://target.com \
-w https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/big.txt \
-x php,html,js,txt -t 150π [ββββββββββββββββββββββββββββββββββββββββ] 67.3% (13,456/20,000) | β‘ 847.2 req/s | β±οΈ 15.9s | π ETA: 7.8s
# Complete web app audit
fastdir -u https://webapp.com \
-w https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/raft-large-directories.txt \
-x php,asp,aspx,jsp,html,js,txt,xml,json \
-t 100 \
-c 200,204,301,302,307,403,500 \
-r \
-o webapp_scan.txt# Low and slow with custom headers
fastdir -u https://target.com \
-w medium.txt \
-t 10 \
-d 1000 \
-H "X-Forwarded-For: 127.0.0.1" \
-H "X-Real-IP: 127.0.0.1" \
-a "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"# Detailed request/response logging
fastdir -u https://target.com \
-w small.txt \
-t 20 \
-v \
--timeout 30# Pull and run
docker pull lgdev2002/fastdir
docker run --rm lgdev2002/fastdir -u https://target.com -w common.txt
# Build locally
git clone https://github.com/devlg2002/fastdir.git
cd fastdir
docker build -t fastdir .- Elixir 1.14+
- Erlang/OTP 25+
git clone https://github.com/devlg2002/fastdir.git
cd fastdir
make installgit clone https://github.com/devlg2002/fastdir.git
cd fastdir
mix deps.get
mix escript.build
./fastdir --help| Option | Short | Description | Default |
|---|---|---|---|
--url |
-u |
Target URL (required) | - |
--wordlist |
-w |
Wordlist path/URL (required) | - |
--threads |
-t |
Concurrent threads | 100 |
--status-codes |
-c |
Status codes to show | 200,204,301,302,307,308,401,403,405 |
--extensions |
-x |
Extensions to test | - |
--recursive |
-r |
Recursive scanning | false |
--delay |
-d |
Delay between requests (ms) | 0 |
--user-agent |
-a |
Custom User-Agent | FastDir/1.0 |
--headers |
-H |
Custom headers | - |
--output |
-o |
Output file | - |
--silent |
-s |
Silent mode | false |
--verbose |
-v |
Verbose logging | false |
--timeout |
Request timeout (seconds) | 10 | |
--max-retries |
Maximum retries | 3 | |
--follow-redirects |
Follow redirects | false |
export FASTDIR_THREADS=200
export FASTDIR_USER_AGENT="Custom-Agent/1.0"
export FASTDIR_TIMEOUT=15[200] 1247B - https://target.com/admin/
[301] 178B - https://target.com/images/
[403] 1094B - https://target.com/config/
[200] 5632B - https://target.com/login.phpπ [Worker-23] [14:32:18] Starting: https://target.com/admin/
β
[Worker-23] [14:32:18] 152ms - 200 - https://target.com/admin/
π [Worker-45] [14:32:18] Starting: https://target.com/config.php
β οΈ [Worker-45] [14:32:18] 89ms - 403 - https://target.com/config.phpπ― Scan completed!
π Total requests: 20,000
β±οΈ Total time: 23.7s
π Average rate: 844.3 req/s
πΎ Peak rate: 1013.2 req/s# Generate custom wordlist
curl -s https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/common.txt > custom.txt
echo -e "admin\npanel\ndashboard" >> custom.txt
# Use with FastDir
fastdir -u https://target.com -w custom.txt# Scan multiple targets
for target in target1.com target2.com target3.com; do
fastdir -u "https://$target" -w common.txt -o "${target}_results.txt"
done# Pipe to other tools
fastdir -u https://target.com -w common.txt -s | grep "200" | awk '{print $4}' | httpx- Rate Limiting: Use
-dflag to add delays between requests - User-Agent: Customize with
-ato avoid detection - Headers: Add custom headers with
-Hfor evasion - Threads: Reduce thread count for stealthy scanning
- Timeouts: Increase timeout for slow targets
We welcome contributions! Please see our Contributing Guidelines.
git clone https://github.com/devlg2002/fastdir.git
cd fastdir
mix deps.get
mix test
mix escript.buildPlease use our Issue Template when reporting bugs.
This project is licensed under the MIT License - see the LICENSE file for details.
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
- π§ Contact: lgdev2002@backtracksec.com
Made with β€οΈ by BackTrackSec
β Star this repo β’ π Report Bug β’ π Request Feature
fastdir/
βββ π README.md
βββ π LICENSE
βββ π CONTRIBUTING.md
βββ π Dockerfile
βββ π docker-compose.yml
βββ π Makefile
βββ π mix.exs
βββ π mix.lock
βββ π install.sh
βββ π lib/
β βββ π fastdir.ex
β βββ π fastdir/
β β βββ π cli.ex
β β βββ π scanner.ex
β β βββ π worker.ex
βββ π test/
β βββ π fastdir_test.exs
β βββ π test_helper.exs
βββ π .github/
β βββ π workflows/
β β βββ π ci.yml
β β βββ π docker.yml
β β βββ π release.yml
β βββ π ISSUE_TEMPLATE.md
β βββ π PULL_REQUEST_TEMPLATE.md
βββ π wordlists/
β βββ π common.txt
β βββ π medium.txt
β βββ π small.txt
βββ π examples/
β βββ π basic_scan.sh
β βββ π advanced_scan.sh
β βββ π stealth_scan.sh
βββ π docs/
βββ π INSTALLATION.md
βββ π USAGE.md
βββ π PERFORMANCE.md
FROM elixir:1.15-alpine AS builder
WORKDIR /app
# Install build dependencies
RUN apk add --no-cache build-base git
# Copy mix files
COPY mix.exs mix.lock ./
RUN mix local.hex --force && mix local.rebar --force
RUN mix deps.get --only prod
RUN mix deps.compile
# Copy source code
COPY lib lib
COPY README.md .
# Build release
RUN mix escript.build
# Production image
FROM alpine:3.18
RUN apk add --no-cache ncurses-libs openssl
WORKDIR /app
# Copy binary
COPY --from=builder /app/fastdir ./
# Create wordlists directory
RUN mkdir -p /wordlists /output
# Download common wordlists
ADD https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/common.txt /wordlists/common.txt
ADD https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/directory-list-2.3-small.txt /wordlists/small.txt
ADD https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/directory-list-2.3-medium.txt /wordlists/medium.txt
# Set permissions
RUN chmod +x /app/fastdir
ENTRYPOINT ["/app/fastdir"]
CMD ["--help"]#!/bin/bash
set -e
echo "π Installing FastDir - Ultra Fast Directory Brute Forcer"
echo "By lgdev2002 - Co-CEO BackTrackSec"
echo ""
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo "β Docker is required but not installed."
echo "Please install Docker first: https://docs.docker.com/get-docker/"
exit 1
fi
echo "π¦ Pulling latest FastDir image..."
docker pull lgdev2002/fastdir:latest
echo "π Creating fastdir command alias..."
# Create wrapper script
INSTALL_DIR="/usr/local/bin"
SCRIPT_PATH="$INSTALL_DIR/fastdir"
sudo tee "$SCRIPT_PATH" > /dev/null <<EOF
#!/bin/bash
docker run --rm -v \$(pwd):/output lgdev2002/fastdir:latest "\$@"
EOF
sudo chmod +x "$SCRIPT_PATH"
echo "β
FastDir installed successfully!"
echo ""
echo "π― Usage examples:"
echo " fastdir -u https://target.com -w /wordlists/common.txt"
echo " fastdir -u https://target.com -w https://example.com/wordlist.txt -t 200"
echo ""
echo "π Documentation: https://github.com/lgdev2002/fastdir"
echo "π Issues: https://github.com/lgdev2002/fastdir/issues".PHONY: build install test clean docker docker-push help
# Variables
APP_NAME = fastdir
DOCKER_IMAGE = lgdev2002/fastdir
VERSION = 1.0.0
help: ## Show this help
@echo "FastDir - Ultra Fast Directory Brute Forcer"
@echo "Available commands:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
build: ## Build the application
@echo "π¨ Building FastDir..."
mix deps.get
mix escript.build
@echo "β
Build complete!"
install: build ## Install FastDir locally
@echo "π¦ Installing FastDir..."
sudo cp fastdir /usr/local/bin/
sudo chmod +x /usr/local/bin/fastdir
@echo "β
FastDir installed to /usr/local/bin/fastdir"
test: ## Run tests
@echo "π§ͺ Running tests..."
mix test
clean: ## Clean build artifacts
@echo "π§Ή Cleaning..."
mix clean
rm -f fastdir
docker: ## Build Docker image
@echo "π³ Building Docker image..."
docker build -t $(DOCKER_IMAGE):$(VERSION) .
docker tag $(DOCKER_IMAGE):$(VERSION) $(DOCKER_IMAGE):latest
@echo "β
Docker image built!"
docker-push: docker ## Push Docker image
@echo "π€ Pushing Docker image..."
docker push $(DOCKER_IMAGE):$(VERSION)
docker push $(DOCKER_IMAGE):latest
@echo "β
Docker image pushed!"
docker-run: ## Run Docker container
docker run --rm $(DOCKER_IMAGE):latest --help
release: test docker ## Create release
@echo "π Creating release $(VERSION)..."
git tag v$(VERSION)
git push origin v$(VERSION)
@echo "β
Release $(VERSION) created!"
benchmark: build ## Run performance benchmarks
@echo "β‘ Running benchmarks..."
./scripts/benchmark.sh# .github/workflows/ci.yml
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
name: Test
runs-on: ubuntu-latest
strategy:
matrix:
elixir: [1.14, 1.15]
otp: [25, 26]
steps:
- uses: actions/checkout@v3
- name: Setup Elixir
uses: erlef/setup-beam@v1
with:
elixir-version: ${{ matrix.elixir }}
otp-version: ${{ matrix.otp }}
- name: Cache deps
uses: actions/cache@v3
with:
path: deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
- name: Install dependencies
run: mix deps.get
- name: Run tests
run: mix test
- name: Build escript
run: mix escript.build
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: fastdir-${{ matrix.elixir }}-${{ matrix.otp }}
path: fastdir
docker:
name: Docker Build
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
lgdev2002/fastdir:latest
lgdev2002/fastdir:${{ github.sha }}