- Added Windows PowerShell network scanner with auto-detection and interactive mode - Implemented dual scanning system (Windows + Linux fallback) - Added computer management features (rename, delete, duplicate checking) - Enhanced UI with modern responsive design and Romanian localization - Added comprehensive Windows-Linux integration with WSL interop - Improved error handling and user feedback throughout - Added hot reload for development and comprehensive documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
4.7 KiB
4.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
See README.md for complete project description, installation instructions, and usage details.
This is a Wake-on-LAN (WOL) Manager - a containerized Flask web application for managing and remotely waking computers on a local network.
Architecture & Code Structure
- Backend: Flask web application (
app/app.py) with RESTful API endpoints - Frontend: Single-page application with vanilla JavaScript (
app/templates/index.html) - Storage: File-based configuration in
/data/wol-computers.conf - Deployment: Docker with docker compose, requires privileged networking
Key Components
WOLManagerclass inapp/app.py: Core logic for computer management, WOL operations, and network scanning- Configuration format:
name|mac|ip(pipe-separated values in/data/wol-computers.conf) - Dependencies:
wakeonlan,nmap,ping,arpsystem tools - Windows PowerShell scanner:
scripts/windows-network-scan.ps1- optimized network scanning from Windows host
Development Commands
For installation and basic usage, see README.md
Docker Development
Note: When running from WSL with Docker Desktop on Windows, use docker.exe compose:
# Development build and run
docker compose up -d --build
# From WSL: docker.exe compose up -d --build
# View real-time logs
docker compose logs -f wol-web
# From WSL: docker.exe compose logs -f wol-web
# Shell access to container
docker compose exec wol-web bash
# From WSL: docker.exe compose exec wol-web bash
# Stop containers
docker compose down
# From WSL: docker.exe compose down
Network Requirements
- Runs on port 5000 (configurable via WOL_EXTERNAL_PORT env var)
- Requires
NET_ADMINandNET_RAWcapabilities - Uses
network_mode: hostfor WOL packet transmission - Must run with
privileged: truefor network operations
Network Scanning
Two scanning modes available:
1. Container-based scanning (Limited)
- Uses Linux tools:
arp,ping,nmap - Limited in Docker Desktop Windows environment
- Fallback method when Windows scanning unavailable
2. Windows PowerShell scanning (Recommended)
- Script:
scripts/windows-network-scan.ps1 - Features:
- Automatic local network detection
- Interactive network selection menu
- Parallel ping sweeps with configurable batch sizes
- Hostname resolution via DNS
- MAC address retrieval from ARP table/NetNeighbor
- Real-time progress indication
- Results saved to
/data/network-scan-results.json
Usage patterns:
# Interactive mode with network selection menu
scripts\windows-network-scan.ps1
# Direct network specification
scripts\windows-network-scan.ps1 -Network "192.168.1.0/24"
# Advanced options
scripts\windows-network-scan.ps1 -Network "192.168.100.0/24" -TimeoutMs 500 -BatchSize 20 -Verbose
Integration:
- Web app automatically reads Windows scan results from JSON file
- Results cached for 30 minutes
- App falls back to Linux scanning if Windows results unavailable
API Endpoints
GET /api/computers- List configured computers with statusPOST /api/wake- Wake specific computer ({mac, name, ip})POST /api/wake-all- Wake all configured computersPOST /api/add- Add new computer ({name, mac, ip})GET /api/scan- Network scan for devices (tries Windows results first, then Linux fallback)POST /api/scan/windows- Trigger Windows PowerShell scan (attempts automatic execution)
Development Notes
- Application uses Romanian language in UI
- No authentication/authorization implemented
- Configuration persisted in volume-mounted
/datadirectory - Flask runs in debug=False mode in container
Windows Integration Details
File Integration:
- Windows scan results:
/data/network-scan-results.json - Results format:
{success, timestamp, networks_scanned, computers[], message} - Computer format:
{ip, mac, hostname, status} - Results expire after 30 minutes
WSL Integration:
- App attempts automatic PowerShell execution via WSL interop
- Path:
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe - Fallback: Manual execution instructions provided when auto-execution fails
Scanning Logic in app.py:
scan_network()- Main entry point, tries Windows results first (app/app.py:164)try_read_windows_scan_results()- Reads and validates Windows JSON results (app/app.py:176)scan_network_linux()- Fallback Linux scanning using ARP/ping (app/app.py:236)- Network filtering supported for custom CIDR ranges