🔍 NmapScan – Automatisierte Netzwerk-Inventarisierung mit Python

XML-basierte Nmap-Verarbeitung mit MAC-Adress-Extraktion, CSV-Export und Excel-Integration für Geräte-Management

PythonNmapXMLpandasExcel

🚀 Professionelle Netzwerk-Dokumentation für Ihr Unternehmen?

Vereinbaren Sie ein unverbindliches Strategiegespräch

📞 02406 803 7603 ✉️ info@computerkumpel.de

📊 Business Value

Dieses Tool automatisiert die Verarbeitung von Nmap-Netzwerk-Scans: Aus rohen XML-Dateien werden strukturierte CSV-Daten extrahiert und mit bestehenden Excel-Inventarlisten abgeglichen.

📋
XML → CSV
Extrahiert MAC-Adressen, IPv4 und Hostnamen aus Nmap-XML-Scans. Filtert gezielt nach Ihrer Domain (.int.bynature.com).
🔄
Excel-Sync
Aktualisiert bestehende Excel-Inventarlisten mit neuen MAC-Adressen via pandas-Merge. Fehlende IPs werden automatisch in Tabelle 10 gesammelt.
🛡️
IT-Security
Erkennt neue, unbekannte Geräte im Netzwerk. Ideal für Security-Audits und Compliance-Dokumentation.

💻 Zwei-Stufen-Workflow

Das System besteht aus zwei unabhängigen Python-Skripten für einen zweistufigen Prozess.

1️⃣
main.py – XML Parser
Parse nmapscan.xml mit xml.etree.ElementTree. Filtert Hostnames auf *.int.bynature.com. Export als output.csv mit MAC, IPv4, Hostname.
2️⃣
add_mac.py – Excel Updater
Liest Network_Devices.xlsx mit mehreren Sheets. Merged MAC-Adressen aus CSV per IPv4-Match. Fehlende IPs in Tabelle 10.
Deduplizierung
Automatische Bereinigung von IPv4-Adressen (strip, lower). Nur eindeutige, neue Einträge werden hinzugefügt.

📝 Echte Code-Snippets

XML-Parsing mit gezielter Hostname-Filterung:

def parse_xml_to_csv(xml_file, csv_file):
    tree = ET.parse(xml_file)
    root = tree.getroot()

    with open(csv_file, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['MAC Address', 'IPv4', 'Hostname'])

        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')

Excel-Merge mit pandas für MAC-Adress-Synchronisation:

for sheet_name in xls.sheet_names:
    df = pd.read_excel(xls, sheet_name=sheet_name)
    if 'IPv4 Adress' in df.columns:
        df['IPv4 Adress'] = df['IPv4 Adress'].str.strip().str.lower()
        updated_df = pd.merge(df, csv_data, on='IPv4 Adress', 
                              how='left', suffixes=('', '_new'))
        updated_df['MAC Adress'] = updated_df.apply(
            lambda row: row['MAC Adress_new'] 
            if pd.notna(row['MAC Adress_new']) else row['MAC Adress'], axis=1
        )

Fehlende IPs sammeln für manuelle Nachbearbeitung:

missing_ips = all_csv_ips - found_ips
if missing_ips:
    missing_df = csv_data[csv_data['IPv4 Adress'].isin(missing_ips)]
    if 'Tabelle 10' in writer.sheets:
        startrow = writer.sheets['Tabelle 10'].max_row
    else:
        startrow = 0
    missing_df.to_excel(writer, sheet_name='Tabelle 10', 
                        startrow=startrow, index=False)

🔧 Technologie-Stack

Python 3 xml.etree.ElementTree pandas openpyxl csv Nmap Excel

🚀 Kernfunktionen