tcpdump, get *all* packets

#2588347
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)
#2588476
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.
Gast #2588482
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.
Gast #2588487
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
#2588506
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
#2588616
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)
Gast #2588657
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren