C:S: Logfile auslesen mit Regexp

Beitrag lesen

Tach,
ich will mir ein einfaches Perlskript basteln, dass aus einem Iptables-Log Daten ausließt, und in einer Datenbank abspeichert.
Logausschnitt:

Nov 22 10:35:40 host kernel: [IPTB] RSN="Denied TCP" IN=eth0 OUT= MAC=00:21:85:**** SRC=78.43.213.*** DST=21.46.***.*** LEN=52 TOS=0x00 PREC=0x00 TTL=56 ID=54658 DF PROTO=TCP SPT=29266 DPT=135 WINDOW=60352 RES=0x00 SYN URGP=0
Nov 22 10:41:52 host kernel: [IPTB] RSN="Denied ICMP" IN=eth0 OUT= MAC=00:21:85:62:4c:20:00:02:85:0c:5b:00:08:00 SRC=79.202.235.*** DST=21.47.***.*** LEN=56 TOS=0x00 PREC=0x00 TTL=58 ID=18275 PROTO=ICMP TYPE=3 CODE=13 [SRC=21.47.***.*** DST=79.202.235.*** LEN=40 TOS=0x00 PREC=0x00 TTL=58 ID=18275 DF PROTO=TCP INCOMPLETE [8 bytes] ]

Um die Werte den jeweiligen Variablen zuzuweisen, benutze ich Regexp. Solange dies so ausschaut:

($month,$dom,$hour,$min,$sec,$src,$dst,$ttl,$proto,$spt,$dpt) = ($line =~ /([a-zA-Z]{3}) ([0-9]{1,2}) (\d\d):(\d\d):(\d\d).*SRC=([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*DST=([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*TTL=([0-9]*).*PROTO=([a-zA-Z]{3,4}).*SPT=([0-9]*).*DPT=([0-9]*).*/);  

funktionierts einwandfrei, und ich kann mit den Variablen so arbeiten wie ich das brauche. Doch ich kriegs jetzt einfach nicht gebacken, den Wert von RSN rauszubekommen. Hab alles Mögliche probiert. Folgende Lösung:

($month,$dom,$hour,$min,$sec,$rsn,$src,$dst,$ttl,$proto,$spt,$dpt) = ($line =~ /([a-zA-Z]{3}) ([0-9]{1,2}) (\d\d):(\d\d):(\d\d).*RSN="(.*)"[^\[]*SRC=([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*DST=([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*TTL=([0-9]*).*PROTO=([a-zA-Z]{3,4}).*SPT=([0-9]*).*DPT=([0-9]*).*/);
funktioniert nur für Zeilen mit den Protokollen UDP oder TCP (erste Zeile aus Logauszug oben), bei ICMP (zweite Zeile aus Logauszug oben) werden den Variablen kein Wert mehr zugewiesen.

Kann mir jemand helfen, wie ich das hinkriege? Langsam fällt mir nix mehr ein...
Gruß, CS