Ubuntu 12.04 Precise Pangolin
Mit der Flashplayer-Version 10.2 hat Adobe dafür gesorgt, dass Flash-Filme, die man sich beispielsweise auf Videoportalen im Internet anschaut, nicht mehr im „Klarformat“ im Cache des Browsers gespeichert werden. Bis Version 10.1 wurden Flash-Dateien im Ordner /tmp oder im Verzeichnis ~/.mozilla im Homeverzeichnis gespeichert, von wo aus man sich selbige sehr einfach in ein anderes Verzeichnis kopieren und anschließend in eine MP3 oder OGG umwandeln konnte.
Ab Version 10.2 werden die Flash-Dateien als gelöscht (deleted) markiert, so dass diese nicht auf einfachem Wege gesichert werden können. Dennoch gibt es Möglichkeiten, diese Sperre zu umgehen. Dafür nutzt man das Terminal [1] und drei Befehle – danach hat man die Flash-Datei als .flv-Datei auf der Festplatte.
Das in diesem Artikel beschriebene Vorgehen funktioniert nur in den Fällen, in denen es sich um eine originäre Flash-Datei handelt. Wird hingegen der Flashplayer zum Abspielen von Stream-Inhalten in anderen Formaten verwendet, so wird man im Terminal keine einschlägigen Ausgaben bekommen. Abhilfe bieten Werkzeuge wie youtube-dl, die im Artikel Streams speichern erläutert sind.
Google hat ein neues Verfahren zum Abspielen der Videos implementiert, so dass das unten beschriebene Verfahren mit Flash-Filmen von Youtube nicht mehr funktioniert. Man erhält zwar eine Ausgabe über die Flash-Dateien, jedoch handelt es sich dabei nicht um die gewünschten Dateien. Hintergrund: Youtube teilt die zwischengespeicherte Datei, die man bisher speichern konnte, in viele kleine Segmente von etwa 1,5 Megabyte auf, was es zurzeit unmöglich macht, diese zu speichern. Um dies zu umgehen, kann man überprüfen, ob das Video evtl. im Format HTML5 vorliegt. Ist dies der Fall, steht auf How to download html5 videos?, wie man vorgehen muss.
Um die Flash-Datei überhaupt in den Cache zu bekommen, muss man sich selbige anschauen. Um beim Videoportal-Beispiel zu bleiben, ruft man das Video im Browser auf. Dabei ist es unerheblich, ob es sich dabei um Firefox oder Chromium handelt. Auch ist es egal, ob man sich das Video anschaut/anhört oder gleich auf Pause klickt. Wichtig ist nur, dass man den Ladebalken bis zum Ende durchlaufen lässt, so dass die Flash-Datei komplett im Cache hinterlegt ist.
Das in diesem Artikel beschriebene Vorgehen funktioniert unabhängig von der angesurften Seite – ergo auch bei Videos, die über einen Web-Proxy angeschaut werden, mit Hilfe dessen man die vielen aus Deutschland nicht zu erreichenden Videos in den einschlägigen Videoportalen („Video in deinem Land nicht verfügbar“) trotzdem anschauen und speichern kann.
Man lässt sich mit dem Befehl ps die Prozess-ID des Flashplayers (libflashplayer.so) anzeigen:
ps x | awk '/libflashplayer.so\ /{print $1}'
Die Ausgabe sieht in etwa wie folgt aus (die Nummern bzw. Prozess-IDs können abweichen):
1828 1841
Erster Prozess kennzeichnet die Datei /usr/lib/flashplugin-installer/libflashplayer.so, zweiter die Datei /var/lib/flashplugin-installer/npwrapper.libflashplayer.so.
Es werden nur bei einem 64-bit-Betriebssystem zwei Flash-Prozesse gezeigt. Hat man ein 32-bit-System (i386/i686), so wird man nur einen Flash-Prozess finden.
Exkurs - Details zu den Flashplayern:
/var/lib/flashplugin-installer/npwrapper.libflashplayer.so beinhaltet die Datei npviewer.bin (nspluginwrapper
) und ist ein Wrapper, so dass ein 32-bit Adobe Flash-Player auf einem 64-bit-Linux laufen kann (nur bei 64-bit Systemen)
/usr/lib/flashplugin-installer/libflashplayer.so ist der eigentliche Flashplayer in einem Plugin-Container
Mit der Ausgabe der Prozess-ID kann man sich nun auf die Suche nach der Flash-Datei machen. Dazu nutzt man den folgenden Befehl, der aus den Elementen cd, ls und grep besteht:
cd /proc/zweite_Prozess_ID/fd/ && ls -l | grep deleted
Um beim obigen Beispiel zu bleiben, würde der Befehl wie folgt lauten:
cd /proc/1841/fd/ && ls -l | grep deleted
Die Ausgabe sieht dann in etwa wie folgt aus:
lrwx------ 1 flo flo 64 2011-03-25 13:14 11 -> /tmp/FlashXX3HzKCN (deleted)
Der Zusatz (deleted)
zeigt an, dass, wie oben genannt, die Flash-Datei im Ordner /tmp als gelöscht markiert wurde und das Betriebssystem über normale Wege keinen Zugriff auf selbige hat, da diesem vorgegaukelt wird, dass diese Datei gelöscht sei.
Viel wichtiger ist jedoch der markierte Teil 11
. Dies ist der interne „Name“ der Flash-Datei im .flv-Format im Cache.
Natürlich kann man die beiden obigen Befehle auch in einem einzigen zusammenfassen. Dieser sähe dann wie folgt aus:
cd /proc/$(ps x | awk '/libflashplayer.so\ /{print $1}')/fd && ls -l | grep deleted
Genau diese Datei kann man nun an einen beliebigen Ort kopieren. Mit nachfolgendem Befehl die Flash-Datei ins Homeverzeichnis kopiert:
cp 11 $HOME
Dort liegt nun die Flash-Datei (in gezeigten Falle mit Namen 11). Diese kann man nun umbenennen und weiter bearbeiten. Dazu empfiehlt sich der Artikel Audiodateien umwandeln. Direktlinks, um die FLV-Datei in MP3 oder OGG umzuwandeln sind:
Nachfolgend sind zwei Alternativen zu oben aufgeführtem Weg beschrieben:
Das folgende Skript ermittelt mittels pgrep die PID der Browser-plugins, durchsucht das Verzeichnis /proc/<PID>/fd nach Audio-/Video-Dateien und kopiert sie in das Verzeichnis /tmp/flash:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #!/bin/bash # FlashFinder: ############################################################################################################################# ############################################################################################################################# # Downloading copyrighted material may well be extremely illegal where you live, so make sure you only use this technique # # to download videos which contain your work entirely. # ############################################################################################################################# ############################################################################################################################# # Simple Collector of flash-files - Einfaches einsammeln von flash-Dateien # 1. Scan running process for pluginname - System nach Player-plugins durchsuchen # 2. Search directory /proc/<PID>/fd for the process - Verzeichnis /proc/<PID>/fd/ nach den Mime-Typen "audio|video" absuchen # 3. Extract ectension of the Mime-Typ - Extension aus Mime-Typ ermitteln (siehe Mime-Typen bei Tante Wiki) # 4. Copy file to TARGET with new name - Kopieren dieser Dateien nach $TARGET.YYYY-MM-DD_hhmm_PID.$EXT (Zeitstempel + ProzessID + Mime-Type) # 5. Licens: Do what you want to do - Lizenz: Mach domit wat de wills # ################################################################################################ ## Conditions - Voraussetzungen: ## ## - Vid has to be downloaded at all - Video muss komplett gestreamt sein ## ## - Don't close the browser - Browserfenster ist noch geöffnet ## ## - No check for existing files - generelles überschreiben vorhandener Dateien ## ## timestamp with hours+min+PID - Zeitstempel nur auf Min. abgestellt ## ################################################################################################ # the folder into which the found files should be copied TARGET="/tmp/flash/" # Wohin mit den Dateien # the Flashplayer's here VIEWER=(nspluginviewer gnash flash) # Player-Plugins z.Zt.: nspluginviewer + gnash + flash # search for Player for LOOK in ${VIEWER[@]}; do # Alle Plugins abgrasen # Look for PID' s for PID in $(pgrep -f $LOOK);do # Je Plugin Prozesse suchen while read -a FILE; do mkdir -p "$TARGET" # erzeuge immer Verzeichnis # strip Mime-type EXT=${FILE[1]##audio/x-} # nur den letzten Teil (z.B. flv/mp3 ...) EXT=${EXT##audio/} EXT=${EXT##video/x-} EXT=${EXT##video/} # copy each file to TARGET, assigning a unique name with: date/time/PID/Extension found in Mime-Type cp -L "${FILE[0]%%:*}" "$TARGET$(date '+%Y-%m-%d_%H%M')_$PID.$EXT" # search files for Mime-Type and select audio/video done < <(file -L --mime-type /proc/$PID/fd/* |egrep ": +audio/|: +video/") # Mime-Type ermitteln und selektieren done done |
Die Anzeige der als deleted
markierten Flash-Dateien mittels lsof ist ebenso möglich und geschieht ähnlich wie oben beschrieben. Mittels lsof wird nach offenen Dateien gesucht, die noch im Browser geöffnet sind.
lsof -a +L1 /
Die Ausgabe sieht dann beispielsweise so aus:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME plugin-co 3192 ubuntu 11u REG 8,3 35539888 0 68548 /tmp/FlashXY0or2k (deleted)
Ist die Ausgabe lang und unübersichtlich, können mit Hilfe des Zusatzes grep Flash
die Ergebnisse auf die für diesen Fall relevanten eingeschränkt werden. Der Befehl dazu sähe dann wie folgt aus:
lsof -a +L1 / | grep Flash
In der Ausgabe sind die PID
(hier: 3192
) und die FD
(hier: 11u
) relevant. Diese Informationen werden genutzt, um die Dateien im Verzeichnis /proc mit einem cat-Befehl zu sichern. Beachten sollte man, dass nur die Zahl nicht aber der Buchstabe der Ausgabe von FD
benutzt wird. Nachfolgender Befehl kopiert die Datei ins Homeverzeichnis:
cat /proc/3192/fd/11 > $HOME/GEWÜNSCHTER_NAME_DER_DATEI.flv
Der Grundbefehl für eine Kopie sähe wie folgt aus:
cat /proc/PID/fd/FD > $HOME/GEWÜNSCHTER_NAME_DER_DATEI.flv
Die beiden vorstehend beschriebenen cat
-Befehle funktionieren als „normaler“ Nutzer (also ohne die für das Verzeichnis /proc eigentlich obligatorischen Root-Rechte [2]), da die betreffenden Datei(en) lediglich kopiert und nicht etwa verschoben werden.
Streams speichern Übersichtsartikel
Diese Revision wurde am 1. Mai 2016 10:12 von linux_joy erstellt.