Hallo, ich habe mir ein Programm in C mit der pcap-Library geschrieben, welches anhand einer Wireshark/tcpdump Aufzeichnung einen Download rekonstruiert. Anlass: Manche Sites (z.b. youtube) verbieten das Abspeichern und entsprechende Firefox Addons funktionieren nicht immer. Bei manchen videos funktionert mein Programm, bei anderen nicht. D.h. ich kann das rekonstrierte Flash-Video manchmal abspielen. Um das genauer zu untersuchen, habe ich anhand der Seq-Nr festgestellt, dass manche Bereiche im Stream fehlen, obwohl das Video während der Aufzeichnung fehlerfrei spielt. Dann habe ich normale grosse Downloads gemacht mit einer schnellen Verbindung, und das siehe da, die abgespeicherte Datei und rekonstrierte unterscheiden sich in ein paar Bereichen, wo manche Packete offensichtlich fehlten. Der gleiche Download von einer langsamen Verbindung (Server in der Türkei) passt dann wieder, d.h. lässt sich 100% mit den aufzeichneten PCAP-Daten rekonstrieren. Frage: wie kann ich erreichen, dass eine tcpdump-Aufzeichnung mir alle Packete hergibt? PS: in bin interessiert das Programm selbst zu schreiben, da ich anderen Tools nicht traue. D.h. sie könnten weitergeben, dass jemand mit der und der IP etwas abgespeichert hat. (z.B. www.2video.de)
Gast
#2588455
Also zumindestens für Youtube reichen ein paar Zeilen irgendeiner Skriptsprache wenn man wget auf dem Rechner hat. > da ich anderen > Tools nicht traue. Da haben wir was gemeinsam.
>Also zumindestens für Youtube reichen ein paar Zeilen irgendeiner >Skriptsprache wenn man wget auf dem Rechner hat. Hat bei mir nicht funktioniert ("Bad Request"). Die Haupt-Seite selbst ist voll mit JavaScript, den konnte ich nicht interpretieren. Aber ich habe mit Firebug die URL trotzdem herausgefunden und mit wget versucht zu holen. Vergeblich. Die Anbieter versuchen ständig, die Löcher zu stopfen.
Gast
#2588482
Jürgen G. schrieb: >>Also zumindestens für Youtube reichen ein paar Zeilen irgendeiner >>Skriptsprache wenn man wget auf dem Rechner hat. > > Hat bei mir nicht funktioniert ("Bad Request"). > Die Haupt-Seite selbst ist voll mit JavaScript, den konnte ich nicht > interpretieren. > Aber ich habe mit Firebug die URL trotzdem herausgefunden und mit wget > versucht zu holen. Vergeblich. Nene, das geht schon. Mit wget die normale Url (youtube.com/watch?v=....) runterladen, COOKIES SPEICHERN, aus den flashvars (mittlerweile per Javascript eingefügt aber weiterhin verfügbar, das JS muss dazu nicht ausgeführt werden) die passende Url rauspopeln, mit wget runterladen (Cookies angeben!). Funktioniert bei mir wunderbar.
Gast
#2588487
Hier noch die Tabelle mit den itags, spart eine Menge reverse engineering.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Blöde Frage: Du hast nicht zufällig ein Notebook, mit WLAN und Kabel angeschlossen, und nur eines der Interface am aufzeichnen? War möglicherweise etwas im Cache? (TCP Seq. Nr? Dann wohl nicht) Was für ein Betriebssystem? Wie gross sind denn die fehlenden Bereiche? ps. ist das Projekt privat oder wirst du das irgendwo veröffentlichen? mfg Andreas
Und noch was, was aber nur bei Youtube funktioniert: http://www.youtube.com/html5 Dann mitmachen, danach funktionieren die üblichen Plugins wieder. Und du brauchst kein Flash. Und der Vollbildmodus unter Linux kommt aufem richtigen Screen;-) mfg Andreas
Gast
#2588543
Dir ist klar das Pakete in einer anderen Reihenfolgen kommen können ? Warum nutzt du keinen Proxy ?
Gast
#2588549
warum nicht einfach einen Proxy verwenden/schreiben. Dann den Datenstrom einfach mit auf den Platte schreiben. Dann braucht man sich nicht um das untersten schichten zu kümmern.
>Dir ist klar das Pakete in einer anderen Reihenfolgen kommen können ? Das ist schon klar. Die SeqNr wird korrekt behandelt. >Warum nutzt du keinen Proxy ? Naja, mir erschien das mit tcpdump einfacher. Einfach ein Prog im hintergrund laufen lassen, welches Downloads rekonstriert und ins /tmp schreibt. Mit Proxy habe ich wenig Erfahrung. Vor einigen hatte ich mal Squid installiert, aber da hatte ich 2 Rechner. Ich wollte aber ohne 2 Rechner auskommen. >ps. ist das Projekt privat oder wirst du das irgendwo veröffentlichen? privat >War möglicherweise etwas im Cache? (TCP Seq. Nr? Dann wohl nicht) Tja, da könnte ich auch mal nachschauen >Was für ein Betriebssystem? Linux Debian Squeeze >Wie gross sind denn die fehlenden Bereiche? 1 - 3mal 1440 Bytes (1-3 x MTU)
Gast
#2588630
Jürgen G. schrieb: > Mit Proxy habe ich wenig Erfahrung. Vor einigen hatte ich mal Squid > installiert, aber da hatte ich 2 Rechner. > Ich wollte aber ohne 2 Rechner auskommen. Wir schreiben das Jahr 2012, und fast alle Rechner heutzutage können Multitasking ......
Gast
#2588641
Und was mir noch einfällt: Kann es sein das deine Kiste überlastet ist wenn das Video spielt ?
Gast
#2588657
tcpdump hat das Problem, dass wenn Pakete schneller kommen als sie verarbeitet werden können (z.b. weil ein Plattenzugriff zu lange dauert, IO-Last zu hoch ist o.ä.) der Buffer wieder überschrieben wird, bevor tcpdump dazu gekommen ist sie abzuholen (ist ein Ringpuffer). Eigentlich gibt tcpdump am Ende des Programmlaufs auch darüber auskunft wieviele Pakete es verloren hat. Kann man mit verschiedenen Tricks / zusatztools optimieren soweit ich mich erinnern kann, Details google fragen (ist ne Weile her)
Gast
#2588780
42 schrieb: >> da ich anderen >> Tools nicht traue. > Da haben wir was gemeinsam. http://rg3.github.com/youtube-dl/download.html ist im Quellcode verfügbar und ein kurzer Blick kostet sicher weniger Aufwand als selber zu implementieren
da werde ich auf die Plattenzugriffe (fseek, fwrite) verzichten und die Payload entsprechender Pakete ins RAM schreiben. Vielleicht erwische ich dann alle Pakete. Das wäre super.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.