Sie können die Daten in dict
sammeln, wobei IP der Schlüssel ist und der Wert Zeitstempel für die angegebene IP enthält. Dann können Sie jedes Mal, wenn der Zeitstempel hinzugefügt wird, überprüfen, ob eine gegebene IP drei Zeitstempel innerhalb einer Sekunde hat:
Ergebnis:
%Vor% Oben liest die Logdatei Zeile für Zeile das Protokoll. Für jede Zeile wird ein regulärer Ausdruck verwendet, um Daten in zwei Gruppen zu erfassen: IP und Zeitstempel. Dann wird strptime
verwendet, um die Zeit zu analysieren.
Die erste Gruppe (\S*)
erfasst alles außer Leerraum. Dann erfasst [^\[]*
alles außer [
und \[
erfasst das letzte Zeichen vor dem Zeitstempel. Schließlich wird (\S*)
erneut verwendet, um alles bis zum nächsten Leerzeichen zu erfassen. Siehe Beispiel auf regex101 .
Sobald wir IP und Zeit haben, werden sie zu defaultdict
hinzugefügt, wo IP wird als Schlüssel und Wert verwendet deque
von Zeitstempeln. Bevor ein neuer Zeitstempel hinzugefügt wird, werden die alten entfernt, wenn sie älter als THRESHOLD
sind. Dies setzt voraus, dass Protokollzeilen bereits nach Zeit sortiert sind. Nach dem Hinzufügen wird die Länge geprüft und wenn COUNT
oder mehr Elemente in der Warteschlange sind, wird IP zur Ergebnismenge hinzugefügt.
Erster Schritt wäre das Parsen von Daten, Sie können dies folgendermaßen tun:
%Vor% wobei text
der Eingabetext ist.
Dies gibt eine Liste mit einem Tupel für jeden Eintrag zurück. Das erste Element von Tupel ist die IP-Adresse, das zweite das Datum.
Der nächste Schritt ist zu sehen, welche in einem 1-Sekunden-Intervall passieren und die gleiche IP haben:
%Vor%Ausgabe:
%Vor%