Gå til innhold

Anbefalte innlegg

Jeg har et problem, serveren min har en logg, jeg skal finne IP-adressene i den. Jeg skal telle hvor mange ganger hver adresse forekommer. Og skrive ut resultat. Dette må gjøres før de nye brukerene kommer på fredag morgen.

 

Noe av det jeg har laget så langt:

 

foreach (<loggfil>){

$ip=~ \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/;

print $ip;

}

 

hvor skal $_ puttes inn?

 

Vil si hjertelig takk for all hjelp om dere hjelper meg! All hjelp mottaes, men helst et ferdig skript.

Endret av steinslett
Lenke til kommentar
Videoannonse
Annonse

her har du et kjapt forslag

 

	use strict;

open IN, "<", "loggfil" or die $!;
my %ipAdrFound = ();
while (my $line = <IN>) {
	#extract ip adr (assuming one ip adr pr line)
	my ($ip) = $line =~ m-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-;
	$ipAdrFound{$ip}++;
}

#show ip adr sorted by number of times found
for my $ip ( sort { $ipAdrFound{$b} <=> $ipAdrFound{$a} } keys %ipAdrFound ) {
	printf "IP %-14s Found: %s times\n", $ip, $ipAdrFound{$ip};
}

Lenke til kommentar

Har nå fått det hele til å virke. Men forstår fortsatt ikke alt.

Det er derimot ett problem, Linjer uten IP-adresser blir også registrert.

 

 

IP Funnet: 10 gang(er) ##(her er den tomme IP-en)

IP 123,123,123 Funnet: 2 gang(er)

IP 9,9,9,9 Funnet: 1 gang(er)

IP 41.42.43.55 Funnet: 1 gang(er)

Endret av steinslett
Lenke til kommentar

når regex ikke finner noen ip vil variabel $ip være tom (dvs "false"). for å unngå å legge denne verdien inn i hashen kan vi legge inn en sjekk slik:

 

<...resten av kode her...>

 

my ($ip) = $line =~ m-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-;

#gå til start av loopen igjen med en gang om $ip er false

next if (!$ip);

 

<...resten av kode her...>

 

IN er bare (valgfritt) navn på et filehandle.

open IN, "<", "loggfil" or die $!;

 

dette er "3 arguments open" (i mots. til gammel 2arg. måte: open IN,"<loggfil") og regnes som mer sikker.

 

anbefaler forøvrig "effective perl" boka om du starter opp med perl. den er genial og gir deg bra skills på få sider. du får den for en hundrings (inkl porto) på amazon (brukt).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...