Major feature enhancement: Windows PowerShell network scanning integration
- 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>
This commit is contained in:
82
CLAUDE.md
82
CLAUDE.md
@@ -13,47 +13,115 @@ This is a Wake-on-LAN (WOL) Manager - a containerized Flask web application for
|
||||
- **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
|
||||
- **Deployment**: Docker with docker compose, requires privileged networking
|
||||
|
||||
### Key Components
|
||||
|
||||
- `WOLManager` class in `app/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`, `arp` system 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`:
|
||||
|
||||
```bash
|
||||
# Development build and run
|
||||
docker-compose up -d --build
|
||||
docker compose up -d --build
|
||||
# From WSL: docker.exe compose up -d --build
|
||||
|
||||
# View real-time logs
|
||||
docker-compose logs -f wol-web
|
||||
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
|
||||
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 8088 (external) → 8080 (internal)
|
||||
- Runs on port 5000 (configurable via WOL_EXTERNAL_PORT env var)
|
||||
- Requires `NET_ADMIN` and `NET_RAW` capabilities
|
||||
- Uses `network_mode: host` for WOL packet transmission
|
||||
- Must run with `privileged: true` for 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:**
|
||||
```powershell
|
||||
# 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 status
|
||||
- `POST /api/wake` - Wake specific computer (`{mac, name, ip}`)
|
||||
- `POST /api/wake-all` - Wake all configured computers
|
||||
- `POST /api/add` - Add new computer (`{name, mac, ip}`)
|
||||
- `GET /api/scan` - Network scan for devices
|
||||
- `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 `/data` directory
|
||||
- Flask runs in debug=False mode in container
|
||||
- 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
|
||||
Reference in New Issue
Block a user