#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # dda_dict.py from VLAN import VLAN from glob import glob from os import path verzei = glob("vlans/*") # # Eingabe # print ("""\n\n Welche(r) Rechner/Drucker soll(en) modifiziert werden. Mehrere Rechner mit Leerzeichen trennen. \n\n """) devices = "e4001 e4002 e4003" #macadr = "11:11:11 22:22:22 33:33:33" macadr = "" #devices = input("Eingabe der Geräte Namen: ").lower() #macadr = input("Optional Eingabe der MAC Adresse in der dazugehörigen Reihenfolge: ").upper() l_devices = devices.split() l_macadr = macadr.split() if len(l_macadr) > 0 and len(l_macadr) != len(l_devices): raise OSError("Die Eingabelisten sind ungleich lang!") while True: vlanid = input("Eingabe der VLAN Nr.: ") try: i_vlanid = int(vlanid) except ValueError: print("Keine Nummer! Bitte nur Zahlen eingeben ...") # Alles in Ordnung: else: vlanid = "{:04d}".format(i_vlanid) # Eingabe: 200 -> 0200 break # Gleich testen, ob Datei existiert: vlanname = "vlans/vlan{}.in".format(vlanid) if not path.exists(vlanname): raise FileNotFoundError("VLAN-Datei '{}' wurde nicht gefunden!".format(vlanname)) # # Fkt. IP generieren # def ipgen(vlanid): """ IPs generieren für die jeweilige übergebene VLAN ID """ l_ipgen = [] # "0200" -> 200 s_vlanid = str(int(vlanid)) if len(s_vlanid) > 3: # wenn 1400 -> 14 s_vlanid = s_vlanid[:2] else: s_vlanid = s_vlanid[0] for zaehler in range(1, 254): ip = "172.16.{}.{}".format(s_vlanid, zaehler) l_ipgen.append(ip) return (l_ipgen) # # MAC-Adr finden # if len(l_macadr) == 0: for vlandat in verzei: vlan = VLAN(vlandat, l_devices) # Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält l_macadr = vlan.read_vlan_mac(l_macadr) if not l_macadr: raise OSError("Zu diesen E-Nummer(n) wurde keine MAC-Adr. gefunden") print(l_macadr) # # vlan Dateien einlesen # for vlandat in verzei: vlan = VLAN(vlandat, l_devices) d_vlan = vlan.read_vlan_make_dict() print (vlandat) if vlanname == vlandat: # # Das VLAN dem die Eingabe hinzugefügt wird # print ("Die Eingabe wird dem Ziel-Vlan hinzugefügt") # Im VLAN belegte IPs auflisten l_ip_vlan = [] macip_d_vlan = list(d_vlan.values()) for ipx in macip_d_vlan: l_ip_vlan.append(ipx[1]) l_ipgen = ipgen(vlanid) # IPs filtern, von den generierte IPs 1-253 die IPs aus VLAN-Datei abziehen = noch freie IPs m_ipgen = set(l_ipgen) m_ipvlan = set(l_ip_vlan) m_freeips = m_ipgen.difference(m_ipvlan) l_freeips = list(m_freeips) # # Daten zusammenfügen und ins Dict des gesuchten VLANs eintragen # d_vlan_fkt = d_vlan.copy() print ("Zaehler für while-Schleife erstellen") durchlaeufe = len(l_devices) zaehler = 0 while zaehler < durchlaeufe: dev = l_devices[zaehler] mac = l_macadr[zaehler] freeip = l_freeips[zaehler] d_vlan_fkt[dev] = [mac, freeip] zaehler += 1 # # Schreibe Ziel VLAN-Datei # vlan.write_vlandat(d_vlan_fkt) else: # # Die restlichen VLANs aus denen die Eingabe abgezogen wird # d_vlan_fkt = d_vlan.copy() durchlaeufe = len(l_devices) print ("Anzahl Schleifen durchläufe", (durchlaeufe)) zaehler = 0 while zaehler < durchlaeufe: try: # Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält print (d_vlan_fkt.pop(l_devices[zaehler])) zaehler += 1 except KeyError: print("Das Device {} wurde nicht im {} gefunden ...".format(l_devices[zaehler], vlandat)) zaehler += 1 if d_vlan_fkt != d_vlan: # # Schreibe VLAN Datei für die restlichen VLANs # vlan.write_vlandat(d_vlan_fkt) """ if len(l_macadr) == 0: print ("Zaehler für while-Schleife erstellen") durchlaeufe = len(l_devices) zaehler = 0 d_vlan_fkt = d_vlan.copy() while zaehler < durchlaeufe: try: # Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält print (d_vlan_fkt.pop(l_devices[zaehler])) macadr = d_vlan_fkt.pop(l_devices[zaehler]) print(macadr) zaehler += 1 except KeyError: print("Das Device {} wurde nicht im {} gefunden ...".format(l_devices[zaehler], vlandat)) zaehler += 1 # Lese die MAC Adresse aus der Datei falls diese die Devices aus der Eingabe enthält #print (d_vlan_fkt.pop(l_devices[zaehler])) #macadr = d_vlan_fkt.pop(l_devices[zaehler]) #d_vlan_fkt.pop(l_devices[zaehler]) #print(macadr) #print(l_macadr) """