import scapy.all as scapy import argparse from rich.console import Console from rich.table import Table
console = Console()
def get_arguments(): """Verarbeitet die Kommandozeilenargumente.""" parser = argparse.ArgumentParser(description="Ein einfacher ARP-Netzwerk-Scanner.") parser.add_argument("-t", "--target", dest="target", help="Ziel-IP oder IP-Bereich (z.B. 192.168.1.1/24)", required=True) options = parser.parse_args() return options
def scan(ip): """Führt einen ARP-Scan im Netzwerk durch.""" with console.status(f"[bold green]Scanne Netzwerk: {ip}...", spinner="dots"): # Erstelle ARP-Request arp_request = scapy.ARP(pdst=ip) # Erstelle Ethernet-Broadcast-Frame broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff") # Kombiniere die Pakete arp_request_broadcast = broadcast/arp_request # Sende und empfange (timeout=2 Sekunden) answered_list = scapy.srp(arp_request_broadcast, timeout=2, verbose=False)[0]
clients_list = []
for element in answered_list:
client_dict = {"ip": element[1].psrc, "mac": element[1].hwsrc}
clients_list.append(client_dict)
return clients_list
def display_results(results_list): """Gibt die Ergebnisse in einer formatierten Tabelle aus.""" if not results_list: console.print("[bold red]Keine Geräte gefunden. Überprüfe deine Berechtigungen (sudo?).[/bold red]") return
table = Table(title="Gefundene Geräte im Netzwerk")
table.add_column("IP-Adresse", style="cyan", no_wrap=True)
table.add_column("MAC-Adresse", style="magenta")
for client in results_list:
table.add_row(client["ip"], client["mac"])
console.print(table)
def main(): options = get_arguments() try: scan_result = scan(options.target) display_results(scan_result) except KeyboardInterrupt: console.print("\n[yellow]Programm vom User beendet.[/yellow]") except Exception as e: console.print(f"[bold red]Fehler:[/bold red] {e}")
if name == "main": main()