Capturer les flux RTMP avec RTMPSuck

Le principe pour capturer un flux RTMP est relativement simple. On redirige le port de destination 1935 vers notre pc en local sur lequel écoute un daemon rtmpsrv. Le player flash va alors bêtement se connecter chez nous (et non chez le serveur de stream) et on va pouvoir récupérer toutes les informations souhaitées pour télécharger la vidéo. (Et oui un stream ce n’est ni plus ni moins qu’une vidéo stockée et téléchargée par un player en Flash, bouh!).

Pour cela quelques opérations à faire (on abordera pas le fait qu’il vous faut bien sûre la suite rtmpsuck et en version à jour S.V.P) :

* Activer la redirection avec iptables :
iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT
* Lancer rtmpsrv :
rtmpsrv
* Lisez la vidéo avec le lecteur flash (qui va taper sur votre PC, ah le con !).
* Regardez la magnifique commande rtmpdump que rtmpsrv vous balance, faites CTRL+C, copier la commande.
* Virez la règle iptables en flushant : iptables -t nat -F; iptables -t nat -X
* Coller la commande rtmpdump, exécutez-la.
ENJOY !
Note : Certains stream RTMP ne sont pas sur le port 1935, mais un autre, comme le 443 par exemple. Pour capturer le flux il faut donc rediriger le port en question vers le 1935 local, comme ceci :
iptables -t nat -A OUTPUT -p tcp –dport 443 -j REDIRECT –to-port 1935

Et parce-que je suis gentil voici une vidéo avec KZPlay o/

28 replies on “Capturer les flux RTMP avec RTMPSuck”

  1. Excellent tuto !

    Néanmoins, j'ai voulu tester ça sauf que chez moi ça ne marche pas.
    Je me suis mis sérieusement à ubuntu 11.10 il y a peu et j'ai voulu tester cette capture. Malheureusement, même si je fais exactement comme toi, après avoir redirigé le port 1935 et lancé rtmpsrv, j'actualise la page de mon navigateur où il y a le stream et là j'ai le player avec le fond noir sans le petit icone rouge "play" et impossible de lancer le player.
    J'ai essayé avec un autre navigateur mais je tombe sur le même problème.
    Pour pouvoir avoir la possibilité de lancer leur lecteur je suis obligé d'annuler la règle iptables.

    Saurais-tu si ça viens de chez moi ou bien si c'est kaze qui a amélioré leur protection ? Et si ça viens de chez moi, aurais-tu une idée pour m'aider stp ?

    Merci d'avance.

  2. Nickel pour un site diffusant sur le port 443
    Mais comment régler iptables pour les site diffusant sur le port 80 ?
    si je fais un iptables -t nat -A OUTPUT -p tcp –dport 80 -j REDIRECT –to-port 1935, plus de connexion internet !!!
    Merci

  3. Exact !

    J'ai voulu faire la même chose et j'ai eu le même problème.

    En gros, si je redirige juste le port 1935, après la réactualisation de la page du streaming, je peux plus lancer le player.
    Et si je redirige le port 80 sur le port 1935, plus de connexion internet.

    As-tu une idée pour contrer tout ces problèmes, Benpro ?
    Merci d'avance.

  4. Merci pour ta réponse Benpro. J'ai failli t'envoyer un message via la Mo-fansub ^^.

    J'ai essayé ce que tu m'as dis de faire.
    J'ai donc utilisé Wireshark pour analyser le traffic et il m'a indiqué l'ip 85.14.163.146 et j'ai fait la redirection avec cette commande "sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 85.14.163.146" (après quelques recherches, c'est la commande que j'ai trouvé… J'espère que c'est la bonne).
    Après ça j'ai essayé de rediriger le port 80 vers le 1935 avec "iptables -t nat -A OUTPUT -p tcp –dport 443 -j REDIRECT –to-port 1935" mais là j'avais le même soucie que cité précédemment.
    Alors, à la place, j'ai retapé la même commande pour rediriger le port 80 vers l'ip puis j'ai tenté une redirection de port 1935 avec "iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT" mais rebelotte, après une réactualisation de la page du stream, impossible de lancer le player.

    Est-ce que tu as une idée pour que je puisse capturer ce satané flux ?

    Je me suis dis que ça pouvait peut-être provenir de kaze qui avait changé un truc.

    Si tu veux essayer pour vérifier, j'ai fais le test avec cette vidéo : http://www.kzplay.fr/player-2648.html.

    Merci d'avance pour ta réponse.

  5. @Hiryuu :
    J’ai pas pris le temps de jeter un coup d’œil je verrais plus tard.
    Mais il faudrait plutôt utiliser
    « iptables -t nat -A OUTPUT -s 85.14.163.146 -p tcp –dport 80 -j REDIRECT »
    Ou 443 ou 1935, mais 80 j’ai jamais vu de serveur rtmp dessus.

    Je testerai directement avec le lien que tu m’as donné.

  6. Merci beaucoup pour ta réponse, Benpro.

    Je n'ai pas le temps de faire la manipulation maintenant car il est tard et je dois aller me coucher, vu que je me lève très tôt pour mon boulot, mais je testerais la manipulation dès demain (Enfin je devrais dire "tout à l'heure" vu l'heure qu'il est) dans l'après-midi, si j'ai le temps, ou le soir et je te tiendrai au courant directement après.

    Encore un grand merci pour ton aide.

  7. Salut Benpro,

    Je viens de tester la commande mais, hélas, cela ne donne rien.
    Je vais t'expliquer exactement ce que j'ai fait et pour que ce soit plus facile pour toi j'ai fais quelques captures d'écran.

    Donc, tout d'abord, j'ai utilisé la commande « iptables -t nat -A OUTPUT -s 85.14.163.146 -p tcp –dport 80 -j REDIRECT » mais avec le port 1935 (puisque tu disais que le port 80 ne donnerais sûrement rien), ce qui donne « iptables -t nat -A OUTPUT -s 85.14.163.146 -p tcp –dport 1935 -j REDIRECT ». Ensuite j'ai lancé RTMPsrv puis j'ai réactualisé la page du stream et lancé la vidéo, mais ça n'a rien donné comme tu peux le voir avec cette capture : «http://img818.imageshack.us/img818/6927/capturedu20111029000124.png».

    J'ai voulu faire la même chose mais avec le port 80 en utilisant « iptables -t nat -A OUTPUT -s 85.14.163.146 -p tcp –dport 80 -j REDIRECT » puis j'ai redirigé le port 1935 avec la commande «iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT» et j'ai réactualisé la page du stream mais comme d'habitude, impossible de lancer le player.

    J'ai également fais une capture d'écran lorsque j'utilise seulement la commande «iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT» pour que tu puisses voir ce que ça donne et que le player est bel et bien bloqué :
    «http://img444.imageshack.us/img444/783/capturedu20111029000219.png»

    J'ai également pensé que ça pouvait venir de mes règles iptables, que je n'ai toujours pas configurées. Par conséquent, ça donne ça :
    «http://img189.imageshack.us/img189/4744/capturedu20111029000316.png»

    Enfin, pour terminer, je t'ai également fais une capture de ce que j'obtiens avec wireshark pour que tu vois ce que ça donne :
    «http://img231.imageshack.us/img231/6682/capturedu20111028235649.png»

    Visiblement, wireshark n'arrive pas à tout analyser puisque il y a des "Unknown" partout.

    Voilà, je crois t'avoir tout dis. Donc, soit ça viens de moi, soit ça viens de kaze. Tu y verra sûrement plus clair avec toutes ces infos et en faisant le test avec la vidéo dont je t'avais donné le lien.
    De mon côté, j'essaie encore de trouver une solution mais j'ai surtout l'impression de tourner en rond.

    J'attends ta réponse.
    Merci d'avance, Benpro.

  8. @Hiryuu :
    Hello, en effet ce flux de Kazé est différent de K-ON! Il est chiffré entre le client flash et le serveur, qu’à cela ne tienne …
    Je te file rapidement des commandes sans explications je n’ai pas le temps, je ferais un autre article pour l’expliquer 😉

    sudo iptables -t nat -A OUTPUT -p tcp –dport 1935 -m owner ! –uid-owner proxy -j REDIRECT
    sudo su
    su proxy
    rtmpsuck
    lire la vidéo, ça dl 🙂

  9. Salut Benpro,

    j'étais arrivé à la même conclusion et je me suis donc lancé sur rtmpsuck également.
    J'avais trouvé les commandes pour utiliser rtmpsuck mais elles étaient un peu différentes des tiennes… Avec celles que j'avais trouvé, il fallait créer un autre utilisateur, permettre le partage… Enfin, c'était ce lien : http://stream-recorder.com/forum/showthread.php?t=7070 .

    Bref, j'ai pas essayé avec ce que j'avais trouvé mais j'ai essayé avec tes commandes.
    Il semble bien que ce soit ça mais j'ai juste un soucie de permission avec le dossier /bin car il semble que le fichier swfinfo tente de se placer dans le dossier /bin, mais les permission de ce dossier empêche rtmpsuck d'écrire dedans.
    J'ai voulu changer l'accès au fichier mais il refuse de changer quoi que se soit et reste sur les petits traits comme ça : http://img442.imageshack.us/img442/8138/capturedu20111030182152.png

    Donc, au final, cette erreur empêche rtmpsuck de lancer le dl comme tu peux le voir : http://img51.imageshack.us/img51/3599/capturedu20111030182636.png

    Par conséquent, j'ai encore un peu de boulot avant de lancer le dl ^^.

    En tout cas, je te remercie énormément pour ton aide. Tu n'es pas le seul à qui j'ai demandé de l'aide mais tu es le seul qui a réussi à m'aider.

    Donc, un très grand merci pour toute ton aide.

  10. Re salut,

    Autant pour moi, j'ai trouvé une solution à mon problème.
    Je l'indique ici au cas où ça puisse servir à quelqu'un.

    Donc, pour que ça marche, j'ai changé l'utilisateur proxy par root dans la commande, ce qui donne :

    sudo iptables -t nat -A OUTPUT -p tcp –dport 1935 -m owner ! –uid-owner root -j REDIRECT
    sudo su
    rtmpsuck

    Et là, ça marche.
    Je me suis rendu compte que je devais faire comme ça en relisant mon message précédent et les infos que j'avais trouvé sur "http://stream-recorder.com/forum/showthread.php?t=7070".

    Par contre, je me suis rendu compte que rtmpsuck ne donné pas d'infos sur la durée du dl.
    Tu ne connaîtrais pas une solution pour avoir cette info ?

    Encore et toujours, merci pour toute l'aide que tu m'as apporté.

  11. @Hiryuu :
    Il suffit d’être dans /tmp par exemple pour que rtmpsuck puisse écrire avec l’utilisateur proxy, ou bien affecter les bon droits à un répertoire particulier, ou bien encore créer un répertoire accessible à tout le monde, ou bien encore le lancer en root et régler la règle iptables ce que tu as fait.

    J’ai pas joué longtemps avec, je découvre en même temps. Mais de part le chiffrement, rtmptsuck ne peut pas lancer rtmpdump pour télécharger la vidéo, il se contente de sauvegarder les données déchiffrés que le serveur et le client flash lui communique (sans le savoir), mais il ne connaît pas le processus de déchiffrement (il ne joue qu’un rôle d’intermédiaire entre le flash et le serveur fcs).

    Il n’indique donc pas de progression, d’ailleurs il faut que le lecteur flash lise la vidéo, sinon rien ne transite, et en mettant en pause la vidéo, ça ne précharge pas comme youtube et co.

    Par contre c’est une piste intéressante à creuser, choper les clés de déchiffrement, à l’occasion je m’y pencherais 😉 (J’imagine qu’en décompilant le lecteur flash on doit pouvoir y trouver des infos intéressantes …)

    PS : Je note de nombreux soucis avec ce que tu fais, on ne change pas les droits de /bin ! Tu aurais pu casser ton système …

    Bref de plus tu devais être dans /bin lorsque tu as lancé la commande rtmpsuck, car celui-ci enregistre dans le dossier dans lequel tu l’as invoqué. L’idéal c’est de se faire un dossier téléchargement, et de te mettre proprio, et en groupe “proxy”, par exemple.
    Et pour changer les droits on utiliser chmod et chown.
    Quelque chose comme :
    mkdir dl_stream
    chown benpro:proxy dl_stream
    chmod 774 dl_stream
    cd dl_stream
    sudo su
    su proxy
    rtmpsuck

    Bref t’as de quoi te documenter, enfin seulement si la console t’attire 😉

  12. Encore une fois, plein d'infos utiles que tu me donne là.
    C'est vraiment super de ta part.

    Effectivement, j'avais vu que toucher aux droits de /bin n'était pas conseillé du tout.
    Mais là, tout est remis à sa place car j'ai voulu installer les derniers pilotes ATI mais en voulant faire des suppressions de paquets fglrx, j'ai fais une grosse bêtise et j'ai du réinstaller mon système ubuntu -_-… Ça m'apprendra.

    Je vais me créer un fichier comme tu me la suggéré. Je pense que ce sera plus intelligent.

    Je suivrai de très près ce blog très intéressant et ton idée sur les clés de déchiffrement.
    De mon côté aussi j’essaierai de voir comment faire, bien que je ne sois encore qu'en apprentissage sur linux contrairement à toi qui est vachement calé.

    Encore merci pour ton aide.

  13. Bonsoir,
    par hasard l'équivalent sous Windows existe ?
    Je sais que c'est de la récession de dire ça mais,
    c'est possible de rediriger les port sous windows ?

    Je fouine depuis quelque temps des tuto/explication sur le rtmp pour dumper des flux comme tu le fais j'ai reussi mais les flux wat et dayli autant dire pas grand chose, la ou je voulais chercher les vidéo sont des site utilisant le rtmpe et si j'ai bien compris c'est une version encrypter du rtmp 🙁 je suis donc sur une impasse

    sur internet c'est le blackout et si j'ai bien compris c'est Adobe qui fait pression sur ce logiciel ? les lois du marché 🙁

    ps: le site en question c'est aussi kzplay mais dramapassion utilise le même protocole

  14. Grande nouvelle (mais embêtante), kzplay a fait un petit changement et visiblement, les sous-titre sont séparés de la vidéo.

    Je n'arrive pas à trouver comment récupérer tout ça.
    Je peux récup la vidéo mais pas les sous-titres.

    Est-ce que tu saurais comment récupérer les sous-titres où comment récupérer le tout en une fois ?

    Je continu de chercher mais j'ai des doutes sur le fait de trouver ce que je cherche -_-.

  15. Ok ça marche. De mon côté je vais continuer de regarder ça. Je n’ai pas eu le temps dernièrement mais ça m’intrigue assez pour que je trifouille la-dedans dès que possible (même si je pense que tu trouveras plus vite et plus facilement que moi ^^).

  16. Bonjour,

    Avez-vous trouvé où se situaient les sous-titres ?
    Sous Winodws, avec le logiciel GetFLV, j’arrive à avoir la vidéo de kzplay mais pas les sous-titres avec.

    Et d’ailleurs, je rêve ou il passent par Amazon ?

    rtmpe://ec2-46-137-7-6.eu-west-1.compute.amazonaws.com/redirect?bufferlenght=16

  17. Salut Ben,
    Tu sais pourquoi quand je capture un flux rtmp avec rtmpdump sous Windows 7, la vidéo n’as pas toutes les informations ?
    Je m’explique :
    Sur un fichier .mp4 standard, le dossier windows qui contient le fichier, m’affiche, au moins, ces informations :
    – Longueur (durée de la vidéo)
    – Taille
    – Largeur de trame
    – Hauteur de trame
    – Notation (des étoiles que l’on peut mettre pour noter la vidéo)

    Sur un fichier .mp4 de rtmpdump, j’ai seulement :
    – Taille
    – Notation
    – Modifié le….
    – Date de création

    (“Modifié le” et “Date de création” que je peux également voir dans un fichier .mp4 standard via les propriétés du fichier)

    Dans les propriétés d’un fichiers obtenu de rtmpdump, les autres informations n’apparaissent pas (bien qu’on peut ces infos depuis un lectuer comme VLC…)

    Pourtant, toutes les informations de la vidéo sont affichées dans rtmpdump pendant le téléchargement.

    Autre chose qui se remarque pas trop sur les PC actuelles mais sur les PC moins récent (genre à 1.83GHz et 1 Go de RAM).
    C’est dans la navigation dans la vidéo.
    Sur un fichier .mp4 standard, en navigant dans la barre de lecture, ,ça prend maximum 1 à 2 seconde au lecteur pour trouver le passage.

    Sur un fichier obtenu de rtmpdump (pour un fichier en 720p), ça me prend 3 à 4 (voir même 5 secondes). Mais après que le lecteur aie trouvé le passage, la navigation se fait normalement entre le début de la vidéo et l’endroit actuel de la barre de progression de lecture.

    Par contre ça va plus rapidement quand j’avance la vidéo petit bout par petit bout via la barre de progression de lecture (sûrement car il y a moins à charger).

    Je suis désolé. J’ai essayé d’être le plus claire possible. ^^’

    Et sinon, as-tu trouvé un moyen de récupérer les sous-titre pour kzplay ?
    Et si oui, comment ?

    Je te remercie d’avoir pris le temps de lire ce message jusqu’au bout. 🙂

  18. Bonjour,
    J’aimerais savoir si quelqu’un a trouver une solution pour récupérer les sous-titre sur KzPlay. J’ai fais des recherche pour essayer des les récupérer, mais malheureusement je n’ai rien trouvé. Vus que KzPlay est gratuit pour le mois de décembre j’aurais bien aimé me faire une petit bibliothèque des animes Kaze sur mon PC

      1. Donc tu as trouvé ! 😀
        Et cette loi c’est une loi française ou européenne ?

        Mais sur un de tes précédents messages tu as dit qu’ils étaient encodés (bien qu’avec des guillemets).

        L’encodage n’utilise pas de clé.
        Le chiffrement utilise une clé. Cette clé influe sur le codage des données.

        Et d’ailleurs, tu as trouvé la réponse pour mon précédent message ? 😀

        1. J’ai dit « encodés », car c’est tellement facile à décoder… ! C’est bien une méthode de clé, en fait d’un motif permettant de changer les valeurs, comme l’algorithme de Caesar… En crypto je suis nul, mais eux aussi 😉

          Pour la loi, je ne sais pas, mais ce que je sais, c’est que je vais m’attirer des ennuis… 🙁

          Pour ta question, non, et ça ne m’intéresse pas, c’est sous Windows 😛

          1. Ok,
            Merci déjà pour “l’indice” sur le genre d’encodage ! 😉

            Et puis pour ma question, j’ai trouvé (et pas grâce à toi xD): En faite, c’était simplement le fait que la vidéo était en .flv et non pas en .mp4. Je me suis fait un peu avoir par les codecs utilisé par la vidéo (MPEG-4 et mp4a).

  19. Salut! J’ai eu déjà à utiliser rtmpdump pour piquer du flux streaming “live” sur Dailymotion. C’était il ya plus de 3 mois et pour le coup, ce n’etait pas super compliqué, c’était du basique rtmp. J’avais cree un fichier batch (WinXP!!!!) pour cela. Cependant, j’ai laissé l’ensemble et je le regrette déjà. J’ai pour habitude de rédiger des mini-tutoriels pour ne pas “refaire mon éducation” et pour celui-ci, j’aurais du. Je cherche des personnes qui s’y connaissent pour les flux cryptes et/ ou sécurises. Je travaille notamment à recuperer des flux sur le site justin.tv .

  20. Bien le bonsoir,

    Je suis intrigué également par la procédure utilisée pour ce qui est des sous-titres de kzplay. Surtout si quelqu’un a des informations à me communiquer là-dessus, où encore mieux si quelqu’un connaît la marche à suivre pour les capturer, je suis preneur…

Comments are closed.