Python: Wie man die Zeit analysiert und überprüft?

8

Wie extrahiere ich die IP-Adresse, die 10 Mal innerhalb eines Zeitintervalls von einer Sekunde auftritt?

Im folgenden Fall:

  

241.7118.197.10

     

28.252.8

    
Maria 24.12.2016, 00:23
quelle

2 Antworten

5

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:

%Vor%

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.

    
niemmi 24.12.2016, 00:52
quelle
3

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%     
Carles Mitjans 24.12.2016 00:48
quelle

Tags und Links