Finalité
Pour plusieurs raisons, on peut avoir besoin de récupérer son
adresse IP publique dans un script.
Le problème qui se pose alors si l'on est sur un
LAN, est de trouver cette IP sans interventions humaine.
Mise en œuvre
Le moyen le plus simple que j'ai trouvé jusqu'à présent est une simple commande recherchant une ip dans une page web choisie :
GET www.monip.org | sed -nre 's/^.* (([0-9]{1,3}\.){3}[0-9]{1,3}).*$/\1/p'
ou
lynx --source www.monip.org | sed -nre 's/^.* (([0-9]{1,3}\.){3}[0-9]{1,3}).*$/\1/p'
ou encore
w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }'
Merci à dubcek pour la solution avec "w3m" (voir ce thread)
Explications
GET
La commande GET (
lwp-request) se trouvre dans la libwww de
Perl (
package perl-libwww-perl-version).
Comme son nom l'indique elle fait un GET sur une page, cela renvoie le code source de la page.
Lynx
Lynx est un navigateur en mode texte présent dans la plupart des distributions
Linux, plus simple à installer que lwp-request (
Perl) si besoin.
Sed
La commande sed :
- les paramètres
- -n : restreint l'affichage aux lignes invoquées (lié au paramètre "p")
- -r : support des expressions régulières étendues
- -e : expression
- s///: indique une substitution
- p : le résultat est affiché (en corrélation avec le paramètre "n")
- le motif
- ^.*(motif_ip).*$ : recherche d'une ligne contenant une adresse IP (cf : Récupérer une adresse IP )
- \1 : ce qui se trouve entre parenthèses peut être adressé dans la suite de l'expression par \1.
La ligne contenant l'adresse IP est donc remplacée par l'adresse IP elle même ;)
A vous de trouver quoi faire du résultat !