Files
werkzeuge/teamleader_test2/network_mapper/cli.py
root cb073786b3 Initial commit: Werkzeuge-Sammlung
Enthält:
- rdp_client.py: RDP Client mit GUI und Monitor-Auswahl
- rdp.sh: Bash-basierter RDP Client
- teamleader_test/: Network Scanner Fullstack-App
- teamleader_test2/: Network Mapper CLI

Subdirectories mit eigenem Repo wurden ausgeschlossen.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 09:39:24 +01:00

62 lines
1.9 KiB
Python

"""Command line entrypoints for the LAN visualizer."""
from __future__ import annotations
import asyncio
import json
from pathlib import Path
import typer
from network_mapper.scanner import NetworkScanner
app = typer.Typer(help="LAN discovery + visualization tooling")
@app.command()
def scan(
cidr: str | None = typer.Option(
None,
help="CIDR range to probe (defaults to the primary IPv4 network).",
),
concurrency: int = typer.Option(32, help="Limit the number of simultaneous pings."),
ssh_timeout: float = typer.Option(5.0, help="Seconds to wait for SSH probes."),
ssh_user: str | None = typer.Option(
None,
envvar="SSH_USER",
help="Username for SSH probes when key auth is available.",
),
ssh_key: Path | None = typer.Option(
None,
envvar="SSH_KEY_PATH",
exists=True,
file_okay=True,
dir_okay=False,
help="Private key path for passwordless SSH execution.",
),
output: Path | None = typer.Option(
None,
exists=False,
file_okay=True,
dir_okay=False,
help="Write the scan result JSON to this file instead of stdout.",
),
):
"""Run a single scan and emit JSON results."""
scanner = NetworkScanner(ssh_user=ssh_user, ssh_key_path=str(ssh_key) if ssh_key else None)
result = asyncio.run(scanner.scan(cidr=cidr, concurrency=concurrency, ssh_timeout=ssh_timeout))
payload = result.to_dict()
serialized = json.dumps(payload, indent=2)
if output:
output.write_text(serialized)
typer.echo(f"Scan saved to {output}")
else:
typer.echo(serialized)
@app.command()
def serve(host: str = "0.0.0.0", port: int = 8000, reload: bool = False):
"""Start the FastAPI server and front-end."""
import uvicorn
uvicorn.run("network_mapper.main:app", host=host, port=port, reload=reload)