Lamy
Anmeldungsdatum: 17. September 2019
Beiträge: Zähle...
|
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
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4390
Wohnort: Göttingen
|
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.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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Wenn das erste die IP-Adresse ist: | $ 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
|
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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
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: 11179
Wohnort: München
|
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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
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
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Kommt drauf an wie die Logdatei aussieht. | egrep "/index.php|/seite.php" LOGDATEI
|
könnte ein Anfang sein.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6345
Wohnort: Hamburg
|
@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
Anmeldungsdatum: 5. September 2007
Beiträge: 2123
Wohnort: Gelsenkirchen
|
Also das Zählen kann man mit awk so machen:
| 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
Anmeldungsdatum: 5. September 2007
Beiträge: 2123
Wohnort: Gelsenkirchen
|
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:
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:
| 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
Anmeldungsdatum: 5. September 2007
Beiträge: 2123
Wohnort: Gelsenkirchen
|
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...
|