Ci dessous des méthodes awk permettant de résoudre un nom en IP et vice versa : --8<-- function ipToName(address) { cmd="host " address while ((cmd | getline line) > 0) { if (line ~ /pointer/) { sub(".*pointer ", "", line) sub("\.$", "", line) return line } else { return address } } } function nameToIp(name) { cmd="host " name while ((cmd | getline line) > 0) { if (line ~ /pointer/) { sub(".*address ", "", line) return line } else { return name } } } --8<-- -- http://asyd.net/home/ - Home Page http://www.guses.org/ - French Speaking (Open)Solaris User Group http://netvibes.com/asyd - Portal
On 2010-08-31 11:11:05 +0200, Bruno Bonfils wrote:
Ci dessous des méthodes awk permettant de résoudre un nom en IP et vice versa :
On peut faire plus court et plus correct en Perl. :) Le problème principal de host est qu'il fait une requête DNS. Si c'est ce qu'on veut, pas de problème. Mais si le but est de convertir un nom en IP, il faut utiliser les fonctions POSIX. En effet, il y a d'autres méthodes que le DNS, et bien souvent, /etc/hosts doit être utilisé en priorité (cf /etc/nsswitch.conf). -- Vincent Lefèvre <vincent@vinc17.net> - Web: <http://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)
On Tue 31 August, Vincent Lefevre wrote:
On 2010-08-31 11:11:05 +0200, Bruno Bonfils wrote:
Ci dessous des méthodes awk permettant de résoudre un nom en IP et vice versa :
On peut faire plus court et plus correct en Perl. :)
Ce n'est pas tellement la question, d'autre répondra que l'on fait plus cours en ruby/whatever (moi même je pourrais dire que je fais plus court en groovy) mais les trolls langages c'est bon pour la cour de récré epita/epitech.
Le problème principal de host est qu'il fait une requête DNS. Si c'est ce qu'on veut, pas de problème. Mais si le but est de convertir un nom en IP, il faut utiliser les fonctions POSIX. En effet, il y a d'autres méthodes que le DNS, et bien souvent, /etc/hosts doit être utilisé en priorité (cf /etc/nsswitch.conf).
Il est vrai j'aurais pu utilisé getent host mais dans ce cas précis, je voulais justement une résolution DNS pour éviter les problèmes éventuels de noms courts dans /etc/hosts. Au passage il y a une erreur dans ma fonction, elle ne ferme pas le FD ouvert par le pipe, voici la correction (mais elle n'est encore pas parfaite) --%<-- function ipToName(address) { cmd="host " address buffer="" while ((cmd | getline line) > 0) { if (line ~ /pointer/) { sub(".*pointer ", "", line) sub("\.$", "", line) buffer=line break } else { buffer=address break } } close(cmd) return buffer } --%<-- -- http://asyd.net/home/ - Home Page http://www.guses.org/ - French Speaking (Open)Solaris User Group http://netvibes.com/asyd - Portal
participants (2)
-
Bruno Bonfils
-
Vincent Lefevre