PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Flushen von Schreibzugriffen unter Linux



dino03
27.12.06, 13:43
Hallo !
Also ich habe ein kleines Problem ;-)
Wenn man z.B. mit tcpdump Daten vom Netzwerk mitliest, dann man man ja diese
Ausgabedaten auch in eine Datei umlenken. z.B. so ...

tcpdump -i eth0 >gesniffte-pakete.txt

Soweit kein Problem. In einer anderen Konsole kann man jetzt zusätzlich mit

tail -f gesniffte-pakete.txt

die Daten sofort anzeigen lassen, die in die Datei wandern. Auch kein Problem ;-)
Bei mir ist es so, das ich von tcpdump mitgelesene Daten über eine named Pipe
(FIFO) in ein Perl-Programm umlenken möchte. Im Prinzip ist das identisch.Das
hat bis jetzt alles wunderbar funktioniert (bei SuSE 9.2). Ab SuSE 10.1 habe ich
aber das Problem, das die Daten nur in größeren Blöcken (ein paar kBytes) in die
Datei geschrieben werden. Also immer wenn genug zusammengekommen ist, alles in
einem Rutsch. Damit habe ich aber ein Problem, da ich die Daten als durchgehenden
Strom (also aktuell) für eine Analyse benötige. Wenn die Daten erst nach 20-30sec
in der Datei erscheinen (dafür aber 2-3 Seiten auf einmal), dann ist sowieso
schon alles vorbei.

Bei Perl-Ausgaben in Dateien habe ich das Problem bereits gelöst. Es gibt eine
Umgebungsvariable ( $| ) mit der man den Ausgabeströmen mitteilen kann, das die
Daten sofort in die Datei geschrieben werden (Ausgabepuffer flushen).

Aber wie mache ich das bei Befehlen/Programmen, die in einer Shell laufen
(wie z.B. tcpdump, ...) ????????????????? :-(

Ich habe schon alles durchgesucht (man bash, apropos flush, apropos buffer, ...)
Also alles was irgendwie mit Dateipuffern, Flushen und der Shell zu tun hat.
Und Google hat mir auch nicht wirklich weitergeholfen.

Bei mir sieht das in der Praxis also so aus ...
- Die named Pipe anlegen :
mkfifo dateipuffer

- lesendes Programm starten (sind Perl-tail-Routinen drin, die aus dem FIFO lesen):
datenanalyse.pl &

- schreibendes Programm starten:
tcpdump -i etho ip >dateipuffer &

und dann _SOLLTE_ das laufen ...

Wer kann mir da weiterhelfen ??? Große Frage ;-)

Besten Dank schon mal an alle :-)
In Erwartung einer Antwort ...
Gruß

dino03
04.01.07, 10:10
Eventuell habe ich schon selber eine Lösung gefunden.
Aber leider nur für das Problem mit dem tcpdump.
Im neuen Linux-Magazin 02/07 S.:114 steht drin, wie man mit
ein paar Perl-Modulen Daten vom Netzwerk mitlesen und
analysieren kann. Runtergeladen habe ich mir die Module von CPAN
schon. jetzt muß ich nur noch etwas Zeit finden, sie auch zu
installieren und auszuprobieren. Mal sehen wie weit ich damit
komme oder ob ich wieder kurz vor dem Ziel ausgebremst werde ;-)

Na denn
Gruß

dino03
05.01.07, 10:03
Hallo !
An alle die es interessiert (Ich wollte euch das Ergebnis nicht vorenthalten)
;)
Seht mal hier nach ...
http://board.perl-community.de/cgi-bin/ikonboard/ikonboard.cgi?;act=ST;f=26;t=177;&#top
Problem gelöst. Jetzt gehts ans coden :cool:

Gruß