Thread Datei nach String durchsuchen und in Datei ausgeben (42 answers)
Opened by QWERTZ7 at 2011-03-22 10:49

QWERTZ7
 2011-03-28 08:51
#146965 #146965
User since
2011-03-22
33 Artikel
BenutzerIn
[default_avatar]
Danke schonmal an Alle für die vielen Antworten, ich arbeite mich gerade mal durch en ganzen Code den ihr gepostet habt :)

Allerdings weiß ich nicht genau welchen Code ich jetzt als Ausgangsbasis nehmen sollte bzw. worin sich die ganzen Lösungen unterschieden und wie ich danach weiter ansetzen muss um ihn zu vervollständigen.
Ich bin halt wirklich blutiger Perl-Anfänger.


Aber ich könnte mal versuchen mein vorhaben in Pseudo-Code zu fassen so wie ich eure Lösungsvorschläe bis jetzt verstanden habe (rosti hatte es ja am Ende noch gut erklärt, aber für mich war selbst das schon zu hoch... *peinlich*)

Also:
Code: (dl )
1
2
3
4
5
6
7
8
9
-Öffne Datei radius.log
-gehe diese Datei Zeilenweise durch und teile jede Zeile auf (Trennungszeichen ist ein Leerzeichen)
#So hätte man problemlos die MAC und den Switch in einem "Block"
-Durchsuche den "MAC-Block" nun auf eine der folgenden Strings: 00-11-0A ODER 00-10-83 ODER 00-01-E6
ODER 00-00-85 ODER 08-00-09 ODER 00-60-B0 ODER 00-C0-EE
-Bei einem Treffer nehme den Inhalt des "Switch-Blocks" und erstelle daraus eine Datei mit eben diesem Inhalt
als Dateinamen und .cfg als Datei-Endung (vorher Prüfung ob Datei schon vorhanden, sonst lediglich Datei
zum schreiben öffnen) schreibe danach den Inhalt des "MAC-Blocks" in die Datei.
-Wiederhole diesen Schritt bis zum Ende der Datei


Wie ich jetzt das aber genau in Code packe bzw. eure Codes weiterbaue... Wäre super wenn jemand mir das nochmal genauer erklären könnte :)

Danke schonmal, vor Allem für eure Geduld!

Gruß :)

P.S.: Habe mir auch mal das CPAN-Modul angeschaut, glaube aber nicht, dass das nutzbar ist.
Ich bin ja nicht wirklich auf die MAC-Adressen an sich aus sondern nur auf mehrere bestimmte String-Folgen die ich vergleichen und auslesen möchte.

//Edit:
Bin jetzt so weit, dass das Feld $mac alle Mac-Adressen beinhaltet und das Feld $switch alle Switch-Namen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use strict;
use IO::File;
use File::stat;


my $fh = new IO::File 'radius.log', O_RDONLY or die $!;
my $st = stat($fh) or die $!;
my $len = $st->[7];
my $feld1;
my $feld2;
my $switch;
my $feld4;
my $feld5;
my $feld6;
my $mac;

my $data;
read $fh, $data, $len;
my @lines = split /\n/, $data;

foreach my $line(@lines){
$line =~ /^(\w+\s+\w+\s+\d+\s+\d{2}:\d{2}:\d{2}\s+\d{4})\s+:\s+(\w+):(.*):\s+\[(.*)\]\s+\((.*)\)$/;
#printf "Date => %s, Auth => $2, Mesg => $3, MAC/X => $4, Client => $5\n", $1, $2, $3, $4, $5;

($feld1,$feld2,$switch,$feld4,$feld5,$feld6,$mac)= split(/\s+/,$5); #Trennung durch Whitespace

print "$switch\n"; #Gibt alle Switch-Namen untereinander aus

}


Wie muss ich nun weiter verfahren?
Last edited: 2011-03-28 11:58:33 +0200 (CEST)

View full thread Datei nach String durchsuchen und in Datei ausgeben