Existem vários analisadores de perl simples para arquivos wtmp, como wtmp.pl
por "Brocade Blue"
Origem completa de wtmp.pl
com erros de digitação menores:
#!/usr/bin/perl
@type = (
"Empty", "Run Lvl", "Boot", "New Time", "Old Time", "Init",
"Login", "Normal", "Term", "Account"
);
$recs = "";
while (<>) {
$recs .= $_;
}
foreach ( split( /(.{384})/s, $recs ) ) {
next if length($_) == 0 ;
my ( $type, $pid, $line, $inittab, $user, $host, $t1, $t2, $t3, $t4, $t5 ) =
$_ =~ /(.{4})(.{4})(.{32})(.{4})(.{32})(.{256})(.{4})(.{4})(.{4})(.{4})(.{4})/s;
if ( defined $line && $line =~ /\w/ ) { ##FILTER
$line =~ s/\x00+//g;
$host =~ s/\x00+//g;
$user =~ s/\x00+//g;
printf(
"%s %-8s %-12s %10s %-45s \n",
scalar( gmtime( unpack( "I4", $t3 ) ) ),
$type[ unpack( "I4", $type ) ],
$user, $line, $host
);
}
}
printf "\n"
O script pode não funcionar em máquinas de 64 bits. A linha "384" e longa com (.{4})
deve ser corrigida para o ambiente de 64 bits.
PS: para ver realmente todos os registros, desative a expressão no if
marcado com " ##FILTER
".