iconAlle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr. | Welcome to Forum, please register to access all of our features.

» sWiZz-eL!Te-bo@rd » talk about tech » coding » Lasst die Hosen runter...

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 08.08.2007, 15:46
Administrator
 
Registriert seit: 10.2001
Ort: 127.0.0.1
Beiträge: 6.087
Lasst die Hosen runter...

Ich hab mir mal überlegt was wir hier im Forum noch nicht hatten, was witzig und doch noch eine Bereicherung sein kann

Da hab ich mir folgendes gedacht:
Jemand stellt eine Aufgabe im Bereich Coding / Design legt den anderen diese vor - wer Interesse hat, sich mal dazu
zu äussern oder gar gerade praktisch umzusetzen darf dies gerne tun.

Damit entstehen Diskussionen, Anregungen und vieles mehr...hoffe, dass sich einige finden werden

Hier nun mein erstes Problem:

1. Entwickle ein Programm, welche aus einem Logfile alle Client-IP-Adressen extrahiert und auf der Konsole ausgibt. Und zwar mit der Anzahl Hits (enspricht Anzahl Zeilen) pro IP-Adresse.

2. Das Programm ist als Konsolenapplikation zu implementieren, welches das zu analysierende File aus der Kommandozeile (erster Parameter) entnimmt.

3. Die Ausgabe soll absteigend sortiert nach Anzahl Hits erfolgen

4. Löse die IP-Adressen mittels DNS in Hostnamen auf.

Hinweise zum Format:
* Die Client-IP-Adresse befindet sich im Feld "c-ip"
* Die Reihenfolge und Anzahl der Felder, welche geloggt werden, ist abhängig von der Konfiguration des Web Servers
* Bei Neustart des Web Servers oder bei Änderungen der Einstellungen
werden die Header in derselben Datei neu geschrieben.

Anforderungen:
* Die Performance der Applikation ist zu beachten, da Logfiles in der Praxis sehr gross werden können.

Regeln:
* Die Verwendung von externen Libraries und Tools, sowie von .NET-Libraries, welche nicht unter dem Namespace "System" angesiedelt sind, ist nicht erlaubt

ich werde meinen Vorschlag in den nächsten Tagen posten
Angehängte Dateien
Dateityp: txt ex040730.log.txt (36,0 KB, 7x aufgerufen)
__________________
Administrator - sWiZz-eL!Te

love 1s *!(not= atoi(let
Mit Zitat antworten
  #2 (permalink)  
Alt 08.08.2007, 17:16
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
hi
find ich ne super idee, da koennen interessante sachen dabei rauskommen. nur sollte es dann nicht soweit kommen, dass leuter ihre beruflichen aufgaben hier von freiwilligen "mitarbeitern" erledigen lassen (mich kann man fuer solche zwecke gegen eine kleine abfindung gerne als contractor anheuern). das ganze sollte auschliesslich zum spass, der freude am loesen kleiner programmier-aufgaben, gemacht werden.

Zitat:
Regeln:
* Die Verwendung von externen Libraries und Tools, sowie von .NET-Libraries, welche nicht unter dem Namespace "System" angesiedelt sind, ist nicht erlaubt
frage: die programmiersprache ist aber schon frei waehlbar, oder muss es unter der .NET plattform laufen. ich haette spass daran, das ganze in Perl zu realisieren (was gibts wohl besseres fuer die logfile auswertung?)
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format."
Mit Zitat antworten
  #3 (permalink)  
Alt 08.08.2007, 18:06
Administrator
 
Registriert seit: 10.2001
Ort: 127.0.0.1
Beiträge: 6.087
ja das ist durchaus so, dass es aus Spass an der Sache gemacht wird. Für mich ist es interessant zu sehen wie andere die gleichen Probleme lösen, so evtl neue Ideen zu sammeln.

Ja ich habs einfach mal mit .NET ausprobiert, daher bin ich auf diese Einschränkungen gekommen. Natürlich ist die Sprache frei
__________________
Administrator - sWiZz-eL!Te

love 1s *!(not= atoi(let
Mit Zitat antworten
  #4 (permalink)  
Alt 09.08.2007, 08:38
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
hier mal mein loesungs-vorschlag. habs sehr einfach gehalten (keine ausnahme behandlung, etc.). wie man sieht, bin ich nur ein gelegenheits "Perler" ;-)
performance seitig koennte man fuer riesige logs z.b. anstatt "line by line" chunks einlesen. "Socket" ist
Zitat:
unter dem Namespace "System"
, hehe

PHP-Code:
#!/usr/bin/perl

use strict;
use 
Socket;

# 0 to print IPs, 1 to print host names (if possible)
my $lookup 1;

# for file processing
my @header;
my $attribute;
my $token_nr = -1;

# for sorting and printing
my %ip_occurrence;
my @ips;
my $ip;
my $host_name;

# read file line by line and
# count number of occurrences per IP
open(INFH$ARGV[0]) || die("Could not open file:".$ARGV[0]);
while (<
INFH>) {
  if (/^
#Fields:\s(.*)/) {
    
@header split(/ /, $1);
    foreach 
$attribute (@header) {
      
$token_nr += 1;
      if (
$attribute eq "c-ip") {
        
last;
      }
    }
  } 
elsif ($token_nr >= 0) {
    
$ip_occurrence{(split)[$token_nr]} += 1;
  }
}
close(INFH);

# sort ip/occurrance list descending
@ips sort {
  
$ip_occurrence{$b} <=> $ip_occurrence{$a}
keys %ip_occurrence;

# print sorted list (conditionally lookup host name)
foreach $ip(@ips){
  if (
$lookup == 1) {
    
$host_name gethostbyaddr(inet_aton($ip), AF_INET);
    if (
defined($host_name)) {
      print 
"$host_name : $ip_occurrence{$ip}\n";
    } else {
      print 
"Unknown host ($ip) : $ip_occurrence{$ip}\n";
    }
  } else {
    print 
"$ip : $ip_occurrence{$ip}\n";
  }

__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format."

Geändert von hellcat (09.08.2007 um 08:42 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 09.08.2007, 08:45
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
P.s. benutze Perl v5.8.7, aber das ding is soooo basic, das sollte unter fast jeder version laufen...
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format."
Mit Zitat antworten
  #6 (permalink)  
Alt 10.08.2007, 08:40
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
na kommt schon leute - dauert ja nicht alle welt so ein proggi zu schreiben...waere noch schoen wenn jemand mit ner Java version aufkreuzen koennte.
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format."
Mit Zitat antworten
  #7 (permalink)  
Alt 10.08.2007, 10:17
Administrator
 
Registriert seit: 10.2001
Ort: 127.0.0.1
Beiträge: 6.087
ich reichs bald nach... hoffe komme am Weekend dazu meine Variante fertig zustellen und mir mal deine anzusehen
__________________
Administrator - sWiZz-eL!Te

love 1s *!(not= atoi(let
Mit Zitat antworten
  #8 (permalink)  
Alt 13.08.2007, 06:11
Administrator
 
Registriert seit: 10.2001
Ort: 127.0.0.1
Beiträge: 6.087
sorry bin noch nicht dazugekommen
__________________
Administrator - sWiZz-eL!Te

love 1s *!(not= atoi(let
Mit Zitat antworten
  #9 (permalink)  
Alt 16.08.2007, 11:05
Administrator
 
Registriert seit: 10.2001
Ort: 127.0.0.1
Beiträge: 6.087
soo hab mir mal dein code zu Gemüte geführt.
Ich oute mich hier als nicht perler..Aber ist es nicht langsam, wenn du die Ips in ein Array schreibst und danach das Array sortierts?

Hier mein Vorschlag - leider ohne Codesample.
Ich würde es auch über ein Array lösen, und erst bei der Ausgabe die Hosts auflösen.
Allerdings bin ich überzeugt, dass Arrays für diese Aufgabe nicht geeignet sind - weil es einfach zu langsam sein wird. Alternative: Auflistungen als Alternative zu Arrays
Aber da habe ich keine Erfahrung... ich werde da wohl mal ein Vergleich programmieren, allerdings habe ich Moment gerade wenig Zeit. Wird sicherlich September!
__________________
Administrator - sWiZz-eL!Te

love 1s *!(not= atoi(let
Mit Zitat antworten
  #10 (permalink)  
Alt 16.08.2007, 11:52
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
Zitat:
Aber ist es nicht langsam, wenn du die Ips in ein Array schreibst und danach das Array sortierts?
mein perl proggi speichert die ip's / aufkommen in einer hash-map, kopiere die keys der hash-map sortiert in ein array, welches ich dann zum "sortierten" ausgeben der key/values der hash-map verwende. peformance seitig behaupte ich jetzt mal, ist ehere der "ns-lookup" der bottle-neck ;-)
aber mit "my $lookup = 0" kannst du die performance ohne lookup testen -> und ich schaeue mich nicht vor einem wettbewerb, hehe.

(der "ReDim" performance issue scheint doch sehr sprach-abhaengig zu sein)
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format."

Geändert von hellcat (16.08.2007 um 11:54 Uhr)
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an




Search Engine Optimization by vBSEO 3.2.0