NmapScan

Python-Tool zur Verarbeitung von Nmap-XML-Scans

Python XML CSV Excel pandas

Über das Projekt

NmapScan ist ein Python-basiertes Toolset zur automatisierten Verarbeitung von Nmap-Netzwerkscans. Es parst XML-Scan-Ergebnisse und exportiert die gewonnenen Daten in verschiedene Formate für die Netzwerk-Inventarisierung und Dokumentation.

Funktionen

  • XML-Parsing: Extrahiert MAC-Adressen, IPv4-Adressen und Hostnamen aus Nmap-XML-Exporten
  • CSV-Export: Konvertiert Scan-Ergebnisse in gut lesbare CSV-Dateien
  • Excel-Integration: Aktualisiert vorhandene Excel-Inventardatenbanken mit neuen MAC-Adressen
  • Merge-Funktion: Kombiniert CSV-Scandaten mit bestehenden Excel-Tabellen
  • Fehlende Geräte: Identifiziert und protokolliert nicht im Inventar erfasste IPs

Technologie-Stack

  • Python 3.x: Kernsprache für alle Skripte
  • xml.etree.ElementTree: Native XML-Parsing-Bibliothek
  • csv: Standardbibliothek für CSV-Exporte
  • pandas: Datenmanipulation und Excel-Integration
  • openpyxl: Lesen und Schreiben von Excel-Dateien

Code-Beispiel

XML-Parsing und CSV-Export aus Nmap-Scan-Ergebnissen:

import xml.etree.ElementTree as ET
import csv

def parse_xml_to_csv(xml_file, csv_file):
    # XML-Datei öffnen und parsen
    tree = ET.parse(xml_file)
    root = tree.getroot()

    # CSV Datei öffnen und schreiben
    with open(csv_file, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['MAC Address', 'IPv4', 'Hostname'])

        # Durch jeden Host im XML gehen
        for host in root.findall('host'):
            mac = ipv4 = hostname = None

            for addr in host.findall('address'):
                if addr.get('addrtype') == 'mac':
                    mac = addr.get('addr')
                elif addr.get('addrtype') == 'ipv4':
                    ipv4 = addr.get('addr')

            for name in host.find('hostnames').findall('hostname'):
                if '.int.bynature.com' in name.get('name'):
                    hostname = name.get('name')

            # Zeile schreiben wenn alle Daten vorhanden
            if mac and ipv4 and hostname:
                writer.writerow([mac, ipv4, hostname])

Anwendungsfall

Das Tool wurde für die regelmäßige Netzwerk-Inventarisierung in einer mittelständischen Unternehmensumgebung entwickelt. Der Workflow:

  1. Nmap-Scan ausführen: nmap -sn 192.168.188.0/24 -oX nmapscan.xml
  2. XML mit main.py in CSV konvertieren
  3. CSV-Daten mit add_mac.py in Excel-Inventar einpflegen
  4. Nicht erfasste Geräte werden in "Tabelle 10" protokolliert

Ergebnis

Das Tool verarbeitet erfolgreich Netzwerkscans mit 64+ aktiven Hosts und aktualisiert die Inventardokumentation automatisch. Durch die Filterung nach Firmendomain (.int.bynature.com) werden nur relevante interne Geräte erfasst.