Forum: PC Hard- und Software HTTP Requests & Responses passiv abfangen und weiterverarbeiten


von Daniel A. (daniel-a)


Lesenswert?

Ich brauche ein Programm, das mir HTTP Requests und Responses aus TCP 
streams passiv herausfischt, also ohne diese verändern. Ich will diese 
dann entweder als separate Files speichern, oder gleich ein weiteres 
Programm starten lassen dass die Daten per pipe einliest & 
weiterverarbeitet. Am Ende will ich alle übertragenen Dateien (Bilder 
und Videos) wieder zusammensetzen & zwischenspeichern, so dass ich mir 
das gute Zeugs später bequem permanent abspeichern kann.

Ich hab mir einen TLS MITM Proxy geschrieben, damit komme ich an die 
entschlüsselten Verbindungen meines iPads ran: 
https://github.com/Daniel-Abrecht/mitm-tools

Ich komme also mit ganz normalen Paketcapture Programm problemlos an die 
Daten ran. Diese stören sich auch am initialen socks Handshake in der 
regel nicht.

Alternativ könnte ich auch einen weiteren socks proxy dazwischen 
schalten, damit könnte ich den Traffic sogar beliebig weiter 
manipulieren.

Es wäre zwar einfach, das selbst auch noch zu schreiben, aber gibt es 
eventuell schon was fertiges dafür? Irgendwie finde ich nie was, das 
genau passt.

Was ich mich auch noch frage, gibt es einen Weg, iptables socks 
beizubringen, so dass ich die Verbindungen dort filtern, NATen, etc. 
kann, wie reine TCP Verbindungen? Das könnte recht praktisch sein.

von Sebastian (Gast)


Lesenswert?

Hast du schon ncat angeschaut? Und tcpdump/tcpreplay?

LG, Sebastian

von Daniel A. (daniel-a)


Lesenswert?

Mit tcpdump kann ich zwar nach dem port usw. filtern, aber HTTP Requests 
mitsamt Response in separate Files speichern geht nicht. Ich kann den 
Traffic zwar in pcap files speichern, aber die dann zu Parsen und 
weiterverarbeiten vereinfacht mein Endziel, die übertragenen Dateien 
rauszufischen, nicht wirklich.

ncat kannte ich noch nicht, scheint wie netcat zu sein. Aber ich glaube, 
damit kann ich das auch nicht wirklich umsetzen.

tcpreply & co. sehen interessant aus, kannte ich noch nicht. Sind aber 
für mein vorhaben vermutlich auch nicht das richtige.

von Daniel A. (daniel-a)


Lesenswert?

Ich habe es mir jetzt selbst geschrieben: 
https://github.com/Daniel-Abrecht/mitm-tools

intercept.py ist ein weiterer socks proxy, zum zwischen die anderen 2 
schalten. Das lädt interceptor/http.py, welches http traffic erkennt und 
dekodiert. Und bei jedem 2XX request ruft es
save_http_files.sh auf und pipet den fertig dekomprimierten Inhalt da 
rein. Bei range requests gibt er den range auch mit, und 
save_http_files.sh setzt es wieder zusammen (wobei das ist glaub ich 
noch etwas buggy.)

Das kann nun fast alles speichern, was so über die Leitung kommt.

Ganz am Ziel bin ich aber noch nicht. Bei HLS Videostreams hat man eine 
m3u playlist, die vom Browser mehrfach neu geladen werden kann. Darin 
steht, welche Video Dateien in welcher Reihenfolge geladen werden 
müssen. Ich muss noch was in die save_http_files.sh reinbauen, dass es 
m3u decodiert, und die Dateien in einem Ordner zusammenfasst, damit ich 
auch das Zeugs einfach abgreifbar habe.

von Irml (Gast)


Lesenswert?

Daniel A. schrieb:


> Ende will ich alle übertragenen Dateien (Bilder
> und Videos) wieder zusammensetzen & zwischenspeichern, so dass ich mir
> das gute Zeugs später bequem permanent abspeichern kann.


> nicht. Bei HLS Videostreams hat man eine
> m3u playlist, die vom Browser mehrfach neu geladen werden kann. Darin
> steht, welche Video Dateien in welcher Reihenfolge geladen werden
> müssen.


Du willst Streams als Videodatei?
ffmpeg -i [https://]input.m3u[8] -c copy -bsf:a aac_adtstoasc output.mp4


http://www.ffmpeg.org/ffmpeg-bitstream-filters.html#aac_005fadtstoasc

von 🐧 DPA 🐧 (Gast)


Lesenswert?

@Irml

Das Problem bei HLS Livestreams ist das hier, speziell die 
"#EXT-X-MEDIA-SEQUENCE": https://apple.co/3bCiwtQ

Der Server pollt also quasi eine EXTM3U Datei, und der Server liefert 
jeweils eine neue Playlist, mit ein paar Streams am Anfang entfernt, und 
ein paar neuen am Schluss.

Ich kriege also schon die einzelnen Fragmente abgespeichert, aber 
momentan speichere ich nur die neuste Version einer Datei. Am Ende hätte 
ich also von der EXTM3U nur die neueste Version der Datei, und die 
listet womöglich die Fragmente vom Anfang nicht auf.

Ich muss die EXTM3U Playlists also zwingend noch parsen, und mit 
Vorgängerversionen kombinieren, sonst fehlt mir eventuell der Anfang vom 
Stream. Ausserdem muss ich den Inhalt neu schreiben, dass es die 
abgefangenen lokalen Fragmente referenziert, und nicht die 
ursprünglichen Dateinamen oder externe URLs.

Im Grunde nicht schwer, aber ich muss das halt erst noch umsetzen.

von Εrnst B. (ernst)


Lesenswert?

youtube-dl versucht? Kann neben Youtube sehr viele andere 
Streaming-Seiten und Formate...


>> youtube-dl -o recording.mp4 "m3u8-URL"

von Daniel A. (daniel-a)


Lesenswert?

Jetzt ist es fertig. Range Requests werden richtig zusammengefasst, und 
wenn eine EXTM3U Datei geladen wird, erstellt es jetzt eine Datei 
M3U:irgendwas, die die lokalen Kopien der Dateien referenziert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.