Lire son adresse IP publique sur sa Livebox
Pour embellir son bureau on utilise souvent un script conky qui permet d’afficher certaines informations de l’état de son système. L’une des informations qu l’on retrouve souvent est l’affichage de son adresse IP du réseau privé (LAN) et celle du réseau publique ou internet (WAN). Dans la majorité des cas, les exemples proposent d’utiliser
curl ifconfig.me
Quand on utilise une Livebox fournie par Orange, cette information est disponible sur la page d’accueil de la box à l’adresse
http://<adresse IP de la Livebox>/
Pourquoi donc envoyer une requête sur le web alors que l’information est déja présente dans le réseau local ?
Dans cet article, 2 commandes pour lire cette adresse IP directement sur sa Livebox.
Lire la page d’information
Pour accéder à l’adresse IP, on peut accéder à la Livebox directement
depuis son navigateur préféré, mais cette méthode ne permettra pas
d’inclure l’adresse dans le résultat d’un script conky.
Pour recopier la page d’accueil de la Livebox sur son PC et la traiter,
on peut utiliser la commande
wget http://<adresse IP de la Livebox>
Cette commande copiera le fichier index.hml dans le répertoire courant et il contiendra l’information recherchée, mais cette information est située au milieu des 543 lignes du fichier :
yvon@nanda [13:58:23] ~/temp
$ wc index.html
543 1117 17092 index.html
Pour retrouver l’information, il faut chercher la chaine WAN, l’adresse IP publique se trouve dans le ligne suivante :
<td class="libelle">Adresse IP WAN :</td>
<td class="value">A.B.C.D</td>
Pour exploiter plus facilement le contenu du fichier index.html, il faut utiliser la commande curl qui va afficher le contenu du fichier au lieu de la copier en local, le résultat devra être redirigé pour être traité.
Pour traiter le contenu de ce fichier, plusieurs solutions sont possibles, en voici quelques unes.
Avec la commande awk
En utilisant la commande awk, on peut réaliser le traitement de la manière suivante :
curl 192.168.1.1 | awk '/WAN/{getline;split($2,Addr,">");split(Addr[2],AddIp,"<");print "\n\n"AddIp[1]"\n\n"}'
Avec
-
192.168.1.1
étant l’adresse IP locale de ma Livebox - `/WAN/** : est la chaine recherchée
-
getline
pour lire la ligne suivante, celle contenant l’adresse IP -
split(\$2,Addr,">")
va éclater le deuxième paragraphe ($2) de la ligne lue, le résultat sera dans le tableau Addr et le caractère permettant de délimiter les champ sera “>”. Chacun des éléments sera accessible par les variables Addr[1], Addr[2], Addr[3], … -
split(Addr[2],AddIp,">")
va éclaté le contenu du 2ieme élément du tableau Addr, le délimiteur sera “>”
Au final, on obtient :
yvon@nanda [14:27:45] ~/temp
$ curl 192.168.1.1 | awk '/WAN/{getline;split($2,Addr,">");split(Addr[2],AddIp,"<");print "\n\n"AddIp[1]"\n\n"}'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
A.B.C.D
100 17092 0 17092 0 0 91402 0 --:--:-- --:--:-- --:--:-- 92389
yvon@nanda [14:27:51] ~/temp
Avec les commandes grep, tail et cut
La commande grep permet de rechercher une chaine de caractère dans un fichier, on peut donc retrouver la chaine WAN :
yvon@nanda [14:48:01] ~/temp
$ grep WAN index.html
<td class="libelle">Adresse IP WAN :</td>
yvon@nanda [14:51:02] ~/temp
Pour lire l’adresse IP publique, il faut utiliser l’option -A (after) qui permet de lire les lignes suivant celle contenant le motif recherché :
$ grep -A 1 WAN index.html
<td class="libelle">Adresse IP WAN :</td>
<td class="value">A.B.C.D</td>
yvon@nanda [14:52:21] ~/temp
Pour ne garder que la ligne contenant l’adresse IP, on peut utiliser la commande tail :
yvon@nanda [14:53:45] ~/temp
$ grep -A 1 WAN index.html | tail -1
<td class="value">A.B.C.D</td>
yvon@nanda [14:53:52] ~/temp
Maintenant que l’on a la ligne contenant l’adresse IP, on va utiliser la commande cut avec les options permettant d’afficher des champs et de fixer les délimiteurs :
yvon@nanda [14:55:43] ~/temp
$ grep -A 1 WAN index.html | tail -1 | cut -f2 -d">" | cut -f1 -d"<"
A.B.C.D
yvon@nanda [14:55:49] ~/temp
En lisant le fichier avec curl et en redirigeant le résultat pour un traitement immédiat :
yvon@nanda [15:31:32] ~/temp
$ curl 192.168.1.1 | grep -A 1 WAN index.html | tail -1 | cut -f2 -d">" | cut -f1 -d"<"
A.B.C.D
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
yvon@nanda [15:31:37] ~/temp