Chrooter apache
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Graver en ligne de commande
Astuces
Astuces en Bash
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
 
Toutes les traductions
Toutes les traductions
Hackin9

Il y a actuellement 6 visiteurs connectés sur le site !

Google
Télécharger avec wget
Télécharger avec wget

 

Introduction
wget
Téléchargement à l'heure
Téléchargement à la journée
Pages web dynamiques
SSL et Cookies
Liste d'url
Jongler avec la bande passante
Conclusion

 

Introduction

Avez-vous déjà essayé de télécharger un fichier si gros depuis un lien si lent que devez garder votre navigateur connecté pendant des heures voire des jours ? Que faire si vous disposez de 40 fichiers en lien sur une seule page, qu'il vous les faut tous -- allez-vous péniblement cliquer sur chacun? Que faire si le navigateur plante avant que vous ayez terminé? GNU/Linux est équipé d'un certain nombre d'outils de téléchargement en tâche de fond, indépendamment du navigateur. Cela permet de se déconnecter, de reprendre des téléchargements interrompus et même de les programmer afin qu'ils se produisent lors des heures creuses

Les navigateurs sont destinés à rendre le web interactif -- cliquez et attendez le résultat après quelques secondes. Mais il existe nombre de fichiers pour lesquels le téléchargement peut prendre plus de quelques secondes, même avec la plus rapide des connexions. Par exemple, les images ISO images, populaires parmi ceux qui gravent leur propre distribution GNU/Linux. Quelques navigateur web, particulièrement ceux mal codés, se comportent mal lors de longues vacations, manquant de mémoire ou bien plantant au moment le moins opportun. Malgré la fusion de quelques navigateurs avec des gestionnaires de téléchargement, nombre d'entre eux ne prennent pas encore en charge les sélections multiples et les opérations d'étirement qui facilitent le transfert de plusieurs fichiers à la fois. Vous devez également rester connecté jusqu'à ce que le téléchargement soit fini. Finalement, vous devez rester au bureau pour cliquer sur le lien démarrant le téléchargement, au risque d'irriter vos collègues avec qui vous partagez la bande passante.

Le téléchargement de gros fichiers est une tâche qui convient mieux à certains type d'outils. Cet article présente comment combiner différents utilitaires GNU/Linux, tels que lynx, wget, at, crontab, etc. pour résoudre nombre de téléchargements. Quelques scripts simples vont aussi être employés, donc il vous faut quelques notions de bash.

Wget

Toutes les distributions majeures incluent l'outil de téléchargement wget

bash$ wget http://place.your.url/here

Wget peut aussi prendre en charge le FTP, les estampilles de date et les miroirs récursifs de site web entier -- et si ne prenez garde, des sites web dans leur ensemble et les liens vers d'autres sites:

bash$ wget -m http://target.web.site/subdirectory

En raison de sa puissance de charge élevée, cet outil est destiné à un serveur, cet outil est respectueux du protocole robots.txt lors du mirroring. Il existe plusieurs options de commande pour contrôler exactement ce que wget établit en symétrie, limitant les types de liens suivis et les types de fichiers téléchargés. Exemple: pour suivre seulement les liens relatifs et omettre les images GIF:

bash$ wget -m -L --reject=gif http://target.web.site/subdirectory

wget peut aussi reprendre des téléchargements interrompus ("-c" option), une fois fourni le fichier incomplet avec les données restantes à ajouter. Cette opération doit être pris en charge par le serveur.

bash$ wget -c http://the.url.of/incomplete/file

La reprise et le mirroring peuvent être combinées, permettant de mettre en symétrie une grande collection de fichiers pendant une période de plusieurs sessions distinctes. Plus de précisions sur le processus d'automatisation plus tard.

Si vous subissez des interruptions de téléchargement aussi fréquentes que les miennes au travail, vous pouvez utiliser wget pour réessayer l'URL plusieurs fois:

bash$ wget -t 5 http://place.your.url/here

Ici nous abandonnons après 5 tentatives. Employez "-t inf" pour persévérer sans fin.

Et qu'en est-il des pare-feu de type proxy? Employez la variable d'environnement http_proxy du fichier de configuration .wgetrc pour spécifier un proxy avec lequel vous téléchargerez. Un des problèmes avec la connexion via proxy est que la reprise peut échouer en cas de connexion interrompue. Si un téléchargement via proxy est interrompu, le serveur proxy va mettre en cache une version incomplète du fichier. Quand vous essayer "wget -c" pour obtenir le reste de votre fichier, le proxy examine son cache et conclue par erreur que le fichier entier est déjà obtenu. Vous pouvez tromper la plupart des proxy en passant outre leur cache en ajoutant un en-tête spécial à votre requête de téléchargement:

bash$ wget -c --header="Pragma: no-cache" http://place.your.url/here

L'option "--header" peut ajouter n'importe quel nombre et de genre d'en-têtes, avec lesquels on peut modifier le comportement des serveurs web et des proxy. Quelques sites refusent de distribuer des fichiers via des liens extérieurs; le contenu est seulement délivré à des navigateurs s'ils y accèdent depuis quelques autres pages du même site. Vous pouvez remédier à cela en ajoutant un en-tête "Referer:":

bash$ wget --header="Referer: http://coming.from.this/page" http://surfing.to.this/page

Quelques sites web particulièrement antisociaux délivreront seulement du contenu à une catégorie particulière de navigateur. Surmontez ceci avec l'en-tête "User-Agent:" :

bash$ wget --header="User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)" http://msie.only.url/here

wget -r dupliquera l'arborescence téléchargée sur votre disque dur, pratique pour aspirer le contenu d'un site

wget -w, l'option w permet de spécifier un delai d'attente en secondes entre deux requetes

wget -np , ces options indiquent ne pas rapatrier de facon récursive les repertoires parents (ne pas oublier le / en fin d'url

wget -l , cette option permet de spécifier la profondeur de la récursivité de téléchargement

wget -p --convert-links http://www.monsite.fr/mapage.html permet de sauvegarder une page web dans son intégralité

Téléchargement horaire

Si vous téléchargez de gros fichiers à votre bureau avec une connexion que vous partagez avec des collègues qui n'aiment pas voir leur streaming ralenti, vous devriez songer à démarrer vos transferts hors des heures d'affluence. Vous n'avez pas à rester au bureau après vos heures, et vous n'avez pas non plus à vous souvenir de vous connecter à distance après diner.Employez un ordonnanceur de tâches:

    bash$ at 2300
    warning: commands will be executed using /bin/sh
    at> wget http://place.your.url/here
    at> press Ctrl-D 

Ici, nous demandons à commencer à télécharger à 23.00. Assurez-vous que le démon atd s'exécute en tâche de fond pour que cela fonctionne.

Téléchargement à la journée

Quand il y a beaucoup de données à télécharger depuis un ou plusieurs fichiers et que votre bande passante est comparable au protocole du pigeon voyageur, vous découvrirez que le téléchargement que vous avez programmé n'est pas encore fini à votre arrivée au bureau le matin. Étant un bon voisin, vous arrêtez la tâche et programmez une autre tâche, cette fois-ci avec "wget -c", répétant ceci selon les besoins autant de jours que nécessaire. IL est préférable de rendre ceci automatique avec un crontab. Créez un fichier texte, nommé "crontab.txt", contenant quelque chose de la sorte:

0 23 * * 1-5    wget -c -N http://place.your.url/here
0  6 * * 1-5    killall wget

Votre fichier crontab indiquera la tâche à exécuter à des intervalles périodiques. Les cinq premières colonnes indiquent quand exécuter la commande et le reste de chaque ligne ce qu'il faut exécuter. Les deux premières colonnes indiquent l'heure du jour -- 0 minutes après 23h pour démarrer wget, 0 minutes après 6h pour l'arrêter. Le * dans la 3ème et 4ème colonnes indiquent que ces actions arrivent chaque jour de chaque mois. La 5ème colonne indique quels jours de la semaine programmer chaque opération -- "1-5" veut dire de lundi à vendredi.

Ainsi chaque jour de la semaine à 23h, le téléchargement commencera pour finir à 6h du matin. Pour activer cette tâche, saisissez la commande suivante:
bash$ crontab crontab.txt
L'option "-N" de wget examinera le timestamp du fichier cible et cessera de télécharger si les deux concordent, ce qui est une indication selon laquelle le fichier entier a été transféré. Ainsi vous pouvez le mettre en place et l'oublier ensuite. "crontab -r" supprimera la tâche. J'ai téléchargé nombre d'images ISO avec des connections téléphoniques en utilisant cette méthode.

Pages web dynamiques

Quelques pages web sont générées à la demande car elles changent fréquemment parfois plusieurs fois par jour. Puisque la cible n'est pas techniquement un fichier, il n'y a pas de longueur de fichier et reprendre un téléchargement devient impossible -- l'option "-c" ne fonctionnera pas. Exemple: une page générée en PHP de Linux Weekend News:

bash$ wget http://lwn.net/bigpage.php3

Si vous stoppez le téléchargement est essayez de le reprendre, il repart au-delà du scratch. La connexion de mon bureau est certaines fois tellement faible que j'ai écrit un petit script pour détecter quand une page dynamique en HTML est chargée complètement:

#!/bin/bash

#create it if absent
touch bigpage.php3

#check if we got the whole thing
while ! grep -qi '' bigpage.php3
do
  rm -f bigpage.php3

  #download LWN in one big page
  wget http://lwn.net/bigpage.php3

done

Le script bash ci-dessus essaie de télécharger le document jusqu'à ce que la chaîne "" soit trouvée, ce qui délimite la fin du fichier

SSL et cookies

Les URL commençant par "https://" délivrent des fichiers distants à travers SSL. Vous trouverez un autre utilitaire de téléchargement, nommé curl, pour faire face à ces situations.

Certains sites web envoient de leur propre gré des cookies au navigateur avant de délivrer le contenu demandé. On doit ajouter un en-tête "Cookie:" avec l'information correcte, ce qui peut être obtenu depuis le fichier de cookie de votre navigateur web. Pour des formats de cookie adréssé à lynx et Mozilla :

bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk '{printf("%s=%s;",$6,$7)}' )

construira le cookie demandé pour télécharger des données depuis http://www.nytimes.com, en supposant que vous êtes déjà enregistré sur le site avec ce navigateur. w3m emploie un format de cookie légèrement différent:

bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk '{printf("%s=%s;",$2,$3)}' )

Le téléchargement peut à présent être effectué ainsi:

  bash$ wget --header="Cookie: $cookie" http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html

ou en utilisant l'outil curl:

  bash$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html

Liste d'url

Jusqu'ici nous avons simplement télécharger des fichiers uniques ou des miroirs de sites entiers. Quelquefois, il est intéressant de télécharger un grand nombre de fichiers dont les URL sont fournis par une page web page mais qui ne sont pas destinés à être un miroir à grande échelle d'un site entier. Par exemple, on voudrait télécharger les 20 meilleurs fichiers musicaux d'un site qui affiche les 100 meilleurs fichiers dans l'ordre. Ici les options "--accept" et "--reject" ne marcheront pas puisqu'ils opèrent seulement sur les extensions des fichiers. Plutôt, utilisez "lynx -dump".

bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep 'gz$' |tail -10 |awk '{print $2}' > urllist.txt

La sortie de lynx peut ensuite être filtrée en employant les nombreux utilitaires de traitement de texte GNU. Dans l'exemple ci-dessus, on extrait les URL se terminant par "gz" et on stocke les 10 dernières dans un fichier. Une petite commande de script bash téléchargera automatiquement les URL listées dans ce fichier:

    bash$ for x in $(cat urllist.txt)
     do
     wget $x
     done

Nous avons réussi à télécharger les 10 derniers numéros de la Linux Gazette.

Jongler avec la bande passante

Si vous êtes parmi les peu nombreux à bénéficier d'une large bande passante mais que vos téléchargements sont ralentis seulement par des goulots à l'extrémité du serveur web, cette astuce peut vous aider à améliorer le transfert de vos fichiers. Cela demande l'utilisation de curl et de quelques sites miroirs où résident des copies identiques du fichier cible. Par exemple, supposons que vous souhaitez télécharger la Mandriva 2008 depuis les trois url suivantes:


url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake2008.iso
url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake2008.iso
url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake2008.iso

La longueur du fichier est de 677281792, donc nous démarrons trois téléchargements simultanés avec l'option de curl "--range" :

bash$ curl -r 0-199999999 -o mdk-iso.part1 $url1 &
bash$ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 &
bash$ curl -r 400000000- -o mdk-iso.part3 $url3 &

Cela créera trois processus de téléchargement en tâche de fond, chacun transférant une partie distincte de l'image ISO depuis un serveur différent. L'option "-r" indique une rangée de bits à extraire depuis le fichier cible. Quand il est complété, concaténez simplement les trois parties -- cat mdk-iso.part? > mdk-2008.iso. (Vérifiez le hash md5 avant de graver le CD-R est chaudement recommandé.) Lancez chaque curl dans sa propre fenêtre en utilisant l'option "--verbose" permet de surveiller la progression de chaque transfert.

Conclusion

N'ayez pas peur d'employer des méthodes non-interactive utilisée pour effectuer vos transferts de fichiers distants. Peu importe comment les webmasters peuvent vous contraindre à naviguer interactivement sur leurs sites, il existera toujours des outils libres pour aider à automatiser la tâche, et de ce fait enrichir notre expérience virtuelle.

Sources de l'article


 

Forum d'entraide
Les news du site
Formulaire en php
Administrer un serveur Mysql
Session en php
Gerer ses bases mysql
Les bases php
Securiser ses scripts PHP
Controler ses programmes avec RATS
Convertir une base sql en utf8
Astuces php
Python rapide
Tutorial Python
Tutorial Perl
Tutorial Perl complet
Tutoriel ruby
Tutoriel C
Introduction à gawk
Filtres et utilitaires
Find
Programmation Shell
Ecriture de scripts bash
Expressions regulieres
Vi
Introduction a Javascript
Compiler avec gcc
Tutoriel Assembleur
Guide du cracking pour débutant
Assembleur
Manual Unpacking
Différentes failles Web
Arp spoofing dans un réseau switché
Les intrusions
Les attaques externes
Defacage
Defacage complet
Buffer overflow
Netcat
Injection sql
Injection sql(suite)
John the Ripper
Spoofer un email
Utiliser google
La faille system
Usurper une identité
Le rooting
Shellcode sous Unix
La faille race condition
La faille xss
La faille xss (2)
Attaques sur un routeur
Azureus pas-a-pas
Lire les news de Linux-pour-lesnuls.com au format RSS
Gestion des paquets debian
101 commandes debian
Effet neon dans GIMP
Effet vapeur dans GIMP
Cours fonctionnalités de GIMP
Ensemble
Divers