#!/bin/blog

September 2, 2004

Apache-Log anonymisieren

Filed under: Internet, perl — Tags: — martin @ 8:27 pm

Nach längerer Abstinenz habe ich heute mal wieder einen dieser liederlichen Perl-Einzeiler verbrochen. $KUNDE wollte aus Webserver-Logs die IP-Adressen entfernen, aber für die weitere Auswertung sollten die Clients doch noch unterscheidbar sein.
 
perl -ape '$i=167772161;unless($f{$F[0]}){$o++;while((0==($i+$o)%256)or
(0==($i+$o+1)%256)){$o++};$f{$F[0]}=join(".",unpack("C4",pack("N",$i+$o)))}
s/$F[0]\b/$f{$F[0]}/' < /blah/blubb/access_log

 

Advertisements

8 Comments »

  1. damit ich als absoluter perl-legastheniker das auch verstehe: du erzeugst ein array (ich deute die [] mal als array-zugriffsoperator) mit allen möglichen ip-adressen und weist jeder vorkommenden realen ip-adresse eine dieser erzeugten zu, wobei dann per s/$F[0]\b/$f{$F[0]}/ die reale durch “ihre” erzeugte adresse ersetzt wird?

    Comment by presskopp — September 2, 2004 @ 9:24 pm

  2. Siehste, ich hab doch schon immer gesagt, daß Perl selbsterklärend und selbstdokumentierend ist!

    Comment by martin — September 2, 2004 @ 9:28 pm

  3. Es stimmt aber nicht ganz, denn mit -a wird Autosplit aktiviert und $F[0] ist das erste Feld der eingelesenen Zeile. $f{$F[0]} ist die der realen Adresse zugeordnete Bogus-IP.

    Comment by martin — September 2, 2004 @ 9:30 pm

  4. also ein paar verständnislücken bleiben mir schon noch. z.b. die frage, was diese komische abbruchbedingung bedeutet (unless ist eine “while(!…)”-schleife, oder?).
    heißt das nun, dass die äußere schleife (vorausgesetzt es ist eine) ausgeführt wird, bis $f{$F[0]} “true” repräsentiert?
    wann ist $f{$F[0]} “true” (immerhin ist es ein string oder sowas)?
    wie kann man dauernd diese bekloppen $-zeichen eintippen, ohne völlig meschugge zu werden?

    Comment by presskopp — September 3, 2004 @ 8:19 am

  5. unless heißt “if not”. Der Kris (siehe Trackback) hat das Script übrigens untereinandergeschrieben und eingerückt, da wird klarer, wie simpel das ganze überhaupt ist. Das soll ja kein obfuscated Perl sein, sondern ein Einzeiler, den ich per Copy&Paste spazierentragen kann, ohne mit Editoren und Execute-Bits hantieren zu müssen.

    Comment by martin — September 3, 2004 @ 8:23 am

  6. Ketzerische Frage, aber:
    Warum hast du nicht einfach das “%h” im LogFormat in der httpd.conf angepasst/ersetzt?

    Comment by xwolf — September 3, 2004 @ 3:39 pm

  7. 1) Im Nachhinein?
    2) Durch was?

    Comment by martin — September 3, 2004 @ 3:46 pm

  8. Das Perl, vor dem meine Eltern mich immer gewarnt haben

    Glibberliebhaber Martin schreibt so Sachen wie perl -ape ‘
    $i=167772161;
    unless($f{$F[0]}) {
      $o++;
      while((0==($i+$o)%256)
         or (0==($i+$o+1)%256)) {
           $o++

    Trackback by Die wunderbare Welt von Isotopp — September 2, 2004 @ 9:51 pm


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: