Die Webseiten der Fachschaft Informatik am ERG Saalfeld


Analyse der logon.log

An unserer Schule wurde 2012 auf dem Debianserver ein zusätzliches Logfile für Samba eingerichtet, in dem die Anmeldungen an Windows erfasst worden.

Aufgabe: Es soll eine Übersicht über die Nutzung des Schulnetzes erstellt werden. Dazu soll das Login des Users, der Rechnername und das Datum und die Uhrzeit der Windows-Anmeldung in einer Tabelle ausgegeben werden.
 


Jede Anmeldung eines Nutzers unseres Schulnetzes an der Windows-Domäne wird in der Datei logon.log gespeichert, wobei jede Zeile dieser Datei zu einer Anmeldung gehört. Diese Zeilen sind alle so aufgebaut wie in den folgenden 2 Beispielen:

Sep  3 08:48:32 alix Samba-prelogon: %u hkirmse %U hkirmse %a Vista %g teachers %G teachers %m ap09 %t 1409726912

bzw.

Sep 15 14:37:04 alix Samba-prelogon: %u mmustermann %U mmustermann %a WinXP %g students %G students %m pc12 %t 1410784624


Man kann diese Zeile so beschreiben:

    1.   der Monat mit 3 Buchstaben \w{3} 14.   ein Leerzeichen \s 27.   '%G' für Gruppe von %U %G
    2.   ein oder zwei Leerzeichen \s{1,2} 15.   '%U' für Login-Anmeldung %U 28.   ein Leerzeichen \s
    3.   der Tag (ein- oder zweistellig) \d{1,2} 16.   ein Leerzeichen \s 29.   die Gruppe des Users \w+
    4.   ein Leerzeichen \s 17.   das Login des Users \w+ 30.   ein Leerzeichen \s
    5.   Die Uhrzeit \d\d:\d\d:\d\d 18.   ein Leerzeichen \s 31.   '%m' für Rechnername %m
    6.   ein Leerzeichen \s 19.   '%a' für Client-BS %a 32.   ein Leerzeichen \s
    7.   der Servernamen 'alix' alix 20.   ein Leerzeichen \s 33.   der Rechnername \w*
    8.   ein Leerzeichen \s 21.   das Betriebssystem \w+ 34.   ein Leerzeichen \s
    9.   der String 'Samba-prelogon:' \w+-\w+: 22.   ein Leerzeichen \s 35.   '%t' für 'Computerzeit' %t
    10.   ein Leerzeichen \s 23.   '%g' für Gruppe von %u %g 36.   ein Leerzeichen \s
    11.   '%u' für aktueller Benutzername %u 24.   ein Leerzeichen \s 37.   Computerzeit \d{10}
    12.   ein Leerzeichen \s 25.   die Gruppe des Users \w+        
    13.   das Login des Users \w+ 26.   ein Leerzeichen \s        


Damit ergibt sich als Regex zur Beschreibung einer solchen Zeile des Logfiles:

\w{3}\s{1,2}\d{1,2}\s\d\d:\d\d:\d\d\salix\s\w+-\w+:\s%u\s\w+\s%U\s\w+\s%a\s\w+\s%g\s\w+\s%G\s\w+\s%m\s\w*\s%t\s\d{10}

Konzept:

  • wir lesen das Logfile ein und stecken das in eine Liste
  • für jedes Element dieser Liste tuen wir Folgendes:
    • wir matchen dieses Element (die Zeile des Logfiles) mit der Regex
    • dabei holen wir den Tag, den Monat, die Uhrzeit, das Login und den Rechnernamen aus der Zeile des Logfiles
    • wir geben diese Daten aus

 

Programm

import re

datei = "logon.log"

# Textdatei einlesen
handle = open(datei, "r")                  # Datei oeffnen im Lesemodus
inhalt = handle.readlines()                # Text ist zeilenweise in der Liste "inhalt"
handle.close()                                  # Datei schliessen

# Regex kompilieren
regex = re.compile(
    r"^(?P<monat>\w{3})\s{1,2}(?P<tag>\d{1,2})\s(?P<zeit>\d\d:\d\d:\d\d)\salix\s\w+-\w+:\s%u\s(?P<login>\w+)\s%U\s\w+\s%a\s\w+\s%g\s\w+\s%G\s\w+\s%m\s(?P<rechner>\w*)\s%t\s\d{10}\s*$"
)

for line in inhalt:
    # Abgleich
    m = re.match(regex, line)              # m ist das match-Objekt
    # Testen, ob die Regex gepasst hat
    if m:                                             # wenn es ein match-Objekt gibt
        # Ausgabe mt f-String (ab Python-Version 3.6 - also seit ca. 2015)
        # Das match-Objekt kann wie eine Dictionary indiziert werden.
        print(f"{m['tag']}.{m['monat']} \t {m['zeit']} \t {m['login']} \t {m['rechner']}")

 

Der Ausgabe sah bei mir so aus:

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen. Nutzen Sie dazu das hier (bzw. hier als zip-Datei) bereitgestellte Logfile.
  2. Zeichnen Sie zu diesem Programm ein Struktogramm
  3. Überarbeiten Sie das Programm so, dass die Ausgabe in Tabellenform erfolgt (korrekte Spalten)
  4. Überarbeiten Sie das Programm so, dass auch das Betriebssystem des Rechners ausgegeben wird.
  5. Überarbeiten Sie das Programm so, dass das Datum in der Form 03.11. ausgegeben wird
  6. Überarbeiten Sie das Programm so, dass die Uhrzeit in der Form "09.20 Uhr" ausgegeben wird (Sekunden entfallen).
  7. Ergänzen Sie das Programm um eine Überschrift (unterstrichen, Leerzeile).
  8. Ergänzen Sie das Programm um einen passenden Tabellenkopf.

 

zurück


© ERG Saalfeld   -   Moritz Thomae, Hans-Dietrich Kirmse   4.04.2023