Schrift
[thread]7448[/thread]

localtime session



<< >> 3 Einträge, 1 Seite
sabeth
 2005-11-08 13:39
#59880 #59880
User since
2005-11-08
2 Artikel
BenutzerIn
[default_avatar]
Zunächst ich verstehe nicht viel von Perl, eigentlich nur das was man von anderen Programmiersprachen mitnimmt.

Ich habe ein Perl Skript aus dem Internet und möchte dieses auf meinem RADIUS-Server ausführen. Der Sinn ist folgender: Ich habe eine Log-Datei die ich mit Hilfe des Skriptes auswerten möchte. Als Parameter gebe ich den Dateinamen mit. Soweit ich das erkenne, öffnet das Skript die Datei und liest dann auch erfolgreich Datensätze ein. Doch weiter kommt er nicht ....

Hier der Link zu der Datei

http://www.pgregg.com/projects/radiusreport/radiusreport-0.3b6.tar

Sie ist sehr lang und deshalb möchte ich sie hier nicht posten! Versuchsweise haben ich mal next; (ca. Zeile 301) auskommentiert. Dann werden Datensätze ausgegeben, allerding ohne Werte.

Hier meine Ausgabe wenn ich das original Programm aufrufe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
./radiusreport -l all -f /var/log/freeradius/radacct/192.168.2.2/detail-20051107

Radius Log Report for: client01
Date Login Logout Ontime Port
-----------------------------------------------------------------------------
------------------------------------------------------------------------

Radius Log Report for: client11
Date Login Logout Ontime Port
-----------------------------------------------------------------------------
------------------------------------------------------------------------


Die auszuwertende Datei sieht so aus:
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
30
31
32
33
Mon Nov  7 09:32:49 2005
NAS-IP-Address = 192.168.2.2
NAS-Port = 50003
NAS-Port-Type = Ethernet
User-Name = "client01"
Called-Station-Id = "00-14-69-98-F5-43"
Calling-Station-Id = "00-0F-1F-A6-ED-68"
Acct-Status-Type = Start
Acct-Authentic = RADIUS
Acct-Session-Id = "192.168.2.2 client01 03/01/93 00:38:18 00000001"
Acct-Delay-Time = 0
Client-IP-Address = 192.168.2.2
Acct-Unique-Session-Id = "420ad22d9b4e2d57"
Timestamp = 1131352369

Mon Nov 7 09:34:24 2005
NAS-IP-Address = 192.168.2.2
NAS-Port = 50003
NAS-Port-Type = Ethernet
User-Name = "client01"
Called-Station-Id = "00-14-69-98-F5-43"
Calling-Station-Id = "00-0F-1F-A6-ED-68"
Acct-Status-Type = Stop
Acct-Authentic = RADIUS
Acct-Session-Id = "192.168.2.2 client01 03/01/93 00:38:18 00000001"
Acct-Terminate-Cause = Port-Error
Acct-Input-Octets = 8587
Acct-Output-Octets = 6748
Acct-Session-Time = 95
Acct-Delay-Time = 0
Client-IP-Address = 192.168.2.2
Acct-Unique-Session-Id = "420ad22d9b4e2d57"
Timestamp = 1131352464


Es tut mir leid, dass ich nicht näher beschreiben kann wo das Problem liegt!
sabeth
 2005-11-08 14:26
#59881 #59881
User since
2005-11-08
2 Artikel
BenutzerIn
[default_avatar]
Hier noch die Ausgabe wenn ich next; auskommentiere:

./radiusreport -l all -f /var/log/freeradius/radacct/192.168.2.2/detail-20051107

Radius Log Report for: client01
Date Login Logout Ontime Port
-----------------------------------------------------------------------------
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
------------------------------------------------------------------------

Radius Log Report for: client11
Date Login Logout Ontime Port
-----------------------------------------------------------------------------
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
01/01/1970 01:00:00 -now- 0m00s
------------------------------------------------------------------------

Die Anzahl entspricht ungefähr den Datensätzen in meiner Log-Datei! Es scheint als wenn er die Variable $session nicht ausliest oder sie leer ist! Aber wenn ich mit print $session die Variable ausgeben erscheint folgendes:

Code: (dl )
1
2
3
4
5
6
7
./radiusreport -l all -f /var/log/freeradius/radacct/192.168.2.2/detail-20051107

Radius Log Report for: client01
Date Login Logout Ontime Port
-----------------------------------------------------------------------------
client01/192.168.2.2 cleint01 03/01/93 003818 00000001/50003/192.168.2.2client01/192.168.2.200000001/50003/192.168.2.2client01/192.168.2.2 usw.
------------------------------------------------------------------------


Wirre Daten! Aber er verarbeitet sie nicht weiter...

Danke schon mal!
Strat
 2005-11-08 15:10
#59882 #59882
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn da immer eine leerzeile zwischen den einzelnen bloecken ist, kannst du es vielleicht folgendermaszen machen (nicht getestet):
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
my $filename = "blablablubb.txt";
unless (open (FILE, "<", $filename)) {
die "Error: couldn't read file '$filename': $!\n";
} # unless
else {
local $/ = "\n\n"; # nicht zeilen, sondern bloecke lesen (trenner ist \n\n)

while (<FILE>) { # $_ enthaelt nun jeweils einen ganzen block
chomp($_); # \n\n am ende entfernen
my ($date, @rest) = split(/\n/, $_); # aufsplitten nach \n, erste zeile $date zuweisen
my %data = ();
foreach my $line (@rest) {
my ($key, $value) = split(/\s*=\s*/, $line, 2); # an = aufsplitten in maximal 2 teile
$key =~ s/^\s+//; # leerzeichen am anfang abschneiden
$data{$key} = $value; # wenn $key mehrmals vorkommt, ueberschreibst du dir aeltere keys
} # foreach

# mach was mit $date und %data, z.B.
print "Datum: $date\n";
foreach my $key (sort keys %data) {
print "$key: $data{$key}\n";
} # foreach
print "-" x 60, "\n";

} # while

close (FILE);
} # else


schau dir auch mal meine einfuehrung in perl an; die steht auf meiner HP unter Vortraege...\n\n

<!--EDIT|Strat|1131455544-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 3 Einträge, 1 Seite



View all threads created 2005-11-08 13:39.