Ich verwende tcpflow, um den Netzwerkverkehr auf einem Server zu protokollieren. Ich möchte diese Daten in eine Datei protokollieren, aber nicht alle davon. Der Überwachungsprozess würde im Hintergrund als Daemon auf unbestimmte Zeit ausgeführt werden.Wie kann ich einen unendlichen Textfluss vorverarbeiten, bevor ich ihn in eine Datei schreibe?
Einige Zeilen des Streams enthalten eine Bytezahl, und wenn ich diese Bytezahl (sagen wir 800 Bytes) sehe, dann muss ich die nächsten 800 Byte in die Datei schreiben. Wenn nicht, möchte ich nicht in die Datei schreiben.
Was ist der beste Weg für mich, diese Art von "On-the-Fly-Vorverarbeitung" des Streams zu machen, um zu entscheiden, was in die Log-Datei umgeleitet werden soll? Eine Art zweites Daemon-Skript, das den Stream abhört, der in das Skript geleitet wird?
Beispiel:
Ich sehe die folgende Zeile in dem Strom:
1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i:1:20163484235 0 0 1429
Zuerst muss ich prüfen, ob es sich um eine "set" hat. Dann untersuche ich das letzte Stück der Linie (1429), lese dann die nächsten 1429 Bytes und schreibe diese in eine Datei.
Sieht aus wie tcpflow Filterausdrücke wie tcpdump – jordanm
@jordanm unterstützt Ich glaube nicht, dass mir helfen. Hier ist eine Beispielzeile: '1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i: 1: 20163484235 0 0 1429' Ich muss zuerst sehen, dass die Zeile einen "Satz" hat, dann das letzte Stück der Linie (1429) untersuchen, dann die nächsten 1429 Bytes lesen und diese auf a schreiben Datei. – Tim
In welcher Sprache schreiben Sie dies? In welcher Umgebung wird das ausgeführt? Tags "bash" und "php" sind verwirrend ... – tucuxi