kurtz le pirate
2014-04-16 17:18:03 UTC
bonjour,
voila, j'ai des kilomètres de logs cisco de ce genre à analyser :
012824: Apr 15 15:12:45.161 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012825: Apr 15 15:12:45.161 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012826: Apr 15 15:12:45.165 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012833: Apr 15 15:12:45.245 France: IP: s=10.100.177.130 (Vlan176),
d=224.0.0.252, len 73, dispose ip.hopcount
012835: Apr 15 15:12:45.325 France: IP: s=10.100.177.130 (Vlan176),
d=224.0.0.252, len 73, dispose ip.hopcount
012842: Apr 15 15:12:45.361 France: IP: s=10.100.176.56 (Vlan176),
d=239.2.3.1, len 1116, dispose ip.hopcount
012843: Apr 15 15:12:45.361 France: IP: s=10.100.176.56 (Vlan176),
d=239.2.3.1, len 1116, dispose ip.hopcount
012852: Apr 15 15:12:45.441 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012853: Apr 15 15:12:45.449 France: IP: s=10.100.177.127 (Vlan176),
d=224.0.0.252, len 72, dispose ip.hopcount
je dois récupérer l'adresse ip source et destination.
j'ai écris ce code :
while (<LOGFILE>) {
/.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(\d{1,})/;
print "\nsource : $1, destination : $2, longueur : $3\n";
push @{$infos{$1}}, $2;
}
close LOGFILE;
foreach my $source ( keys %infos ) {
print "De $source vers :\n";
foreach my $i ( 0 .. $#{$infos{$source} } ) {
print " $infos{$source}[$i]\n";
}
print "\n\n";
}
ca marche 'presque' bien. mon problème, c'est que ne voudrait pas qu'il
y ai plusieurs fois la même adresse ip destination. donc pouvoir pousser
dans le hash l'adresse ip que si elle n'existe pas.
pour le moment cela donne :
De 192.168.110.66 vers :
239.255.255.250
239.255.255.250
239.255.255.251
239.255.255.251
239.255.255.250
239.255.255.250
239.255.255.250
239.255.255.252
239.255.255.252
239.255.255.250
...
je voudrais :
De 192.168.110.66 vers :
239.255.255.250
239.255.255.251
239.255.255.251
239.255.255.252
il y a une astuce pour le 'push' ou bien il faut tester à chaque fois
avant d'insérer ?
merci pour les pistes...
voila, j'ai des kilomètres de logs cisco de ce genre à analyser :
012824: Apr 15 15:12:45.161 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012825: Apr 15 15:12:45.161 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012826: Apr 15 15:12:45.165 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012833: Apr 15 15:12:45.245 France: IP: s=10.100.177.130 (Vlan176),
d=224.0.0.252, len 73, dispose ip.hopcount
012835: Apr 15 15:12:45.325 France: IP: s=10.100.177.130 (Vlan176),
d=224.0.0.252, len 73, dispose ip.hopcount
012842: Apr 15 15:12:45.361 France: IP: s=10.100.176.56 (Vlan176),
d=239.2.3.1, len 1116, dispose ip.hopcount
012843: Apr 15 15:12:45.361 France: IP: s=10.100.176.56 (Vlan176),
d=239.2.3.1, len 1116, dispose ip.hopcount
012852: Apr 15 15:12:45.441 France: IP: s=10.100.176.26 (Vlan176),
d=224.0.0.252, len 50, dispose ip.hopcount
012853: Apr 15 15:12:45.449 France: IP: s=10.100.177.127 (Vlan176),
d=224.0.0.252, len 72, dispose ip.hopcount
je dois récupérer l'adresse ip source et destination.
j'ai écris ce code :
while (<LOGFILE>) {
/.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(\d{1,})/;
print "\nsource : $1, destination : $2, longueur : $3\n";
push @{$infos{$1}}, $2;
}
close LOGFILE;
foreach my $source ( keys %infos ) {
print "De $source vers :\n";
foreach my $i ( 0 .. $#{$infos{$source} } ) {
print " $infos{$source}[$i]\n";
}
print "\n\n";
}
ca marche 'presque' bien. mon problème, c'est que ne voudrait pas qu'il
y ai plusieurs fois la même adresse ip destination. donc pouvoir pousser
dans le hash l'adresse ip que si elle n'existe pas.
pour le moment cela donne :
De 192.168.110.66 vers :
239.255.255.250
239.255.255.250
239.255.255.251
239.255.255.251
239.255.255.250
239.255.255.250
239.255.255.250
239.255.255.252
239.255.255.252
239.255.255.250
...
je voudrais :
De 192.168.110.66 vers :
239.255.255.250
239.255.255.251
239.255.255.251
239.255.255.252
il y a une astuce pour le 'push' ou bien il faut tester à chaque fois
avant d'insérer ?
merci pour les pistes...
--
Kurtz le pirate
Compagnie de la Banquise
Kurtz le pirate
Compagnie de la Banquise