Open-source network monitoring for homelabs. Argus automatically discovers all devices on your network, detects vulnerabilities, and alerts you to changes - all running locally on Docker or bare metal.
Your home network is growing. Smart TVs, IoT devices, phones, computers - it's hard to keep track of what's connected. Argus gives you visibility and control:
- Know what's connected - See every device on your network with detailed information
- Spot intruders - Get alerts when new devices appear
- Find vulnerabilities - Identify risky open ports and known CVEs
- Track changes - Monitor your network over time with scan history
- Homelab enthusiasts - Get visibility into your self-hosted infrastructure
- Privacy-conscious users - All data stays local, no cloud required
- IoT device owners - Monitor smart home devices for security risks
- Small office/home office - Inventory and secure your network without enterprise tools
- Automatic device detection using nmap
- MAC address, hostname, and vendor identification
- OS fingerprinting to identify device types
- Multiple scan profiles (quick, normal, intensive)
- Risk scoring based on open ports and services
- CVE vulnerability matching for common services (SSH, SMB, RDP, etc.)
- Threat severity classification (Critical, High, Medium, Low)
- Actionable remediation recommendations
- Custom labels and notes for devices
- Mark devices as trusted to reduce noise
- Organize devices by zones (e.g., IoT, Servers, Workstations)
- Persistent tracking across scans via MAC address
- New device alerts
- Port open/close notifications
- Service change detection
- Historical comparison between scans
- Clean, responsive web dashboard
- Dark mode support
- Real-time scan progress
- Mobile-friendly tables
- Interactive Topology Map - See your network structure with device connections
- Risk Heat Map - Visual overview of device risk levels
- Traffic Analysis - Monitor bandwidth usage per device (requires UniFi)
- Wireless Insights - Signal strength and AP distribution (requires UniFi)
- DNS Analytics - Query patterns and blocked domains (requires Pi-hole/AdGuard)
- Port Matrix - See all open ports across devices at a glance
- Timeline - Track network changes over time
- UniFi Network - Pull device details, traffic stats, and wireless data
- Pi-hole - DNS query analytics and blocking statistics
- AdGuard Home - Alternative DNS filtering integration
- CVE Database - Match services against known vulnerabilities
- Environment-based secrets - All sensitive data (passwords, API keys) stored as environment variables
- Command injection protection - Strict input validation for all user-provided parameters
- Optimized API authentication - 100x faster key verification with DoS protection
- Secure session management - Production-grade session cookie signing
- Session-based authentication - Secure user sessions with configurable expiration
- API key support - Programmatic access with prefix-based lookup
- Protected endpoints - Authentication required for all sensitive operations
- Audit logging - Track all security-relevant actions
📋 Upgrading to v2.0? See docs/SECURITY_MIGRATION.md for migration instructions.
# Create directory and download files
mkdir argus && cd argus
curl -O https://raw.githubusercontent.com/rangulvers/argus/main/docker-compose.yml
curl -o config.yaml https://raw.githubusercontent.com/rangulvers/argus/main/config.yaml.example
# Edit config.yaml - set your network (e.g., 192.168.1.0/24)
nano config.yaml
# Start Argus
docker compose up -dAccess the web UI at http://localhost:8080
On first visit, you'll be prompted to create an admin account.
docker run -d \
--name argus \
--network host \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
-v ./data:/app/data \
-v ./config.yaml:/app/config.yaml:ro \
ghcr.io/rangulvers/argus:latest# Install nmap
sudo apt-get install nmap # Debian/Ubuntu
brew install nmap # macOS
# Clone and setup
git clone https://github.com/rangulvers/argus.git
cd argus
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Configure
cp config.yaml.example config.yaml
nano config.yaml # Set your network subnet
# Start the server
uvicorn app.main:app --host 0.0.0.0 --port 8080Edit config.yaml to customize Argus:
network:
subnet: "192.168.1.0/24" # Your network CIDR
scan_profile: "normal" # quick, normal, or intensive
scanning:
port_range: "1-1000" # Ports to scan
enable_os_detection: true
enable_service_detection: true
alerts:
new_device: true # Alert on new devices
new_port: true # Alert on new open ports| Profile | What it does | Time (20 devices) |
|---|---|---|
| Quick | Ping only - just finds devices | ~30 seconds |
| Normal | Ports 1-1000 + service detection | 5-10 minutes |
| Intensive | All ports + OS detection + scripts | 15-30 minutes |
All sensitive values (session key, passwords, API tokens) belong in .env, not in config.yaml.
# 1. Copy the example file
cp .env.example .env
# 2. Generate a session secret and paste it in
python -c "import secrets; print(secrets.token_urlsafe(32))"
# Edit .env and set ARGUS_SESSION_SECRET=<output from above>
# 3. Add integration credentials only for features you use
# (UniFi, Pi-hole, AdGuard, CVE — see .env.example for all variables)Never commit .env to git. It is already listed in .gitignore.
The docker-compose.yml loads .env automatically via env_file. No extra steps needed.
For bare-metal or docker run, pass the file explicitly:
docker run --env-file .env ...Argus v2.0 stores all secrets as environment variables for enhanced security. Never store passwords or API keys in config.yaml.
Create a .env file in the Argus root directory:
# Required: Session secret for cookie signing
# Generate with: python -c "import secrets; print(secrets.token_urlsafe(32))"
ARGUS_SESSION_SECRET=your_secure_session_secret_here
# Recommended: Production mode (enforces strict security)
ARGUS_ENVIRONMENT=productionOnly add these if you're using the corresponding integration:
# Email notifications
ARGUS_EMAIL_SMTP_PASSWORD=your_smtp_password
# Webhook notifications
ARGUS_WEBHOOK_SECRET=your_webhook_secret
# CVE vulnerability checking
ARGUS_CVE_API_KEY=your_nvd_api_key
# UniFi controller integration
ARGUS_UNIFI_PASSWORD=your_unifi_password
ARGUS_UNIFI_API_KEY=your_unifi_api_key
# Pi-hole integration
ARGUS_PIHOLE_API_TOKEN=your_pihole_token
# AdGuard Home integration
ARGUS_ADGUARD_PASSWORD=your_adguard_passwordProtect your .env file:
chmod 600 .envIf upgrading from v1.x (where secrets were in config.yaml):
# 1. Run automated migration
python migrate_secrets.py
# 2. Generate session secret
python -c "import secrets; print(secrets.token_urlsafe(32))"
# 3. Add to .env file
echo "ARGUS_SESSION_SECRET=<generated_secret>" >> .env
# 4. Restart Argus
docker-compose restart # or systemctl restart argusFull migration guide: docs/SECURITY_MIGRATION.md
The dashboard shows your network at a glance:
- Total devices and security status
- Risk distribution chart
- Devices requiring attention
- Recent changes
Browse all discovered devices with:
- Risk level indicators
- Open port counts
- Quick filters by zone, risk, or trusted status
- Search by IP, hostname, MAC, or label
Click any device to see:
- Full device information
- Open ports with service details
- CVE vulnerabilities affecting the device
- Threat analysis and recommendations
- Device settings (label, zone, trusted status)
View past scans and compare changes between them.
Click "Run Scan" in the top right to start a new scan. Choose:
- Quick Scan - Fast discovery, no port scanning
- Normal Scan - Balanced speed and detail
- Intensive Scan - Full analysis (use sparingly)
Scans run automatically via cron (default: Sunday 2 AM). Adjust the schedule in docker-compose.yml.
# Weekly scan on Sunday at 2 AM
0 2 * * 0 cd /path/to/argus && /path/to/venv/bin/python scan_cli.py scan --detect-changes# Run a scan
python scan_cli.py scan --subnet 192.168.1.0/24 --detect-changes
# Quick ping scan
python scan_cli.py scan --profile quick
# List recent scans
python scan_cli.py list-scans
# List devices
python scan_cli.py list-devices
# List changes
python scan_cli.py list-changesArgus provides a REST API for automation and integration.
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/scan/trigger |
Start a new scan |
GET |
/api/scans |
List all scans |
GET |
/api/scans/{id}/devices |
Devices from a scan |
GET |
/api/devices/{id} |
Device details |
PUT |
/api/devices/{id} |
Update device settings |
GET |
/api/changes |
Change history |
GET |
/api/zones |
List device zones |
Full API docs available at /docs when running.
- Only scan networks you own - Unauthorized scanning may be illegal
- Requires elevated privileges - nmap needs root/sudo for full features
- Docker uses host networking - Required for accurate network discovery
- Change the default password - Create a strong admin password on setup
- Python 3.11+
- nmap 7.80+
- Docker 20.10+ (for containerized deployment)
| Metric | Docker | Bare Metal |
|---|---|---|
| RAM | ~100-150MB | ~50-80MB |
| Disk | ~500MB + data | ~100MB + data |
| CPU | Low idle, spikes during scans | Same |
How does Argus compare to other network scanning tools?
| Tool | Self-Hosted | Vulnerability Detection | Change Tracking | Web UI |
|---|---|---|---|---|
| Argus | Yes | Yes | Yes | Yes |
| Fing/Fingbox | No (cloud) | Limited | Yes | Yes |
| Angry IP Scanner | Yes | No | No | No |
| OpenVAS | Yes | Yes | No | Yes |
| Nmap (CLI) | Yes | Manual | No | No |
Argus is designed for homelab users who want a self-hosted, open-source alternative to commercial network scanners like Fing - with vulnerability detection, change tracking, and a clean web interface.
Contributions welcome! Please open an issue or submit a PR on GitHub.
MIT License - See LICENSE for details.
Built with love for the homelab community.