hola,
il titolo fa un pò paura ... ma è da stamani che ci lotto e vorrei vedere una luce in fondo al tunnel
Come prima cosa posto il codice, cosi potete insultarmi liberamente
codice:
sub StartIp2Name()
{
($fake, $fake, $fake, $fake, $fake, $currentYear, @fake) = localtime();
$currentYear += 1900;
# Open portalauth.log logfile
open CPLF, "/usr/sbin/clog /var/log/portalauth.log|" || die "can't access portalauth log file\n";
# Loop captive portal log file
while (<CPLF>)
{
# Rimuove l'EOL dalla riga
chomp;
# Mar 27 11:25:50 firewall logportalauth[506]: LOGIN: computering, 00:a0:d1:be:4a:2e, 10.0.1.191
($month,$day,$time,$hostname,$process,$action,$user,$macaddress,$ip,@rest)=split;
# Pulisce l'azione
$action =~ s/:$//;
# Verifica che la riga riguardi l'autenticazione
next if (not $process =~ /logportalauth/);
next if (not $action =~ /LOGIN|LOGOUT|TIMEOUT/);
# Rimuove i : e le , dal testo
$user =~ s/,$//;
$ip =~ s/,$//;
$timestamp = str2time("$currentYear/$month2dec{$month}/$day $time");
# Imposta il tipo in base all'azione
if ($action eq "LOGIN")
{
$type = 'start';
}
else
{
$type = 'end';
}
# Aggiunge l'elemento
$authList{$ip}{$user}{$timestamp} = $type;
}
# Close log file
close CPLF;
while (($ip, $usersRef) = each(%authList))
{
print "$ip:\n";
while (($user, $timestampsRef) = each(%{$usersRef}))
{
print "\t$user\n";
$timestamps = %{$timestampsRef};
foreach $timestamp (sort { $a <=> $b} keys %{$timestampsRef})
{
print $timestamp . "\n";
print $timestamps . "\n";
print $timestamps{$timestamp} . "\n";
}
}
}
}
Questo codice non fa altro che aprire un file che contiene delle righe di log tipo
codice:
Mar 27 16:38:32 gateway logportalauth[482]: LOGIN: soluzioni, 00:a0:d1:be:4a:2e, 10.0.1.191
Mar 27 16:38:36 gateway logportalauth[482]: LOGOUT: soluzioni, 00:a0:d1:be:4a:2e, 10.0.1.191
Mar 27 16:38:40 gateway logportalauth[482]: TIMEOUT: soluzioni, 00:a0:d1:be:4a:2e, 10.0.1.191
A me interessa organizzare questi dati in una gerarchia del tipo
HASH[ip] -> HASH[username] -> HASH[timestamp] -> type
"credo" che la struttura la salvi correttamente, ma come la leggo???
quello che mi esce fuori è qualcosa tipo
codice:
10.0.1.191:
soluzioni
1238168312
1/8
detto tutto questo, premetto che il perl non lo uso da qualcosa come 6 anni e, anche quando lo usavo, avevo un cattivo rapporto
( basta notare la prima riga del codice che ho postato per capirlo )
non capisco perché nel ciclo interno, quando mi ciclo i vari timestamp, non riesco a leggere il valore associato
qualcuno resce ad illuminarmi