Files
werkzeuge/teamleader_test/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

141 lines
3.9 KiB
Python

"""
Simple CLI tool for network scanning.
Usage:
python cli.py scan 192.168.1.0/24
python cli.py hosts
python cli.py topology
"""
import asyncio
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from examples.usage_example import NetworkScannerClient
async def cmd_scan(network_range: str, scan_type: str = "quick"):
"""Start a network scan."""
client = NetworkScannerClient()
print(f"Starting {scan_type} scan of {network_range}...")
scan_id = await client.start_scan(network_range, scan_type)
print(f"Scan ID: {scan_id}")
print("Waiting for scan to complete...")
result = await client.wait_for_scan(scan_id)
print("\nScan Results:")
print(f" Status: {result['status']}")
print(f" Hosts found: {result['hosts_found']}")
print(f" Ports scanned: {result['ports_scanned']}")
async def cmd_hosts():
"""List discovered hosts."""
client = NetworkScannerClient()
hosts = await client.get_hosts(status="online")
print(f"\nDiscovered Hosts ({len(hosts)}):")
print("-" * 80)
for host in hosts:
services = host.get('services', [])
print(f"\n{host['ip_address']:15} {host.get('hostname', 'N/A'):30}")
print(f" Status: {host['status']}")
print(f" Services: {len(services)}")
if services:
for svc in services[:3]:
print(f" - {svc['port']:5} {svc.get('service_name', 'unknown')}")
async def cmd_topology():
"""Show network topology."""
client = NetworkScannerClient()
topology = await client.get_topology()
print(f"\nNetwork Topology:")
print(f" Nodes: {len(topology['nodes'])}")
print(f" Edges: {len(topology['edges'])}")
print("\nNodes by Type:")
node_types = {}
for node in topology['nodes']:
node_type = node['type']
node_types[node_type] = node_types.get(node_type, 0) + 1
for node_type, count in sorted(node_types.items()):
print(f" {node_type:15} {count}")
async def cmd_stats():
"""Show network statistics."""
client = NetworkScannerClient()
stats = await client.get_statistics()
print("\nNetwork Statistics:")
print(f" Total hosts: {stats['total_hosts']}")
print(f" Online: {stats['online_hosts']}")
print(f" Offline: {stats['offline_hosts']}")
print(f" Services: {stats['total_services']}")
print(f" Scans: {stats['total_scans']}")
def main():
"""Main CLI entry point."""
if len(sys.argv) < 2:
print("Usage:")
print(" python cli.py scan <network_range> [scan_type]")
print(" python cli.py hosts")
print(" python cli.py topology")
print(" python cli.py stats")
print("\nExamples:")
print(" python cli.py scan 192.168.1.0/24")
print(" python cli.py scan 192.168.1.0/24 standard")
print(" python cli.py hosts")
sys.exit(1)
command = sys.argv[1].lower()
try:
if command == "scan":
if len(sys.argv) < 3:
print("Error: Network range required")
print("Usage: python cli.py scan <network_range> [scan_type]")
sys.exit(1)
network_range = sys.argv[2]
scan_type = sys.argv[3] if len(sys.argv) > 3 else "quick"
asyncio.run(cmd_scan(network_range, scan_type))
elif command == "hosts":
asyncio.run(cmd_hosts())
elif command == "topology":
asyncio.run(cmd_topology())
elif command == "stats":
asyncio.run(cmd_stats())
else:
print(f"Unknown command: {command}")
sys.exit(1)
except KeyboardInterrupt:
print("\n\nInterrupted by user")
sys.exit(0)
except Exception as e:
print(f"\nError: {e}")
sys.exit(1)
if __name__ == "__main__":
main()