PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Découper un fichier audio/vidéo sans le recompresser/réencoder

dimanche 30 juillet 2017 à 10:30

Aujourd’hui, et au risque de me faire taper sur les doigts, je vais vous montrer quelque chose de bien illégal, que je ne recommande pas, mais qui va me permettre de vous démontrer un peu plus la puissance de ffmpeg en tant que couteau suisse du multimédia. Quand l’offre légale ne permet pas de profiter de la musique dans des conditions acceptables, les bidouilleurs prennent la relève !

Vous avez certainement déjà croisé des compilations ou des albums complets sur YouTube, qui se matérialisent donc sous la forme de vidéos d’une ou deux heures voire plus, avec en description une playlist avec des timecodes. Dernièrement, après avoir écouté l’une d’entre elles, j’ai été frustré de ne pouvoir trouver l’intégralité des morceaux de cette compilation de manière légale en achat à l’unité (principalement Amazon pour moi, n’ayant rien d’autre sous la main) : certains ne sont dispos qu’en streaming, très rares ceux qui sont sur Bandcamp -ce qui est quand même cool-, d’autres sont à acheter physiquement mais à importer depuis d’autres pays pour un surcoût pas raisonnable du tout et qui ne rentrera pas dans les poches de l’artiste de toute façon. Du coup l’idée a germé dans mon esprit de faire mon gros pirate. Après tout, c’est déjà plus ou moins ce que je fais pour regarder YouTube dans mon salon, alors…

NB : par la suite l’URL de la vidéo a été volontairement modifiée. Je rappelle en outre que ce que je présente est la plupart du temps illégal, d’autant que ces compilations sont réalisées sans l’accord des artistes. Donc quand c’est possible, achetez directement à la source, c’est bien plus sympa pour eux, et BandCamp est super cool pour ça. Aussi, si vous pêchez un peu, je vous invite à relire les termes expliqués sur le multimédia pour mieux comprendre certains points de vocabulaire.

Première étape : récupération de l’audio dans le bon format

Malheureusement, l’audio est comme trop souvent le parent pauvre dans l’affaire : si YouTube propose 4K, 360, VR et tout le toutim pour la vidéo, l’audio, au max, tient à du 192kbps au format m4a inséré dans un conteneur MP4 « legacy » en 720p, ou 160kbps en Opus pour les autres via DASH. C’est pas folichon par rapport à du FLAC (j’aurai peut-être l’occasion d’y revenir dans un autre article) ou du MP3 320kbps, mais j’ai décidé de me tourner vers Opus du coup. Pour info, Opus est un codec libre de compression et diffusion audio, qui peut être utilisé aussi bien en fichier qu’en streaming live (notamment utilisé sur Mumble et donc sur Youtube pour les vidéos et les lives).

YouTube introduit une subtilité cependant : le flux est récupéré dans un conteneur Webm (simplification du MKV par Google pour embarquer de la vidéo VP8/9, concurrent du H264, utilisé notamment sur Youtube, et pour le Web de manière générale, d’où son nom). Pas vraiment ce qu’on recherche pour lancer un programme de gestion et de lecture de bibliothèque musicale.

On y va quand même :

[seboss666@seboss666-ltp ~/Téléchargements ]$ youtube-dl -F https://www.youtube.com/watch?v=MT0Bqzd3SRY
[youtube] MT0Bqzd3SRY: Downloading webpage
[youtube] MT0Bqzd3SRY: Downloading video info webpage
[youtube] MT0Bqzd3SRY: Extracting video information
[youtube] MT0Bqzd3SRY: Downloading js player vflrwQIQw
[youtube] MT0Bqzd3SRY: Downloading js player vflrwQIQw
[youtube] MT0Bqzd3SRY: Downloading MPD manifest
[info] Available formats for MT0Bqzd3SRY:
format code  extension  resolution note
139          m4a        audio only DASH audio   55k , m4a_dash container, mp4a.40.5@ 48k (22050Hz), 41.03MiB
249          webm       audio only DASH audio   72k , opus @ 50k, 43.72MiB
250          webm       audio only DASH audio   90k , opus @ 70k, 57.96MiB
140          m4a        audio only DASH audio  134k , m4a_dash container, mp4a.40.2@128k (44100Hz), 109.58MiB
171          webm       audio only DASH audio  152k , vorbis@128k, 111.64MiB
251          webm       audio only DASH audio  169k , opus @160k, 114.09MiB
278          webm       256x144    144p   61k , webm container, vp9, 30fps, video only, 20.88MiB
242          webm       426x240    240p   75k , vp9, 30fps, video only, 37.00MiB
243          webm       640x360    360p  110k , vp9, 30fps, video only, 73.01MiB
160          mp4        256x144    DASH video  134k , avc1.4d400c, 30fps, video only, 57.90MiB
134          mp4        640x360    DASH video  145k , avc1.4d401e, 30fps, video only, 79.14MiB
244          webm       854x480    480p  169k , vp9, 30fps, video only, 116.69MiB
133          mp4        426x240    DASH video  229k , avc1.4d4015, 30fps, video only, 98.79MiB
135          mp4        854x480    DASH video  259k , avc1.4d401f, 30fps, video only, 139.97MiB
247          webm       1280x720   720p  318k , vp9, 30fps, video only, 195.60MiB
136          mp4        1280x720   DASH video  473k , avc1.4d401f, 30fps, video only, 241.37MiB
248          webm       1920x1080  1080p  780k , vp9, 30fps, video only, 357.83MiB
137          mp4        1920x1080  DASH video  818k , avc1.640028, 30fps, video only, 375.13MiB
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2
43           webm       640x360    medium , vp8.0, vorbis@128k
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)

Je me tourne donc vers le code 251 pour récupérer le flux Opus dans un conteneur Webm :

[seboss666@seboss666-ltp ~/Téléchargements ]$ youtube-dl -f 251 https://www.youtube.com/watch?v=MT0Bqzd3SRY
[youtube] MT0Bqzd3SRY: Downloading webpage
[youtube] MT0Bqzd3SRY: Downloading video info webpage
[youtube] MT0Bqzd3SRY: Extracting video information
WARNING: unable to extract uploader nickname
[youtube] MT0Bqzd3SRY: Downloading js player en_US-vfln4fWRV
[youtube] MT0Bqzd3SRY: Downloading MPD manifest
[download] Destination: Epic Compilation-MT0Bqzd3SRY.webm
[download] 100% of 114.09MiB in 01:42

J’ai le donc le fichier Webm, je voudrais que ça soit maintenant un fichier exploitable par des lecteurs de musique (Amarok, Clementine, RythmBox, Banshee), mais je veux éviter de recompresser au passage, ce qui dégraderait la qualité. ffmpeg sait faire, c’est cool :

[seboss666@seboss666-ltp ~/Téléchargements ]$ ffmpeg -i Epic\ Compilation-MT0Bqzd3SRY.webm -vn -acodec copy Epic\ Compilation-MT0Bqzd3SRY.opus
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.1.1 (GCC) 20170630
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, matroska,webm, from 'Epic Compilation-MT0Bqzd3SRY.webm':
  Metadata:
    encoder         : google
  Duration: 02:00:34.82, start: -0.007000, bitrate: 132 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Output #0, opus, to 'Epic Compilation-MT0Bqzd3SRY.opus':
  Metadata:
    encoder         : Lavf57.71.100
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavf57.71.100
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=  115227kB time=02:00:34.82 bitrate= 130.5kbits/s speed=2.79e+03x    
video:0kB audio:114328kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.786729%
[seboss666@seboss666-ltp ~/Téléchargements ]$ file Epic\ Compilation-MT0Bqzd3SRY.opus 
Female Metal Vocals _ Epic Compilation-MT_Bqzd3SRY.opus: Ogg data, Opus audio,

Deux petites choses à retenir ici : par principe, je demande à retirer tout flux vidéo qui pourrait se trouver là (-vn), et je dis à ffmpeg de ne pas recompresser/réencoder le flux (-acodec copy). Simple, efficace, et on a notre flux exploitable. Au passage on gagne 1Mo à passer à un conteneur audio/vidéo à audio pur (ogg en l’occurrence qui avait d’abord été créé pour embarquer du Vorbis, un autre codec audio qu’on comparait au MP3 à sa création).

Deuxième étape : les coups de ciseaux logiciel

Bien, maintenant on veut un fichier par morceau, ce qui est bien plus pratique, si par exemple comme moi vous laissez l’autoradio de la voiture en mode shuffle, ce qui peut conduire à 4h de route sans entendre deux fois le même artiste ou le même morceau; et ça c’est cool.

Dans mon cas j’ai les timecodes, mais si vous ne les avez pas, vous pouvez toujours utiliser Audacity pour visualiser le son du fichier et déterminer où couper, l’ouverture prend du temps (un peu plus d’une minute dans mon cas), mais voilà le résultat :

Alors oui, certains me diront qu’on pourrait potentiellement tout faire avec Audacity, je ne sais pas s’il permet d’éviter de recompresser, sachant que techniquement il « importe » le fichier quand on l’ouvre pour pouvoir le manipuler (et donc recompresse à l’exportation). Et puis c’est pas assez geek, mince. Bref, ici, vous avez compris que je vais essayer d’extraire le morceau qui semble un peu plus calme que les autres (moins saturé).

Le morceau commence à 26:48 et termine à 33:21, ce qui donne un morceau de 6 minutes 33 secondes. Ce sont ces éléments que l’on va passer à ffmpeg pour faire le taf :

ffmpeg -i Epic\ Compilation-MT0Bqzd3SRY.opus -ss 00:26:48.0 -t 00:06:33.0 -acodec copy Epic\ Compilation-Track06.opus

On passe donc la position de départ (-ss), la durée du morceau (-t) et comme tout à l’heure on indique de ne pas réencoder (-acodec copy). A noter que j’indique un .0 à la fin de la seconde, en effet, lors d’une première mesure avec Audacity j’étais plutôt sur une base de 6 minutes 32 secondes et 5 dixièmes. J’aurai pu donc indiquer une durée de 00:06:32.5.

L’opération est très rapide, et si on vérifie le fichier de sortie :

[seboss666@seboss666-ltp ~/Téléchargements ]$ ffmpeg -i Epic\ Compilation-Track06.opus 
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.1.1 (GCC) 20170630
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, ogg, from 'Epic Compilation-Track06.opus':
  Duration: 00:06:33.02, start: 0.020000, bitrate: 133 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp
    Metadata:
      LANGUAGE        : eng
      ENCODER         : Lavf57.71.100

Une petite passe dans Audacity pour confirmer la bonne opération :

Et voilà. Ne reste plus qu’à faire la même avec les autres morceaux, à rajouter les noms et pourquoi pas des tags, convertir dans un autre format si vous ne pouvez pas lire de l’Opus dans votre voiture par exemple (préférez un bitrate assez élevé en destination pour ne pas trop distordre les morceaux et perdre en qualité, on part d’un Opus 160kbps en VBR tout de même).

Attention, on se rend compte que le morceau final ne fait que 6:32 et pas 6:33 comme je l’ai indiqué. Ça peut arriver (j’ai déjà eu l’occasion d’avoir les détails technique du pourquoi, j’ai pas tout compris et c’était en anglais), si vous avez également ce genre d’écart et qu’il vous manque quelques notes à la fin, n’hésitez pas à ajuster avec les dixièmes de secondes voire rajouter une seconde, étant donné la vitesse du traitement, ça ne sera pas long à refaire.

Un outil vraiment cool, et multi-plateforme en plus

En effet, même les windowsiens peuvent expérimenter ce que je présente aujourd’hui puisqu’il existe une version compilée pour eux. C’est d’ailleurs un outil recommandé si vous utilisez également Youtube-dl aussi sous Windows…

Cette trousse à outils est d’ailleurs au cœur d’autres logiciels plus ou moins connus de nos jours. J’ai évoqué en introduction l’aspect couteau suisse, ce n’est pas pour rien, et c’est une expression que j’ai déjà pu employer à propos de VLC Media Player, qui utilise la bibliothèque comme base pour son support des différents formats existants de vidéo et d’audio. On le retrouve aussi dans différents outils de conversion vidéo, soit de manière explicite, soit un peu plus masqué (ce qui est souvent le cas sous Windows malheureusement). L’utilitaire Youtube Downloader HD l’exploite lorsqu’il a besoin de fusionner des flux DASH si vous avez sélectionné une résolution type Full HD/4K.

Bref, c’est un très bon outil qu’il faut garder sous la main en cas de besoin (surtout sa documentation), la preuve, ici j’ai présenté comment découper, mais on peut aussi fusionner :P.

Bash : compter les heures, ajouter un 0 devant une heure inférieure à 10

dimanche 23 juillet 2017 à 10:30

J’ai été confronté à un problème simple à la base (pour un adminsys) : compter le nombre de requêtes sur un site, heure par heure, à partir d’un fichier access_log Apache. Finalement le problème était un peu plus tricky, et ça demande un peu plus d’explications qui ne tiennent pas dans une astuce diverse.

 Le log apache est facile à lire via bash, il contient la date et l’heure dans un format que grep n’aura aucun mal à identifier. Je shoot donc un one-liner rapide :

for i in {0..23}; do echo -ne "${i}h : $(grep "2017\:$i" access.log |wc -l)\n"; done

Simple, rapide, efficace, le quotidien du sysadmin quoi. Enfin efficace… Le résultat est sur le coup surprenant :

0h : 177026
1h : 294004
2h : 84661
3h : 0
4h : 0
5h : 0
6h : 0
7h : 0
8h : 0
9h : 0
10h : 24228
11h : 29431
12h : 28586
13h : 34634
14h : 34067
15h : 32441
16h : 28779
17h : 30497
18h : 27450
19h : 23891
20h : 21230
21h : 19748
22h : 21587
23h : 22096

Damned. J’imagine mal un site public sous WordPress capable de ne pas subir la moindre requête pendant plusieurs heures, entre monitoring, intervention client ou robots d’indexation. J’ai donc fait une connerie. Une connerie vite identifiée vu le pépin : l’heure est notée sur deux chiffres dans les logs, hors il n’y a que 0,1,2 qui peuvent matcher dans ce cas, ce qui explique les trous de 3 à 9.

Certains furieux trouveraient certainement une regex ultra cradingue à exploiter à la place (et faut pas hésiter à partager en commentaires), j’ai fait un peu différent (c’est surtout pour ça que je voulais en parler), à savoir passer deux ensembles de nombres à for :

for i in 0{1..9} {10..23}; do echo -ne "${i}h : $(grep "2017\:$i" starafrica-20170628.log |wc -l)\n"; done
01h : 24983
02h : 19756
03h : 14581
04h : 11723
05h : 10904
06h : 11458
07h : 15557
08h : 17999
09h : 21149
10h : 24228
11h : 29431
12h : 28586
13h : 34634
14h : 34067
15h : 32441
16h : 28779
17h : 30497
18h : 27450
19h : 23891
20h : 21230
21h : 19748
22h : 21587
23h : 22096

C’est beaucoup mieux.

Oui, on peut indiquer deux plages de valeurs sans avoir à faire deux boucles. Une bizarrerie découverte au hasard d’une recherche de solution à mon petit souci. En fait, dans la pratique les deux ensembles sont décomposés par Bash pour ne constituer qu’une seule liste, ce qui donne l’équivalent de la syntaxe suivante, bien plus longue et lente à écrire :

for i in "00" "01" "02" "03" "04" "05" ... "23"; do ...

Ce langage ne cesse de m’étonner, j’ai l’impression qu’on pourrait y passer une vie sans en avoir fait le tour.

Bon ça m’empêchera pas de continuer à m’intéresser à PHP et Python 😛

Alerte : Pure URL ne fonctionne plus, quelle alternative ?

mardi 18 juillet 2017 à 18:30

Dans mon dernier article en date sur les extensions Firefox que j’utilise, il y en a une diablement pratique qui nettoie vos URL des merdes de tracking Google, Facebook & co. Malheureusement depuis quelques temps et les mises à jour de Firefox, cette extension ne fonctionne plus. Voyons de plus près de quoi il retourne.

Je ne suis pas un cas isolé : les commentaires sur la page de Mozilla Add-ons est claire : les commentaires indiquent que ça ne fonctionne plus, à priori depuis la dernière ESR (Extended Support Release, soit une version figée maintenue à jour sur un cycle plus long que la version standard).

Je creuse un peu, direction le site du développeur et plus particulièrement le billet de fin d’année dernière sur les mises à jour de ses extensions. Les commentaires de l’article sont très instructifs, l’auteur répond que la plupart des extensions ne seront pas mises à jour pour passer aux webextensions, le nouveau format que doivent suivre les extensions dans le navigateur. Lui ne semble pas super motivé, bien qu’il dise que la « conversion » soit possible pour les gens motivés. La magie des projets portés par une seule personne, Cyrille Borne pourrait vous en raconter des tonnes sur le sujet.

Quelle alternative ?

Pour l’instant on n’est pas près de voir un monde débarrassé de ces éléments perturbateurs d’URL et saloperies violeuses de vie privée. Il faut donc trouver un remplaçant. Malheureusement Pure URL permettait de virer pas mal de choses et surtout d’ajouter ses propres champs à la liste connue, et ça sans avoir à trifouiller du code, ce qui est parfait pour des gens pas très au fait de la technique. Les prétendants au trône que j’ai pu trouver se concentrent pour l’instant uniquement sur Google, et intègrent les balises en dur dans leur code. Je teste actuellement Lean URL, qui effectivement fonctionne, mais ça ne bloque pas les autres horreurs ajoutées par Yahoo, Bing, Facebook, Twitter & co. Une alternative qui semble un peu plus utile (car moins filtrante quand on regarde le code), est Au revoir UTM, malheureusement toujours limitée à Google.

Je continue quand même à surveiller, dès fois qu’on aie droit à un vrai successeur facile à utiliser.

Quelques liens en vrac et en français, 20° édition

samedi 15 juillet 2017 à 10:30

J’ai pris du retard sur certains brouillons, voici donc un petit florilège d’autres articles à lire, toujours en français (sinon ça serait pas dans le titre). Bonne lecture !

Sur la communication quantique (et les exagérations)

L’annonce chinoise sur les avancées en termes de communication quantique est sensationnelle, jusqu’à ce qu’on rentre un peu dans les détails. Une fois de plus dans ce genre de cas (ça concerne des communications), c’est Stéphane Bortzmeyer qui nous fait une petite remise à plat de l’annonce.

Protéger sa vie privée – Le rire jaune

Aucune nouveauté dans cette vidéo réalisée en partenariat avec la CNIL pour ceux qui sont déjà au fait de l’hygiène numérique, mais si ce format peut faire passer le message plus facilement auprès des jeunes qui veulent pas en entendre parler, je pense qu’il faut leur montrer…

Comment tester une connexion URL avec curl sous Linux ?

J’ai déjà eu l’occasion de montrer quelques capacités de curl quand on fait des tests sur ses configurations Web (serveur ou app). Pour une fois je passe la parole à Fatiha qui va vous parler de l’utilisation de cookie.

De Mac à Linux, épisode 1 : Parce qu’il n’y a pas d’alternative

Oui, la désintoxication est possible, même en passant par Ubuntu. Et c’est très intéressant de voir le point de vue et le parcours d’un utilisateur « lambda » pour cette libération, à savoir un journaliste écrivain, David Dufresne.

Données sur le Net : tous suspects

Vous ne le savez peut-être pas, mais le grand projet de nos « élites » est de mettre la totalité de la population sous surveillance. Si pour l’instant les tribunaux, juges, cours de justice arrivent encore à les contrer, la menace est réelle sur nos libertés les plus fondamentales. Petite piqûre de rappel sur un vrai combat qui n’est absolument pas couvert par les média traditionnels sur des canaux historiques (TV, presse papier…).

WiFi gratuit : sachez éviter les pièges lors de vos vacances

C’est les vacances, beaucoup d’entre vous vont bouger de chez eux et tenter d’économiser ses précieux gigots de data en passant par des hot-spot publics. Attention toutefois aux risques pour vos infos persos, et ce billet vous rappelle quelques risques et conseils de base pour se protéger et profiter malgré tout de nos appareils préférés.

Les cahiers du débutant pour Debian Stretch sont en ligne

À nouvelle version de Debian, nouvelle version des cahiers du débutant. Bon pour cette fois le boulot était un peu moins important que la dernière fois aussi…

Comment préparer son PC pour la Nuit du Hack

Je suis allé avec mon pc perso à la nuit du hack, en prenant quelques précautions mais rien de transcendant non plus (et pareil pour le smartphone). Certains sont beaucoup plus paranoïaques et s’arment en conséquence. Bon après, quand on voit ce qu’il est possible de faire avec ces appareils parfois mal protégés, je peux comprendre.

Bye Bye Google

Une autre expérience de l’étendue de la collecte des données mise en place par Google, un modèle du genre repris depuis par quantité de services, et de comment on peut s’en passer. Toujours intéressant à lire, car plus que jamais d’actualité, quand bien même Google annonce qu’il lira moins le contenus de vos mails pour le proposer aux publicitaires.

L’heure du test — fork 2 — Qubes OS

Qubes OS est une particularité dans les systèmes d’exploitation avec une très très forte volonté de sécurité et d’isolation entre composants. Une fois de plus maintenu par une équipe trop petite par rapport à l’ampleur de la tâche, très intéressant techniquement parlant, ça le rend malheureusement difficile d’accès.

Comprendre le NOERROR de dig

lundi 10 juillet 2017 à 18:30

Récemment les serveurs DNS D’SFR ont décidé de faire paniquer un client, qui n’avait plus aucun enregistrement A sur sa zone; nous étions en plein recette sur sa nouvelle plateforme, et son site actuel paraissait du coup « en carafe ». En analysant un peu, j’ai découvert une réponse étrange que j’aimerai partager avec vous.

Donc l’agence m’interpelle à propos du domaine après avoir été alertée par le client, leur premier diagnostic semble correct, en effet, plus aucune IP n’est renvoyée sur le domaine principal ou ses différents sous-domaines :

[seboss666@SebLBNvm ~ ]$ dig client.fr +all
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59247
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:
; udp: 4096
;; QUESTION SECTION:
;client.fr. IN A

;; AUTHORITY SECTION: client.fr. 3556 IN SOA ns1.sfrbusinessteam.fr. admin.sfrbusinessteam.fr. 2017061902 43200 3600 604800 3600

;; Query time: 4 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Jun 20 09:44:37 CEST 2017
;; MSG SIZE rcvd: 104

Quel est donc ce NOERROR qu’il nous retourne ? Je connais le NXDOMAIN, mais c’était la première fois. En fouillant les résultats Google j’ai fini par avoir une réponse, une fois de plus en anglais, il me semble donc intéressant d’en parler en Français (et non, notre expert national Stéphane Bortzmeyer ne semble pas en avoir parlé). Et manifestement, contrairement à ce que dig prétend, il y a bien une erreur.

Il se trouve que le code d’erreur associé à NOERROR n’existe tout simplement pas. Mais ce qu’il signifie, c’est qu’il existe des enregistrements sur le domaine interrogé, mais pas celui qu’on recherche. Si je cherche du A, je n’en ai pas, cependant :

[seboss666@SebLBNvm ~ ]$ dig client.fr +all ANY
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 651
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;client.fr. IN ANY

;; ANSWER SECTION:
client.fr. 3307 IN NS ns1.sfrbusinessteam.fr.
client.fr. 3307 IN NS ns2.sfrbusinessteam.fr.

;; Query time: 3 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Jun 20 09:48:46 CEST 2017
;; MSG SIZE rcvd: 94

C’est exactement ce que j’ai au dessus, les champs NS existent encore (c’est d’ailleurs les seuls qui restent). La réponse de dig est donc parfaitement logique. Je n’ai pas eu la fin de l’histoire du côté d’SFR, mais bon, j’imagine qu’ils ont compris qu’ils avaient fait de la merde quelque part et qu’il fallait réparer.