A lightweight, zero-dependency local reverse proxy for managing multiple services on dynamic ports. Perfect for development environments, penetration testing frameworks, and microservice development.
- π Zero External Dependencies - Uses only Python standard library (3.8+)
- π Dynamic Port Allocation - Automatically finds available ports (4000-4999)
- π Service Registry - Persistent JSON-based service mappings
- π HTTP Reverse Proxy - Route requests by hostname
- π Thread-Safe - Concurrent request handling
- β‘ Lightweight - Single file, minimal overhead
- Python 3.8 or higher
*.localhostDNS resolution (default on most systems including Kali Linux)
python localportmanager.py proxyThe proxy starts on http://127.0.0.1:1355 by default.
# Register a simple HTTP server
python localportmanager.py register myapp "python -m http.server {port}"
# Register a custom application
python localportmanager.py register api "uvicorn main:app --port {port}"Once registered, access your service through the proxy:
http://myapp.localhost:1355
| Command | Description |
|---|---|
proxy |
Start the reverse proxy server |
register <name> <command> |
Register a new service |
unregister <name> |
Remove a service from registry |
list |
List all registered services |
status |
Show proxy status and services |
# Start proxy on custom port
python localportmanager.py --port 8080 proxy
# Use custom state file
python localportmanager.py --state-file /path/to/registry.json proxy
# Auto-start service without prompting
python localportmanager.py register myapp "cmd" --yes# Register multiple frontend applications
python localportmanager.py register frontend-react "npm run dev -- --port {port}"
python localportmanager.py register frontend-vue "npm run serve -- --port {port}"
python localportmanager.py register api "python -m uvicorn api:app --port {port}"Access via:
http://frontend-react.localhost:1355http://frontend-vue.localhost:1355http://api.localhost:1355
# Register various listeners
python localportmanager.py register listener-01 "nc -lvp {port}"
python localportmanager.py register payload-server "python -m http.server {port}"
python localportmanager.py register api-server "python api.py {port}"# Register Docker container ports
python localportmanager.py register grafana "docker run -p {port}:3000 grafana/grafana"βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Client ββββββΆβ LocalPortManager ββββββΆβ Backend Service β
β β β Proxy (127.0.0.1:1355) β β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββ βββββββββββββββ
β Registry β β Dynamic β
β (JSON) β β Port (4000+)β
βββββββββββββββ βββββββββββββββ
LocalPortManager routes requests based on the Host header:
| Host Header | Routes To |
|---|---|
myapp.localhost:1355 |
Service "myapp" |
myapp |
Service "myapp" |
127.0.0.1:1355/myapp/... |
Service "myapp" (path-based fallback) |
.
βββ localportmanager.py # Main application (single file)
βββ README.md # This file
βββ LICENSE # MIT License
βββ examples/ # Usage examples
# Test the module
python -c "import localportmanager; print('OK')"
# Test with verbose output
python localportmanager.py --versionPortRegistry- Manages service/port mappingsReverseProxyHandler- HTTP request handlerLocalPortManager- Main application class
- Proxy only binds to
127.0.0.1(localhost) - No authentication by design (local development tool)
- State file stored in
/tmpby default (cleared on reboot) - For production use, consider adding authentication layer
LocalPortManager is designed to work seamlessly with Zen-AI-Pentest:
# Inside Zen-AI-Pentest agent
from localportmanager import LocalPortManager
lpm = LocalPortManager(proxy_port=1355)
port = lpm.register_service("exploit-listener", "nc -lvp {port}")
print(f"Listener accessible at: http://exploit-listener.localhost:1355")This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by the need for simple service management in penetration testing
- Built for the Zen-AI-Pentest framework
- Zero-dependency philosophy for maximum portability
- Issues: GitHub Issues
- Author: @SHAdd0WTAka
Made with β€οΈ for the cybersecurity community