[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, samedi 5 février 2005, à 16:25 :
[...]
> 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}

On pourrait  simplifier, et n'utiliser que  sed ou awk ;  ce dernier est
plus commode pour choisir un champ :

 </etc/hosts awk "$1=~/^$ADDRESSIP$/{print $2}"

(mais ci-dessus $ADDRESSIP est une regexp).

> Mais au genialissime getent fait cela tous seul :
[...]
> debian$ getent hosts $ADDRESSIP | awk '{print $2}'

 "$ADDRESSIP" est préférable

> 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 () [...]

#!/bin/bash
ipsolve () {

    ADDRESSIP="$1"
    </etc/host.conf sed -e '
        /^[[:space:]]*order[[:space:]]*/!d
        s///
        s/[[:space:]]*,[[:space:]]*/\n/' | \
    while read resolvsource; do
        case "$resolvsource" in
            hosts)
                GETENT=`which getent`
                if [ -n "$GETENT" ] &&
                    hostresolv=$(
                        "$GETENT" hosts "$ADDRESSIP" | \
                        awk '{print $2}'
                    ) &&
                    [ -n "$hostresolv" ];
                    then
                    echo -n "$hostresolv "
                    exit 0
                fi
                ;;
            bind)
                HOSTCMD=`which host`
                if [ -n "$HOSTCMD" ] &&
                    hostresolv=$("$HOSTCMD" "$ADDRESSIP")
                    then
                    case "$hostresolv" in
                        *"not found"*)
                            ;;
                        *)
                            echo -n "${hostresolv##* } "
                            ;;
                    esac
                    exit 0
                fi
                ;;
        esac
    done

    echo " $ADDRESSIP"
}

ipsolve "$1"


-- 
Jacques L'helgoualc'h



Reply to: