[Python-Leipzig] Hallo Liste; Fragen zu IP-Addressen (Parsing und random generation)

Julian Moritz mailings at julianmoritz.de
Mo Okt 26 17:24:55 UTC 2009


Hallo Volker,

Dr. Volker Jaenisch schrieb:
> Hallo Python-Freunde in Leipzig!
> 
> Ich bin der Volker aus Leipzig, programiere seit mehr als 10 Jahren in
> Python
> und habe bisher nur einmal geschafft zum Stammtisch zu kommen.
> 
> Ich programmiere gerade mit ein paar anderen sächsischen Piraten einen
> IP-Anonymisierungs-Filter
> für Logdateien in Python.
> 
> Dazu brauche ich 1) leistungsfähige IP-Parser, und 2) effiziente
> Generierung
> von Random IPs.
> 
> Ad 1):
> Geparsed wird nach
> http://stackoverflow.com/questions/319279/how-to-validate-ip-address-in-python
> 
> jede Zeile einzeln, damit der Parser nicht platzt.
> Allerdings sind gerade die regex für IPv6 ein echter Showstopper (Parsen
> nach ipv4: 17 sec, ipv6: 540 sec - gleiche Logdatei output nach /dev/null).
> Ich habe schon an einen mehrstufigen Prozess gedacht, der erstmal mit
> einem einfachen regex grob
> vorsortiert und danach erst eine vollständige Validierung per regex ala
> stackoverflow. Mir gefällt aber die Idee
> die Parse-Logik eng zusammen zu haben, damit sich keine Fehler
> einschleichen.
> Aber vielleicht gibt es ja noch einen dritten Weg?
> 

meist steckt der Teufel im Detail. Bitte schicke doch das gesamte Skript
mal rum, wenn das keine Probleme macht (vielleicht auch mit ein paar
(anonymisierten) Beispieldaten, die für Messungen ausreichend sind).

> Ad 2):
> Bein generieren von IPs machte ich es mir bisher einfach, suche aber für
> die Produktion etwas
> eleganteres und effizienteres.
> 
> def randomIP4():
>    return \
>    str(random.randint(0, 0xff)) + '.' + \
>    str(random.randint(0, 0xff)) + '.' + \
>    str(random.randint(0, 0xff)) + '.' + \
>    str(random.randint(0, 0xff))
> 
> def randomIP6():
>    return \
>    "2000:" + \
>    hex(random.randint(0, 0xffff))[2:] + ':' + \
>    hex(random.randint(0, 0xffff))[2:] + ':' + \
>    hex(random.randint(0, 0xffff))[2:] + ':' + \
>    hex(random.randint(0, 0xffff))[2:] + ':' + \
>    hex(random.randint(0, 0xffff))[2:] + ':' + \
>    hex(random.randint(0, 0xffff))[2:] + ':' + \
>    hex(random.randint(0, 0xffff))[2:]
> 
> Wie kann man das besser machen?

Hm, wie gut zufällig muss das denn sein?

Grüße
Julian

> * einen langen Random-Integer erzeugen und dann zerlegen?
> * Die vielen String-Operationen nerven mich gewaltig an.
> 
> Hat jemand Vorschläge?
> 
> Beste Grüße
> 
> Volker
> 



Mehr Informationen über die Mailingliste Python-Leipzig