2017-04-25 3 views
0

Ich habe eine tcpdump Prozess auf einem redhat Server, die kontinuierlich erfasst Verkehr von seiner NIC. Der tcpdump startet eine neue Capture-Datei alle 1 MB. Die Capture-Dateien sind über eine Samba-Freigabe zugänglich.Hören mit einem Skript zu tcpdump Ausgabe pcaps

Ich schreibe ein Python-Skript, das die pcap Dateien aus der Freigabe liest und verarbeitet.

Das Problem ist, dass tcpdump nicht die Datei sperrt, die gerade geschrieben wird (es ist definitiv der tcpdump und nicht der Samba-Server). Daher weiß ich nicht, ob die Datei noch geschrieben wird, während mein Skript mit der Verarbeitung beginnt. Außerdem kann die tcpdump abrupt geschlossen werden, daher ziehe ich es vor, nicht auf die Dateigröße als Indikator zu zählen.

Antwort

1

was ist mit os.path.getmtime? Dies kann verwendet werden, um die letzte Änderungszeit zu erhalten.

Oder Sie könnten den Stream von tcpdump zu Ihrem eigenen Prozess pipe tee s die Daten in Ihre eigenen Dateien und Puffer.

tcpdump | python some_script.py

Und some_script.py oder etwas ähnliches:

import fileinput 
import sys 
from tempfile import SpooledTemporaryFile 
s = SpooledTemporaryFile(max_size=1024, prefix='saves_', dir='/some/dir') 
for line in fileinput.input(sys.argv[1:]): 
    # write to spooled buffer 
    s.write(line) 
    # tee back to stdout 
    sys.stdout.write(line) 

SpooledTemporaryFile schafft einen Puffer.

fileinput.input aus stdin lesen oder eine Liste von Dateien wie nehmen:

  • python some_script.py /some/file.input.txt ... OR
  • tcpdump | python some_script.py

sys.argv[1:] verwendet wird, um die Dateien als Liste zu packen, wenn sie aufgelistet sind.

Verwandte Themen