Benutzer-Werkzeuge

Webseiten-Werkzeuge


programme:dhcpdnsadmin:dda_dict_20180418
dda_dict.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
#  dda_dict.py
 
#import sys
from glob import glob
 
verzei = glob("vlans/*")
 
 
 
# Fkt. definition
def read_vlan_make_dict(vlandat):
    ''' Lesefunktion für eine beliebige VLAN-Datei. Erzeugt ein Dict. aus VLAN-Dateien '''
    l_devices_vlandat = []
    l_macadr_ip_vlandat = []
    l_ip_vlandat = []
    d_vlan = {}
 
    with open((vlandat), 'r') as vlandatei:
        for line in vlandatei:
            l_elems = line.split()
            l_devices_vlandat.append(l_elems[0])
            l_macadr_ip_vlandat.append(l_elems[1])
            l_ip_vlandat.append(l_elems[2])
 
    #print (l_devices_vlandat)
    #print ((l_macadr_ip_vlandat),  "\n\n")
 
    for dev,  mac,  ip in zip(l_devices_vlandat, l_macadr_ip_vlandat, l_ip_vlandat ):
        d_vlan[dev] = [ mac,  ip ]
 
    return (d_vlan)
 
 
 
#
# Eingabe
#
print ("""\n\n Welche(r) Rechner/Drucker soll(en) modifiziert werden.
Mehrere Rechner mit Leerzeichen trennen. \n\n """)
 
devices = "e1111 e2222 e3333"
macadr = "11:11:11 22:22:22 33:33:33"
 
 
#devices = input("Eingabe der Geräte Namen: ").lower()
#macadr = input("Optional Eingabe der MAC Adresse in der dazugehörigen Reihenfolge: ").upper()
 
while True:
    try:
        vlan = input("Eingabe der VLAN Nr.: ")
        vlan = int(vlan)
        break
    except ValueError:
        print("Keine Nummer! Bitte nur Zahlen eingeben ...")
 
l_devices = devices.split()
l_macadr = macadr.split()
 
#if len(l_devices) != len(l_macadr):
#   raise OSError("Die Eingabelisten sind ungleich lang!")
 
#print (l_devices)
#print (l_macadr)
 
 
 
#
# Erzeuge Dict. aus zwei Eingabe Listen
#
d_eingabe = {}
for dev, mac in zip(l_devices, l_macadr):
    d_eingabe[dev] = [ mac,  None ]    # ip = None
 
print (d_eingabe)
 
 
 
#
# IP generieren
#
def ipgen(vlan):
    """ IPs generieren für das jeweilige übergebene VLAN """
    zaehler = 1
    l_ipgen = []
    while zaehler < 254:
        ip = "172.16.{[0]}.{}".format(str(vlan), zaehler)
        l_ipgen.append(ip)
        #print(ip)
        zaehler += 1
    return (l_ipgen)
 
 
 
#
# vlan Dateien einlesen
#
d_vlan = None
 
for vlandat in verzei:
    d_vlan = read_vlan_make_dict(vlandat)
    vlanname = "vlans/vlan{:04d}.in".format(vlan)
    if vlanname == vlandat:
        print ("Ja,  es ist das dict.  des gesuchten vlans")
        #
        # Im VLAN belegte IPs auflisten
        #
        macip_d_vlan = list(d_vlan.values())
        l_ip_vlan = []
        for ipx in macip_d_vlan:
            l_ip_vlan.append(ipx[1])
 
        # Dict. Eingabe und VLAN zusammenführen
        d_vlan.update(d_eingabe)
        print (d_vlan)
 
        l_ipgen = ipgen(vlan)
 
        m_ipgen = set(l_ipgen)
        m_ipvlan = set(l_ip_vlan)
        # IPs filtern, von den generierte IPs 1-253 die IPs aus VLAN-Datei abziehen = noch freie IPs
        m_freeips = m_ipgen.difference(m_ipvlan)
        l_freeips = list(m_freeips)
 
        #
        # Daten zusammenfügen und ins Dict des gesuchten VLANs eintragen
        #
        print ("Zaehler für while-Schleife erstellen")
        durchlaeufe = len(l_devices)
        print (durchlaeufe)
        zaehler = 0
        while zaehler < durchlaeufe:
            #eingabeliste = "d_vlan['{}'] = ['{}', '{}']\n".format(l_devices[zaehler], l_macadr[zaehler], l_freeips[zaehler])
            #d_vlan['{}'] = ['{}', '{}'].format(l_devices[zaehler], l_macadr[zaehler], l_freeips[zaehler])
            dev = l_devices[zaehler]
            mac = l_macadr[zaehler]
            freeip = l_freeips[zaehler]
            d_vlan[dev] = [mac, freeip]
            #print (eingabeliste)
            #eingabeliste
            #print (d_vlan)(eingabeliste)
            zaehler += 1
        #for i,  j,  k in zip(l_devices,  l_macadr,  m_freeips):
         #   eingabeliste = "{} {} {}\n".format(l_devices, l_macadr, m_freeips)
 
        #d_vlan['e1111'] = '00:00:00:00:00:00'
        #d_vlan['e3333'] = ['33:33:33', '172.16.3.71']
 
# key, value
for k, v in d_vlan.items():
    print ("{}: {}".format(k, v))
programme/dhcpdnsadmin/dda_dict_20180418.txt · Zuletzt geändert: 2020/11/13 13:54 von pulsar