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
Questo codice non fa altro che aprire un file che contiene delle righe di log tipocodice: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"; } } } }
A me interessa organizzare questi dati in una gerarchia del tipocodice: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
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
detto tutto questo, premetto che il perl non lo uso da qualcosa come 6 anni e, anche quando lo usavo, avevo un cattivo rapportocodice:10.0.1.191: soluzioni 1238168312 1/8
( 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



Rispondi quotando