staging.inyokaproject.org

Webserver: Top 10 IP-Adressen Zugriff auf "/index.php"

Status: Ungelöst | Ubuntu-Version: Kubuntu 19.04 (Disco Dingo)
Antworten |

Lamy

Anmeldungsdatum:
17. September 2019

Beiträge: 7

Liebes Forum,

ich möchte die Logfiles auf meinem Webserver mit "grep", "awk" o.ä. auslesen, um die Top-10 der IP-Adressen (anonymisiert) auszugeben, welche Zugriffe auf eine bestimmte Datei, z.B. "/index.php" auf dem Webserver ausgelöst haben.

Wie muss der Befehl aussehen, um dies zu realisieren?

Viele Grüße Lamy

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Zeige doch mal bitte ein paar Zeilen aus deinem Logfile, dann kann man das sicherlich schnell basteln.

Lamy

(Themenstarter)

Anmeldungsdatum:
17. September 2019

Beiträge: 7

Hallo Doc_Symbiosis,

anbei ein paar beispielhafte Daten aus dem Logfile:

1
2
3
4
5
6
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 

Bearbeitet von Cruiz:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Wenn das erste die IP-Adresse ist:

1
2
3
4
$ sed 's# .*##' log | sort | uniq -c | sort -nr | head -10
      3 1.1.1.1
      2 1.1.1.2
      1 1.1.1.3

Statt des sed-Befehls ginge auch

1
cut -d \  -f 1 data

Lamy

(Themenstarter)

Anmeldungsdatum:
17. September 2019

Beiträge: 7

Die beispielhaften Daten aus dem Logfile waren von mir schlecht gewählt. Es kommen natürlich noch andere Dateien vor, z.B.:

1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Lamy schrieb:

Die beispielhaften Daten aus dem Logfile waren von mir schlecht gewählt. Es kommen natürlich noch andere Dateien vor, z.B.:

Was meinst Du damit? Du wolltest doch die IPs, oder? Was fehlt Dir in meinem Vorschlag?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Ich vermute ihm fehlt noch die Sortierung nach URLs...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/env python3
import fileinput
from collections import Counter, defaultdict

urls = defaultdict(Counter)

for line in fileinput.input():
    ip, _, rest = line.partition(' - ')
    *_, rest = rest.partition('"GET ')
    url, *_ = rest.partition(' ')
    urls[url].update([ip])

for url, counter in urls.items():
    print(f"{url}:")
    for ip, count in counter.most_common(10):
        print(count, ip)
$ python3 count_url_ips.py << EOF
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /index.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/datei.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /andereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/andereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.1 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.2 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-" 
1.1.1.3 - - [17/Sep/2019:00:01:17 +0200] "GET /nocheineandereseite.php HTTP/1.1" 200 89671 www.domain.de "https://www.domain.de/nocheineandereseite.js" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"
EOF
/index.php:
3 1.1.1.1
2 1.1.1.2
1 1.1.1.3
/andereseite.php:
3 1.1.1.1
2 1.1.1.2
1 1.1.1.3
/nocheineandereseite.php:
3 1.1.1.1
2 1.1.1.2
1 1.1.1.3 

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

seahawk1986 schrieb:

Ich vermute ihm fehlt noch die Sortierung nach URLs...

Ach, natürlich! Danke für die Erinnerung! Wenn ich wieder Zugriff auf ein Linux-System habe, dann baue ich mal was mit awk. Ruby ist zu einfach. ☺

Lamy

(Themenstarter)

Anmeldungsdatum:
17. September 2019

Beiträge: 7

Liebes Forum,

ich möchte aus einem Logfile die Top 10 IP-Adressen gruppiert nach Anzahl ausgeben, die einen von zwei bestimmten Alphanumerischen Begriffen, z.B. "/index.php" oder "/seite.php" in der GET oder POST-Anfrage enthalten. Wie kann ich das, z.B. mit grep oder awk lösen?

Grüße Lamy

Moderiert von ChickenLipsRfun2eat:

Der Beitrag ist von abgetrennt worden. Bitte eine Fragestellung pro Thema.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Kommt drauf an wie die Logdatei aussieht.

1
egrep "/index.php|/seite.php" LOGDATEI

könnte ein Anfang sein.

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6532

@Lamy Tip: Es kommt bei den Benutzern hier nicht besonders gut an, wenn in kurzem Abstand die gleiche Frage mehrfach gestellt wird. Es wäre für alle besser, wenn du statt dessen sagen würdest, warum dir die bisherigen Antworten nicht weiter geholfen haben.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: Zähle...

Also das Zählen kann man mit awk so machen:

1
awk '{counter[$12][$1]++}  END {for (url in counter) {printf "%s:\n", url; for (ip in counter[url]) {printf "%s (%d)\n", ip, counter[url][ip]}} }' test.log

Wobei test.log durch den Dateinamen des Logfiles ersetzt werden muss.

Das mit den Schlüsselwörtern müsstest du noch genauer ausführen. Was soll der Anwender damit abfragen können? Teile der URL oder der IP oder beides?

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: Zähle...

Hier mal nur für GET und POST Anfragen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/usr/bin/awk -f
$6 ~ /GET|POST/ {
    counter[$12][$1]++
}

END {
    for (url in counter) {
        printf "%s:\n", url
        for (ip in counter[url]) {
            count = counter[url][ip]
            printf "%s (%d)\n", ip, count
        }
    }
}

Ausführung dann mit:

./counter.awk test.log 

Wobei test.log wieder dein Logfile ist und counter.awk dein AWK-Skript.

Man kann alternativ auch akw 'Skriptinhalt' schreiben. Sieht nach dem Einfügen und Ausführen dann so aus:

$ awk '
> $6 ~ /GET|POST/ {
>     counter[$12][$1]++
> }
>
> END {
>     for (url in counter) {
>         printf "%s:\n", url
>         for (ip in counter[url]) {
>             count = counter[url][ip]
>             printf "%s (%d)\n", ip, count
>         }
>     }
> }' test.log
"https://www.domain.de/datei.js":
1.1.1.1 (3)
1.1.1.2 (2)
1.1.1.3 (1)
"https://www.domain.de/nocheineandereseite.js":
1.1.1.1 (3)
1.1.1.2 (2)
1.1.1.3 (1)
"https://www.domain.de/andereseite.js":
1.1.1.1 (3)
1.1.1.2 (2)
1.1.1.3 (1) 

Lamy

(Themenstarter)

Anmeldungsdatum:
17. September 2019

Beiträge: 7

snafu1 schrieb:

Also das Zählen kann man mit awk so machen:

1
awk '{counter[$12][$1]++}  END {for (url in counter) {printf "%s:\n", url; for (ip in counter[url]) {printf "%s (%d)\n", ip, counter[url][ip]}} }' test.log

Wobei test.log durch den Dateinamen des Logfiles ersetzt werden muss.

Das mit den Schlüsselwörtern müsstest du noch genauer ausführen. Was soll der Anwender damit abfragen können? Teile der URL oder der IP oder beides?

z.B. Sachen wie "SELECT" und "UNION"

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: Zähle...

Na, das sind ja Datenbank-Operationen und damit geht es deutlich über den Horizont von Tools wie grep oder AWK hinaus. AWK kommt ja bereits an seine Grenzen, wenn man Arrays sortieren will.

An der Stelle sollte man also zu einer "richtigen" Programmiersprache greifen. Python und Ruby wurden schon eingebracht. Kann man beide noch nicht, dann tut sich nicht viel, aber ich verwende meistens Python, also nehme ich das.

Dieses Beispiel zeigt eine Lösung als Python-Skript und fischt nur die 10 häufigsten Anfragen heraus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python3
from collections import Counter, defaultdict
from sys import argv

def count_ips(lines, n=10):
    groups = defaultdict(list)
    for line in lines:
        parts = [part.strip('"') for part in line.split()]
        ip, command, url = parts[0], parts[5], parts[11]
        if command in ('GET', 'POST'):
            groups[url].append(ip)
    return {url: Counter(ips).most_common(n) for url, ips in groups.items()}

def main():
    with open(argv[1]) as logfile:
        for url, ip_counts in count_ips(logfile).items():
            print(f'{url}:')
            for ip, count in ip_counts:
                print(f'{ip} ({count})')


if __name__ == '__main__':
    main()

Hier muss man etwas mehr hinschreiben für die Dinge, die in AWK automatisch gehen, aber letztlich ist Python deutlich mächtiger. Es bringt auch eine SQLite-Anbindung mit, sodass man die von dir gewünschten Datenbank-Kommandos einbauen kann. Alternativ könnte man sich auch nach fertigen Programmen speziell für die Analyse von Logfiles umschauen, denn die Gefahr ist hier groß, dass man das Rad neu erfindet...

Antworten |