Buenos días, Foro de Perl.
Comunidad: les solicito su ayuda.
Tengo el siguiente problema. Tengo un log grande, pero recorté únicamente las líneas con las que estuve haciendo la prueba.
El tema es que no consigo obtener los valores que necesito, únicamente haciéndolo por separado.
El log es el siguiente:
Using text Syntax Highlighting
Aug 25 15:50:05 casamx-server1 microsoft-windows-security-auditing[success] 4660 An object was deleted.Subject:Security ID:S-1-5-21-4082760969-1594227233-3128182536-500Account Name:AdministratorAccount Domain:casaLogon ID:0xa0574Object:Object Server:SecurityHandle ID:0x124cProcess Information:Process ID:0x1918Process Name:C:\Windows\explorer.exeTransaction ID:{00000000-0000-0000-0000-000000000000}
Aug 25 15:50:05 casamx-server1 microsoft-windows-security-auditing[success] 4663 An attempt was made to access an object.Subject:Security ID:S-1-5-21-4082760969-1594227233-3128182536-500Account Name:AdministratorAccount Domain:casaLogon ID:0xa0574Object:Object Server:SecurityObject Type:FileObject Name:C:\FIM\ServerWeb.xmlHandle ID:0x124cResource Attributes:S:AIProcess Information:Process ID:0x1918Process Name:C:\Windows\explorer.exeAccess Request Information:Accesses: DELETEAccess Mask:0x10000
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Lo que yo requiero es unir estas dos líneas de log en un sola para así, por medio de expresiones regulares, obtener algunos valores.
Cabe señalar que el evento 4660 y 4663 siempre vienen así: primero el 4660 y le sigue el 4663 pero no he podido realizarlo. Hasta ahorita llevo lo siguiente:
Using perl Syntax Highlighting
#!/usr/bin/perl
my @f_deleted;
my $f_deleted = 1;
my $log = "busqueda.log";
open MYLOG,$log;
$f_deleted[0]= "<-FECHA,HORA,SERVIDOR,USUARIO,TIPO,REALIZO,ARCHIVO->";
while (<mylog>){
if ( $_ =~ /(?<FECHA>\w{3}\s+\d+)\s(?<HORA>\d+:\d+:\d+)\s(?<SERVIDOR>\w+-\w+).*ss].4663.\w.*..Subject.*Account.*Name:(?<USUARIO>.*).Account.Domain.*.Object.Type:.*Name:.(?<ARCHIVO>.*).Handle.*Accesses:.(?<REALIZO>\w+).*Mask:0x10000.*$/) {
$f_deleted[$f_deleted] = "<-$+{FECHA},$+{HORA},$+{SERVIDOR},$+{USUARIO},$+{ARCHIVO},$+{REALIZO}->";
$f_deleted += 1;
}
}
close MYLOG;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Con esta parte del código únicamente obtengo los valores del evento 4663 pero lo que necesito es que el programa me valide primero la línea que tiene 4660 y se salte a la segunda a extraer los valores.
Me podrán echar una mano.
Saludos.