Finalité
Pour plusieures 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 oeuvre
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'
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 correllation avec le paramètre "n")
- le motif
- ^.*(motif_ip).*$ : recherche d'une ligne contenant une adresse IP (cf : Récuperer 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 !