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

Christian Theune ct at gocept.com
Mo Okt 26 05:43:19 UTC 2009


On 10/25/2009 08:16 PM, Dr. Volker Jaenisch wrote:
> 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?
> 
> 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?
> * einen langen Random-Integer erzeugen und dann zerlegen?
> * Die vielen String-Operationen nerven mich gewaltig an.

Ich weiss nicht wie die Performance ist, aber 'netaddr' ist unser Paket
der Wahl, wenn es um elegante Handhabung von IP-Adressen geht.

Theuni

-- 
Christian Theune · ct at gocept.com
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 0 · fax +49 345 1229889 1
Zope and Plone consulting and development



Mehr Informationen über die Mailingliste Python-Leipzig