[[Vorlage (archiviert)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Adobe_Flash/adobeflash_logo.jpg, 48, align=left)]] Mit der [:Archiv/Adobe Flash:Flashplayer]-Version 10.2 hat [wikipedia:Adobe_Systems:Adobe] dafür gesorgt, dass Flash-Filme, die man sich beispielsweise auf Videoportalen im Internet anschaut, nicht mehr im „Klarformat“ im [wikipedia: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 [wikipedia:MP3:] oder [wikipedia:Ogg: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 [wikipedia:Flash_Video:.flv]-Datei auf der Festplatte. {{{#!vorlage Hinweis 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 [:Archiv/Adobe Flash:Flashplayer] zum Abspielen von [wikipedia:Streaming_Media: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. }}} {{{#!vorlage Experten Google hat ein neues Verfahren zum Abspielen der Videos implementiert, so dass das unten beschriebene Verfahren mit Flash-Filmen von [wikipedia: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 [wikipedia:HTML5:] vorliegt. Ist dies der Fall, steht auf [askubuntu:34227:How to download html5 videos?], wie man vorgehen muss. }}} = Vorbereitungen = 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. {{{#!vorlage hinweis Das in diesem Artikel beschriebene Vorgehen funktioniert unabhängig von der angesurften Seite – ergo auch bei Videos, die über einen [wikipedia:Anonymizer: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. }}} = Prozess-ID des Flashplayers = Man lässt sich mit dem Befehl [:Shell/ps:ps] die Prozess-ID des Flashplayers ('''libflashplayer.so''') anzeigen: {{{#!vorlage befehl 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'''. {{{#!vorlage hinweis Es werden nur bei einem [:64bit-Architektur:64-bit]-Betriebssystem zwei Flash-Prozesse gezeigt. Hat man ein 32-bit-System (i386/i686), so wird man nur einen Flash-Prozess finden. }}} {{{#!vorlage experten 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 }}} = Suche der Flash-Datei = 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 [:Shell/grep:grep] besteht: {{{#!vorlage befehl cd /proc/zweite_Prozess_ID/fd/ && ls -l | grep deleted }}} Um beim obigen Beispiel zu bleiben, würde der Befehl wie folgt lauten: {{{#!vorlage befehl 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 [mark]11[/mark] -> /tmp/FlashXX3HzKCN (deleted) }}} Der Zusatz `(deleted)` zeigt an, dass, wie oben genannt, die Flash-Datei im Ordner '''[:Verzeichnisstruktur#tmp:/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. == Kombinierter Befehl == Natürlich kann man die beiden obigen Befehle auch in einem einzigen zusammenfassen. Dieser sähe dann wie folgt aus: {{{#!vorlage befehl cd /proc/$(ps x | awk '/libflashplayer.so\ /{print $1}')/fd && ls -l | grep deleted }}} = Kopieren der Flash-Datei = Genau diese Datei kann man nun an einen beliebigen Ort kopieren. Mit nachfolgendem Befehl die Flash-Datei ins [:Homeverzeichnis:] kopiert: {{{#!vorlage befehl 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:]. = Alternativen = Nachfolgend sind zwei Alternativen zu oben aufgeführtem Weg beschrieben: == Mittels Skript == Das folgende Skript ermittelt mittels [:pgrep:] die PID der Browser-plugins, durchsucht das Verzeichnis '''/proc//fd''' nach Audio-/Video-Dateien und kopiert sie in das Verzeichnis '''/tmp/flash''': {{{#!code bash #!/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//fd for the process - Verzeichnis /proc//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 }}} == Mittels lsof == 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. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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:]: {{{#!vorlage Befehl cat /proc/3192/fd/11 > $HOME/GEWÜNSCHTER_NAME_DER_DATEI.flv }}} Der Grundbefehl für eine Kopie sähe wie folgt aus: {{{#!vorlage Befehl 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. = Links = * [wikipedia:Adobe Flash:] * [wikipedia:Flash Video:] * [https://bbs.archlinux.org/viewtopic.php?id=105968&p=2 Arch-Linux Forum Flash Temp Directory] {en} * [http://www.linux.com/archive/articles/58142 Linux.com Bring back deleted files with lsof] {en} * [packages:flashplugin-installer:Adobe Flash Player Plugin Installer] * [http://hrvojebosnjak.blogspot.com/2011_07_01_archive.html Offene Dateien sichern mit lsof] {de} * [http://sartoo.de/articles/update--flash-videos-werden-nicht-mehr-unter--tmp-gespeichert.html Flash-Videos werden nicht mehr unter tmp gespeichert] {de} * [https://linuxundich.de/gnu-linux/mit-linux-bordwerkzeugen-jedes-flash-video-aus-dem-netz-laden/ Linux und Ich: Mit Linux-Bordwerkzeugen jedes Flash-Video aus dem Netz laden] {de} * [http://www.jfranken.de/homepages/johannes/vortraege/lsof_inhalt.de.html Informationen zu lsof von Johannes Franken] {de} * [:Streams_speichern:] {Übersicht} Übersichtsartikel #tag: Internet, Netzwerk, Multimedia, Audio, Video, Videoplayer, YouTube, Streaming, Streams sichern