[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Recherche d'un outils resolver d'ip a partir du fichier hosts



Joel a écrit :
Bonjour la liste,

Je recherche un outils équivalent de "host" ou "dnslookup" mais qui interroge le fichier /etc/hosts au lieu du dns ( ou bien qui se base sur le paramettre order du fichier de conf /etc/host.conf)

En effet dans l'utilisation d'un script ou autre il peut être interessant de changer l'adresse ip en nom d'hôte pour que l'affichage soit plus 'humainne".

Merci

tidj



Suite a l'ensemble de vos messages,

Un grep peux effectivement faire l'affaire, mais il faudrait le piper pour que cela soit propre, genre :

debian$ cat /etc/hosts | sed -e "s/#.*//g" | \
	grep $ADDRESSIP | awk '{print $2}

Mais au genialissime getent fait cela tous seul :

Usage: getent [OPTION...] base de données [clé ...]
getent() - obtenir les entrées de la base de données administratives

  -s, --service=CONFIG       Configuration de service à être utilisée
  -?, --help                 Donner cette liste d'aide
      --usage                Donner un court message expliquant l'usage
  -V, --version              Afficher la version du programme

Les arguments obligatoires ou optionnels pour les options de formes longues
le sont aussi pour les options de forme courtes.

Base de données supportées:
ahosts aliases ethers group hosts netgroup networks passwd protocols rpc
services shadow

d'ou

debian$ getent hosts $ADDRESSIP | awk '{print $2}'

Mais l'idéale serait un outils qui respect l'ordre configurer dans /etc/host.conf (comme nslookup sur HP-UX, a noter que je n'ai pas essayé avec nslookup, le package tendant à être remplacer par host )

d'ou la petite fonction :

ipsolve () {
ADDRESSIP=$1
	for resolvsource in $(cat /etc/host.conf | grep order | sed -e "s/order //g;s/,/ /"); do
                case $resolvsource in
                        hosts)
                                GETENT=`which getent`
                                if [ ! -z $GETENT ] && hostresolv=$($GETENT hosts $ADDRESSIP | awk '{print $2}') && [ ! -z $hostresolv ]; then
                                        echo -n $hostresolv
                                        exit 0
                                fi
                        ;;
                        bind)
                                HOSTCMD=`which host`
                                if [ ! -z $HOSTCMD ] && hostresolv=$($HOSTCMD $ADDRESSIP) && ! echo ${hostresolv} | grep "not found:" &>/dev/null; then
                                        echo -n ${hostresolv##* }
                                        exit 0
                                fi
                        ;;
                esac
        done

        echo -n $ADDRESSIP
}



Le plus propre serais evidemment de reffaire cela en c avec les fonctions apropriées (heu comment ca j'ai la flemme), voire mieux de faire un patch pour host.

Merci a vous

enfin si quequ'un a le petit programme miracle, je suis toujour preneur.

tidj



Reply to: