Forum: PC-Programmierung tcpdump, get *all* packets


von Jürgen W. (lovos)


Lesenswert?

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)

von 42 (Gast)


Lesenswert?

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.

von Jürgen W. (lovos)


Lesenswert?

>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.

von 42 (Gast)


Lesenswert?

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.

von 42 (Gast)


Lesenswert?

Hier noch die Tabelle mit den itags, spart eine Menge reverse 
engineering.
1
itag  quality    description    format  width  height    acodec    vcodec    vpro      arate  abr    vbr
2
#5    1      low        FLV    400    240      MP3      SVQ              22050   64000   250000
3
#18    4      high      MP4    480    360      AAC      H.264    Baseline@L3.0  44100   96000   500000
4
#22    7      highdef      MP4    1280  720      AAC      H.264    High@L3.1    44100  152000  2000000
5
#34    3      lowdef      FLV    640    360      AAC      H.264    Main@L3.0    44100  128000   500000
6
#35    5      stddef      FLV    854    480      AAC      H.264    Main@L3.0    44100  128000   800000
7
#37    8      fhighdef    MP4    1920  1080    AAC      H.264    High@L4.0    44100  152000  3500000
8
#38    9      origdef      MP4    4096  3072    AAC      H.264
9
#43    2      lowdef      WebM  640    360      Vorbis    VP8              44100  128000   500000
10
#45    6      highdef      WebM  1280  720      Vorbis    VP8              44100  192000  2000000
11
#44*  4,5**    ?        WebM  640    480      Vorbis    VP8              44100  128000   700000
12
#46***  9      ?        WebM  1920  1080    Vorbis    VP8              44100  152000  3500000
13
#nach http://userscripts.org/scripts/review/62634 und weiteren Links der selben Seite

von Andreas B. (andreasb)


Lesenswert?

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

von Andreas B. (andreasb)


Lesenswert?

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

von tcp (Gast)


Lesenswert?

Dir ist klar das Pakete in einer anderen Reihenfolgen kommen können ?
Warum nutzt du keinen Proxy ?

von Peter II (Gast)


Lesenswert?

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.

von Jürgen W. (lovos)


Lesenswert?

>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)

von Tagesform (Gast)


Lesenswert?

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 ......

von Tagesform (Gast)


Lesenswert?

Und was mir noch einfällt: Kann es sein das deine Kiste überlastet ist 
wenn das Video spielt ?

von hmmmm (Gast)


Lesenswert?

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)

von Martin (Gast)


Lesenswert?

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

von Jürgen W. (lovos)


Lesenswert?

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.

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.