Logfile Auswertung

Von: , Frage gestellt am Do, 14. Nov 2002

Hallo,

ich versuche gerade eine Logdatei zu zerlegen, aber nachfolgende Zeile tut es nicht.

if($lines =~/':137 ('/)

Auszug der Logdatei: (ohne Zeilenumbruch)

2002.10.11-20:04:59 local, Sun Nov 10 20:03:25 2002 INET: refuse from if 10001 prot 17 65.128.140.212:1025->192.168.3.3:137 (RI 9 FI 19)

Wenn ich z.B. if($lines =~/refuse from if 10001/)
eintrage, dann geht es.

Wenn es keine Mühe kostet, könnt ihr mir vielleicht verraten, wie ich die 65.128.140.212 (kann jedes mal eine andere sein) rausfiltern kann.

Hier mal mein gesamtes Script: (noch keine Endlösung)

#!/usr/bin/perl -w

open(OLDFIRE, ">> D:/old.syslog.txt");
open(SMB, ">> d:/oldsmb.txt");
open(FIRE, "d:/syslog.txt");
while($lines = <FIRE>)
{
if($lines =~/refuse from/)
{
if($lines =~/':137 ('/)
{
print SMB "$lines";
}
else
{
print OLDFIRE "$lines";
}
print "$lines";
}
}
close(FIRE);
close(SMB);
close(OLDFIRE);
*********************************************

Natürlich bin ich für andere Verbesserungen dankbar.

Ralf

4 Antworten zu dieser Frage

  1. Antwort von nach 24 Minuten 0 hilfreich
    Re: Logfile Auswertung

    Hi Ralf,

    so wie das Script hier erscheint liegt es wahrscheinlich an dne Klammern (du willst doch wahrscheinlich keine Gruppierung und den gematchten Teilstring nach $1, sondern das Zeich '(' matchen). In diesem Fall solltest du das Zeichen quoten (-> '\(').

    Ich vermute mal, daß du alle Quell-IPs ausgeben willsts (von abgewiesenen IP-Verbindungen auf die bösen (M$) SMB-Ports). Dann würde ich das sinngemäß so machen:

    while (<FIRE>)
    {
    if (m/refuse from/)         # abgewiesen?
    {
    next unless m/:137/;    # nur SMB (hier ggf andere)
    $_ =~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):\d+->/;
    # Source IP ermitteln und nach $1
    print "Source: $1\n";
    }
    }
    


    Weitere Verbesserungen (welche Info wird wohin geschrieben etc. pp.) als Übung.

    Gruß
    bernhard

    • Antwort von nach 3 Stunden 0 hilfreich
      Re^2: Logfile Auswertung

      Hi Bernhard,

      Dein Sript funzt Super. Vielen Dank.
      Könntest du mir noch ein Tipp geben wie die IP-Adressen sortieren könnte? Welche Perl-Funtkion sollte ich mir mal näher betrachten, wobei ich dopplete IP auschliessen kann?

      Gruß Ralf

      • Antwort von nach 20 Stunden 0 hilfreich
        Re^3: Logfile Auswertung

        Hi Ralf,
        doppelte Einträge ausschließen geht eigentlich am einfachsten mit Hilfe von Hashes, weil es zu einem Key immer nur einen Eintrag geben kann.

        In etwa so:

        ... Schleife drumrum, die IPs in Variable $ip liefert ...
        $found_ips{$ip}++;   # DAS WAR ALLES. Du hast jetzt die 
        # Informationen,
        #   1. daß eine IP vorgekommen ist
        #      (sofern der Key existiert)
        #   2. wie oft sie vorgekommen ist (der
        #      Eintrag (value) dient gleichzeitig
        #      als Zaehler
        ... zur Ausgabe würde ich es mal mit 'sort' versuchen ...
        foreach $ip (sort keys %found_ips)
        {
        print "$ip\n";
        }
        


        (sort kann noch viel mehr - z.B. kannst du mit eigenen sort-Blöcken arbeiten, was in dem Fall ganz praktisch waere. --> perldoc -f sort)

        Gruß
        bernhard [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

        • Antwort von nach 4 Tagen 0 hilfreich
          Re^4: Logfile Auswertung

          Danke. [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!