2016-04-28 9 views
-3

Ich brauche Ip für Protokolle extrahieren und versuchen, ein Beispiel zu suchen. Für andere Zeilen erhalten Sie einige Beispiele, aber ich kann diesen Fall nicht anwenden.Regex für mehrere Arten von OS-Logs

Ich bin schlechter Programmierer und schlimmer mit Regex. Versuchen Sie http://rubular.com aber nicht bekomme ich nicht den Ausdruck

Apr-28-16 04:16:33 [SSL-out] 111.111.111.111 warning: SMTP authentication failed; 
Apr-28-16 04:28:35 222.222.222.222 warning: SMTP authentication failed; 

I IP benötigen extrahieren, wenn die Bedingung es SMTP-Authentifizierung mit regulären Ausdruck Perl basiert auf Bash-Skript csf Firewall fehlgeschlagen

+0

Das Problem ist, dass wir nicht ein Muster von festem Format haben. Dies ist aus Ihrem Beispiel selbst ersichtlich – sjsam

+1

@Borodin - Diese Änderung war völlig unangemessen. Bitte tu das nicht nochmal. –

+0

@BradLarson: Bitte erläutern Sie sich. Wollen Sie wirklich sagen, dass die ursprüngliche Betreffzeile, auf die Sie zurückgekehrt sind, besser ist? Ich habe die eigenen Worte des OP verwendet, und ich kann nichts in den Richtlinien sehen, die meine Bearbeitung ablehnen. Was genau muss ich nie wieder tun? – Borodin

Antwort

1

Wenn jede Zeile, die Sie aufnehmen möchten, hat "SMTP-Authentifizierung fehlgeschlagen", dies sollte den Trick machen. Es erfasst die IP (in einer rudimentären Art und Weise) und setzt es in $1, wenn eine IP gefolgt von "SMTP Authentifizierung fehlgeschlagen" folgt.

use warnings; 
use strict; 

while (<DATA>){ 
    if (/(\d+\.\d+\.\d+\.\d+)(?=.*?SMTP\s+authentication\s+failed)/){ 
     print "$1\n"; 
    } 
} 

__DATA__ 
Apr-28-16 04:16:33 [SSL-out] 111.111.111.111 warning: SMTP authentication failed; 
Apr-28-16 04:16:33 [SSL-out] 111.111.111.112 warning: SMTP authentication success; 
Apr-28-16 04:16:33 [SSL-out] 111.111.111.113 warning: SMTP authentication failed; 
Apr-28-16 04:28:35 222.222.222.222 warning: SMTP authentication failed; 

Output:

111.111.111.111 
111.111.111.113 
222.222.222.222 
+1

Danke für Sie antworten @stevieb Arbeit gut und ich kann auf weitere Szenarien anwenden. – abkrim

1

Dieses Muster abruft IP-Adressen, die durch 'SMTP-Authentifizierung fehlgeschlagen' gefolgt werden, und gibt sie aus, wenn eine Übereinstimmung gefunden wird. Das IP-Muster ist nicht perfekt (wie es z. B. 123.456.000.999 ermöglicht), aber es ist ein guter Anfang.

#!/usr/bin/env perl 

use strict; 
use warnings; 

while(my $line = <DATA>) { 
    if (my ($ip) = ($line=~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*SMTP authentication failed/)) { 
     print "faulty ip=$ip\n"; 
    } 
} 

__DATA__ 
Apr-28-16 04:16:33 [SSL-out] 111.111.111.111 warning: SMTP authentication failed; 
Apr-28-16 04:28:35 222.222.222.222 warning: SMTP authentication failed; 

Ausgang:

faulty ip=111.111.111.111 
faulty ip=222.222.222.222 
Verwandte Themen