Mitlesen der TCP-Ströme eines Programms
-
Ich suche nach einer Möglichkeit, die TCP-Datenströme eines bestimmten Programms (oder auch aller Programme) zu sniffen.
Mein unmittelbare Idee war das Sniffen der Pakete mit libpcap und Extrahieren der TCP-Ströme aus den Paketdaten. Ersteres ist kein Problem, zweiteres ist wegen der verschiedenen Spezialfälle sehr komplex. Die entsprechende Antwort auf StackOverflow dazu liest sich fast schon zynisch. Auf der Suche nach Library-Lösungen für dieses Problem, bin ich auf libnids gestoßen, die laut Beschreibung genau das tun sollte, was ich will. Leider haben schon die Beispielprogramme nicht funktioniert.
Da es mir wie gesagt ausreichen würde, eine bestimmte Anwendung abzugreifen, habe ich verschiedene andere Möglichkeiten im Sinn:
- Bereitstellen eines lokalen Proxys, den die Anwendung nutzen muss. Das erfordert allerdings zusätzliche Einstellungen in der Anwendung.
- Arbeiten mit LD_PRELOAD und Hooken der entsprechenden Syscalls (
connect
usw.). Das erfordert aber, dass die Anwendung noch nicht läuft. - Genau so, blos dynamischen Injezieren der Bibliothek. Da habe ich keine Erfahrung, wie einfach oder kompliziert das ist.
- Arbeiten mit
iptables
undREDIRECT
. Damit verliere ich aber m.E. die Information über den Zielport, so dass ich mich auf einen Port beschränken müsste.
Wie man sieht, haben alle diese Alternativen Nachteile.
Deshalb meine Frage: kennt jemand eine andere Möglichkeit zur Lösung des Problems? Oder alternativ, weiß jemand die oben genannten Nachteile zu beseitigen?
-
Nicht dass ich mich da auskennen würde, aber was spricht gegen das in einer anderen Antwort erwähnte tcptrace?
("Write programs to handle text streams, because that is a universal interface." -> tcptrace ist genauso gut als Library-Lösung verwendbar)
-
Q23. Can I use the program in "real-time" mode?
A23. Sort of, but it depends on what you're trying to do. For example:
tcpdump -s4096 -w- | tcptrace -e stdin
will create data files for all connections as they're opened. For
functions that give answers WHILE processing, this works fine. For
functions that don't answer until they're done, this will require a
little more fiddling. For example:tcpdump -c100 -s4096 -w- | tcptrace -e -l stdin
for grab the next 100 packets and then stop, while extracting the
contents and then doing a "long" output listing.
-
Also inzwischen habe ich libnids zum Laufen bekommen. Irgendein Problem gab es mit den Checksummen, wenn ich die Überprüfung ausschalte, funktioniert es.
Da muss ich nochmal nachforschen und dann werde ich libnids verwenden.