Comment résoudre un nom d'hôte en une adresse IP dans un script Bash?

416

Quel est le moyen le plus concis de résoudre un nom d’hôte en une adresse IP dans un script Bash? J'utilise Arch Linux .

Eugene Yarmash
la source
21
Dommage que la getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>réponse soit quelque part en bas, près du bas. C'est le plus simple, il ne nécessite aucun paquet supplémentaire et est également plus facile à analyser à partir d'un script Bash.
0xC0000022L
1
@ 0xC0000022L: La nouvelle honte est que cette réponse suggère getent hosts somehost, lors de l' exécution de ce pendantsomehost produira une adresse IPv6 , qui est différent de la façon dont la plupart des autres outils ( ping, sshau moins) résolvent les noms et casse certaines choses. Utilisez le ahostsau lieu de hosts.
j_random_hacker
@j_random_hacker: qui vous empêche de demander des adresses IPv4 ( ahostsv4) ou IPv6 ( ahostsv6) spécifiques ? Personnellement, je ne trouve rien de mal à la demande non spécifique renvoyant IPv6. Votre code devrait être préparé. IPv6 existe depuis plus de 20 ans.
0xC0000022L
@ 0xC0000022L: Personne "ne m'empêche" de le faire, mais la réponse le suggère spécifiquement hosts. Jusqu'à présent, 4 personnes ont voté pour le commentaire de vinc17 exprimant la douleur causée par "soudainement IPv6". Être prêt pour IPv6 n’est pas toujours le problème: de nombreux programmes ont besoin d’un moyen de déterminer si deux noms / adresses font référence au même hôte. Ils peuvent soit utiliser une simple correspondance de chaîne, soit ils doivent en savoir beaucoup sur le réseau pour trouver la "vraie" réponse. Ce dernier est un champ de mines, de nombreux programmes et systèmes tiers - sur lesquels je n’ai aucun contrôle - utilisent les premiers.
j_random_hacker

Réponses:

533

Vous pouvez utiliser getentce qui vient avec glibc(donc vous l’avez presque certainement sous Linux). Cela résout en utilisant gethostbyaddr / gethostbyname2, et vérifiera donc aussi /etc/hosts/ NIS / etc:

getent hosts unix.stackexchange.com | awk '{ print $1 }'

Ou, comme le dit Heinzi ci-dessous, vous pouvez utiliser digl' +shortargument (interroge directement les serveurs DNS, ne regarde pas /etc/hosts/ NSS / etc):

dig +short unix.stackexchange.com

Si dig +shortn'est pas disponible, l'un des éléments suivants devrait fonctionner. Tous ces requêtes DNS directement et ignorent les autres moyens de résolution:

host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'

Si vous souhaitez uniquement imprimer une adresse IP, ajoutez la exitcommande à dans awkle flux de travaux.

dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'
Chris Down
la source
2
Par défaut, l'utilisation de dig ne fonctionne qu'avec ipv4, où host donne les réponses à ipv4 et ipv6. Cela pourrait être inattendu. Vous pouvez essayer host www.google.com, dig +short www.google.com, host ipv6.google.com, dig +short ipv6.google.com, host www.facebook.com, dig +short www.facebook.com.
jfg956
6
DIG ne fonctionne pas, s'il s'agit d'un CNAME, il ne retournera pas l'adresse IP.
sorin
4
Parfois, hostpeut être expiré et ne renvoie rien. Pour certains domaines, dig +shortpeut renvoyer un alias de domaine en première ligne. Donc, pour vous assurer que la sortie est une adresse IPv4, utilisez dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1.
Caiguanhao
9
L'utilisation getent hosts <host>est incorrecte, car elle peut par exemple donner une adresse IPv6 alors que IPv6 ne fonctionne pas. La bonne solution consiste à utiliser getent ahosts <host>IPv6 et IPv4 si nécessaire.
vinc17
5
A noter: host, dig et nslookup semblent parler directement aux serveurs listés dans resolv.conf, alors que "getent hosts" respecte à la fois le fichier des hôtes locaux et la mise en cache au niveau de la bibliothèque (telle que nscd), si elle est activée.
Saustrup
141

Avec hostle paquet dnsutils :

$ host unix.stackexchange.com
unix.stackexchange.com has address 64.34.119.12

( Nom du paquet corrigé en fonction des commentaires. Comme note, d'autres distributions ont hostdes paquets différents: hôte Debian / Ubuntu bind9 , openSUSE bind-utils , liaison Frugalware .)

homme au travail
la source
4
Voulez-vous dire dnsutils ? Quoi qu'il en soit, hosta bien travaillé, merci
Eugene Yarmash
Tu as probablement raison. Je n'ai pas d'arche ici pour vérifier. (J'avais l'intention d'ajouter un commentaire plus tard, mais la réponse était déjà votée, alors je suppose que je l'ai cloué ...)
manatwork
1
Consultez l'entrée resolip ci-dessous si vous devez résoudre quelque chose qui ne figure pas dans le DNS (par exemple, / etc / hosts)
Gavin Brock
2
Sachez que, hostparfois, renvoie une sortie multiligne (dans le cas de redirections), vous voudrez host unix.stackexchange.com | tail -n1si vous voulez juste la ligne avec l'adresse IP.
Edward Coffey
3
Cette réponse mérite un sérieux downvote. hostest un outil DNS (similaire à nslookup), de sorte qu'il ne recherche que les hôtes dans le DNS, pas dans l'exemple /etc/hosts. Donc, ce n'est pas une réponse à la question de OP.
peterh
54

J'ai un outil sur ma machine qui semble faire l'affaire. La page de manuel montre qu'il semble venir avec mysql ... Voici comment vous pouvez l'utiliser:

resolveip -s unix.stackexchange.com
64.34.119.12

La valeur de retour de cet outil est différente de 0 si le nom d'hôte ne peut pas être résolu:

resolveip -s unix.stackexchange.coma
resolveip: Unable to find hostid for 'unix.stackexchange.coma': host not found
exit 2

UPDATE Sur fedora, il est livré avec mysql-server:

yum provides "*/resolveip"
mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files
Dépôt         : fedora
Correspondance depuis :
Nom de fichier      : /usr/bin/resolveip

Je suppose que cela créerait une dépendance étrange pour votre script ...

greg0ire
la source
6
Cela semble être la seule solution ici qui utilise le résolveur intégré au système d'exploitation - fonctionne donc aussi bien pour / etc / hosts que pour DNS.
Gavin Brock le
8
getent, comme indiqué en détail dans l'autre réponse, examine également / etc / hosts et est fourni avec glibc. Il n'a donc aucune dépendance sur un système Linux.
Asfand Qazi
44

La commande suivante using digvous permet de lire directement le résultat sans sed / awk / etc. la magie:

$ dig +short unix.stackexchange.com
64.34.119.12

digest également inclus dans le dnsutilspackage.


Remarque : diga une valeur de retour de 0, même si le nom n'a pas pu être résolu. Ainsi, vous devrez vérifier si la sortie est vide au lieu de vérifier la valeur de retour:

hostname=unix.stackexchange.com

ip=`dig +short $hostname`

if [ -n "$ip" ]; then
    echo IP: $ip
else
    echo Could not resolve hostname.
fi

Remarque 2 : Si un nom d'hôte a plusieurs adresses IP (essayez debian.org, par exemple), elles seront toutes renvoyées. Ce "problème" concerne tous les outils mentionnés dans cette question jusqu'à présent:

Heinzi
la source
2
Notez que si un domaine a une entrée CNAME, son domaine peut être imprimé sur la première ligne au lieu d’une adresse IP.
pcworld
40
getent hosts unix.stackexchange.com | cut -d' ' -f1
sborsky
la source
4
Voir également ahosts, ahostsv4, ahostsv6avec getent.
0xC0000022L
cutne sera pas pour getent, qui utilisent \tpour séparer les colonnes. C'est le cas sous Solaris.
Ceving
1
@ceving: Sous Solaris, vous devrez peut-être exécuter cutsans -d(valeur par défaut \t: délimiteur). Sous Linux ce sont des espaces, ainsi la ligne ci-dessus fonctionne.
Sborsky
27

Les solutions proposées jusqu'ici fonctionnent principalement dans le cas le plus simple: le nom d'hôte se résout directement en une adresse IPv4 unique. Cela peut être le seul cas où vous devez résoudre les noms d’hôte, mais si ce n’est pas le cas, vous trouverez ci-dessous une discussion sur certains cas que vous devrez peut-être gérer.

Chris Down et Heinzi ont brièvement évoqué le cas où le nom d'hôte résolvait en plusieurs adresses IP. Dans ce cas (et d'autres ci-dessous), la création de scripts de base en supposant qu'un nom d'hôte soit résolu directement en une seule adresse IP peut échouer. Ci-dessous, un exemple avec un nom d'hôte résolvant en plusieurs adresses IP:

$ host www.l.google.com
www.l.google.com has address 209.85.148.147
www.l.google.com has address 209.85.148.103
www.l.google.com has address 209.85.148.99
www.l.google.com has address 209.85.148.106
www.l.google.com has address 209.85.148.105
www.l.google.com has address 209.85.148.104

Mais qu'est ce que c'est www.l.google.com? C'est ici que le cas du pseudonyme doit être introduit. Vérifions l'exemple ci-dessous:

$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.105
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104

Donc, www.google.comne pas résoudre directement en adresses IP, mais en un alias qui se résout lui-même en plusieurs adresses IP. Pour plus d'informations sur les alias, cochez cette case . Bien entendu, le cas où un alias a une seule adresse IP est possible, comme indiqué ci-dessous:

$ host g.www.ms.akadns.net
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.190

Mais les alias peuvent-ils être enchaînés? La réponse est oui:

$ host www.microsoft.com
www.microsoft.com is an alias for toggle.www.ms.akadns.net.
toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net.
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.254

$ host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104
www.l.google.com has address 74.125.39.105

Je n'ai trouvé aucun exemple dans lequel un nom d'hôte résout un alias qui ne se résout pas en une adresse IP, mais je pense que le cas pourrait se produire.

Plus que de multiples adresses IP et alias, existe-t-il d'autres cas particuliers ... qu'en est-il de l'IPv6? Tu pourrais essayer:

$ host ipv6.google.com
ipv6.google.com is an alias for ipv6.l.google.com.
ipv6.l.google.com has IPv6 address 2a00:1450:8007::68

Où le nom d'hôte ipv6.google.comest un nom d'hôte IPv6 uniquement. Qu'en est-il des noms d'hôte à double pile:

$ host www.facebook.com
www.facebook.com has address 66.220.153.15
www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c::

Encore une fois à propos de IPv6, si votre hôte est uniquement IPv4, vous pouvez toujours résoudre les adresses IPv6 (testé sur un IPX4 uniquement sous WinXP et avec ipv6.google.com, vous pouvez l’essayer sous Linux). Dans ce cas, la résolution aboutit, mais une requête ping échoue avec un message d'erreur d'hôte inconnu . Cela peut être un cas où votre script échoue.

J'espère que ces remarques ont été utiles.

jfg956
la source
2
Quel bon complément à la réponse acceptée, montrant tous les cas extrêmes que l'on pourrait vouloir traiter dans le script. Ma version hostne dit même pas "a l'adresse" pour mes boîtes.
Mihai Danila
18
ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s/).*//" | sed -e "s/.*(//"

fonctionne sans dépendances sur d'autres systèmes (et pour les hôtes spécifiés dans / etc / hosts)

Andrew McGregor
la source
2
L'utilisation de ping est ce dont j'avais besoin, car j'ai besoin de la valeur du fichier hosts mais du motif sed analysé correctement, mais cela a fonctionné ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s / ^ [^ (] * [(] //" | sed -e "s /[)].*$//"
ManiacZX
1
Pour résoudre quelque chose sur mon réseau domestique comme myhostname.local, cela fonctionne donc pour moi, c'est la meilleure réponse.
Matt Friedman
1
Puis-je suggérer ceci aussi:ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
Matt Friedman le
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>travaille pour les déclarations à l' intérieur /etc/hostsaussi ... et il est le go-to-outil pour tous les types de bases de données système (passwd, groupe, alias, services).
0xC0000022L
17

Simple mais utile:

  1. getent ahostsv4 www.google.de | grep STREAM | head -n 1 | cut -d ' ' -f 1
  2. getent ahostsv6 www.google.de | grep STREAM | head -n 1 | cut -d ' ' -f 1
  3. getent hosts google.de | head -n 1 | cut -d ' ' -f 1

Toutes les commandes vont résoudre une adresse IP si l'hôte existe toujours. Si l'hôte pointe sur CNAME, il obtiendra également l'adresse IP dans ce cas.

La première commande renvoie l'adresse IPv4 résolue.

La deuxième commande renvoie l'adresse IPv6 résolue.

La troisième commande retournera l'adresse préférée du propriétaire, quelle que soit l'adresse IPv4 ou IPv6.

Tom Freudenberg
la source
De loin le plus simple. Et c'est disponible par défaut. Pas comme hostça nécessite l'installation de labindutils
michaelbn
7

Voici une légère variante de l' pingapproche qui prend en compte "hôte inconnu" (en passant par stderr) et utilise trpour éviter l'utilisation des sedexpressions rationnelles:

ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d '():' | awk '/^PING/{print $3}'

S'il est important de capturer la valeur de sortie, les actions suivantes fonctionneront (bien que moins élégantes):

ping -c1 -t1 -W0 www.example.com &>/dev/null && ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d '():' | awk '/^PING/{print $3}'
Stefan Farestam
la source
J'aime cette solution car elle fonctionne sans outils supplémentaires.
Radon8472
7

Pour compléter la réponse de Chris Down et répondre aux commentaires de jfgagne sur les alias (éventuellement chaînés), voici une solution qui:

  • prend en compte plusieurs IP
  • prend en compte un ou plusieurs alias (CNAME)
  • ne pas interroger le /etc/hostsfichier (dans mon cas, je n'en voulais pas); pour l'interroger, la solution python de dbernt est parfaite)
  • n'utilise pas awk / sed

    dig +short www.alias.com  | grep -v "\.$" | head -n 1

Retourne toujours la première adresse IP ou vide si non résolu. avec version de dig:

    $ dig -v
    DiG 9.8.1-P1
Franck
la source
1
Merci, les autres réponses supposent que "dig + short" renvoie toujours une adresse IP unique. Ils ne comptabilisaient pas les CNAME.
Jamshid
5
 php -r "echo gethostbyname('unix.stackexchange.com');"
Mohammed Zourob
la source
cela fonctionne, mais il faut que php soit installé sur votre terminal
Radon8472
1
peut être utile sur un conteneur docker php typique où "hôte", "dig", etc. ne sont pas disponibles
Fabian Schmengler
5

J'aurais aimé ajouter ceci comme commentaire à Andrew McGregor Re: ping. Cependant, cela ne me le laisserait pas, alors je dois ajouter ceci comme une autre réponse. (Si quelqu'un peut le déplacer dans un commentaire, n'hésitez pas.)

C'est une autre variante, utilisant uniquement ping et grep:

ping -q -c1 -t1 your_host_here | grep -Eo "([0-9]+\.?){4}"

grep -Epour une expression régulière étendue et grep -opour ne renvoyer que la partie correspondante. l'expression rationnelle elle-même recherche un ou plusieurs chiffres ( [0-9]+) et éventuellement un point ( \.?) quatre fois ( {4})

Dweia
la source
4

Vous pouvez utiliser host:

hostname=example.org

# strips the IP
IP=$( host ${hostname} | sed -e "s/.*\ //" )

# checks for errors
if [ $? -ne 0 ] ; then
   echo "Error: cannot resolve ${hostname}" 1>&2
   exit 1;
fi
Matteo
la source
4

Voici une recette de Bash que j'ai concoctée en utilisant les réponses d'autres personnes - essayez d'abord /etc/hosts, puis retombez dans nslookup:

resolveip(){
    local host="$1"
    if [ -z "$host" ]
    then
        return 1
    else
        local ip=$( getent hosts "$host" | awk '{print $1}' )
        if [ -z "$ip" ] 
        then
            ip=$( dig +short "$host" )
            if [ -z "$ip" ]
            then
                echo "unable to resolve '$host'" >&2 
                return 1
            else
                echo "$ip"
                return 0
            fi
        else
            echo "$ip"
            return 0
        fi
    fi
}
RubyTuesdayDONO
la source
Pour être clair, ce getent hostsn'est pas simplement une recherche dans / etc / hosts - c'est un appel à résolution DNS complet pour gethostbyaddr (3) , et il est très peu probable qu'un échec se produise dans les cas où digcela réussira. Voir la page de manuel pour getent .
Stuart P. Bentley
@Stuart a raison - j'ai beaucoup appris depuis que j'ai écrit cela et simplifié à l'extrême une commande puissante. getentreste mon préféré, même si j'aime aussidig +short
RubyTuesdayDONO
4
nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'

était la solution que j'ai trouvée sans serveur DNS

Philippe Gachoud
la source
3

Peut-être pas le plus concis, mais il semble être robuste et efficace:

# $(get_host_dns_short "google.com")
#
# Outputs the IPv4 IP Address of a hostname, resolved by DNS. Returns 0 if DNS
# responded successfully; 1 otherwise. Will mask error output.
function get_host_dns_short()
{
    (
        set -o pipefail

        host -4 -W1 -t A "$1" 2>/dev/null | awk '/has address/ { print $NF; exit }'
    ) && return 0 || return 1
}

Cela produira une seule adresse IPv4, ainsi qu’un retour 1en cas de défaillance, tout en masquant la sortie stderr.

Vous pouvez l'utiliser comme ceci:

GOOGLE_IP="$(get_host_dns_short "google.com")"
if [[ $? -eq 0 ]]; then
    echo "Google's IP is ${GOOGLE_IP}."
else
    echo "Failed to resolve Google's IP."
fi

L'adresse IP de Google est 216.58.192.46.

Si vous souhaitez plutôt une adresse IPv6, remplacez simplement -4par -6.

Volonté
la source
3

dig +noall +answer +nocomments example.com | awk '{printf "%-36s\t%s\n", $1, $5 }'

DP Baker
la source
1
Un certain contexte dans lequel cette réponse s’améliorera par rapport à celles déjà existantes serait formidable. Indiquez également les commandes de 4 espaces (voir la syntaxe de démarquage).
maxschlepzig
2

1 ligne résoudre une liste de nom d'hôte

for LINE in `cat ~/Desktop/mylist`; do a=$(nslookup $LINE | awk '/^Address: / { print $1 }');  echo $a >> ~/Desktop/ip; done
Andy Wong
la source
2

Je le fais tout le temps sur mon Mac qui n'a pas getent. pingsemble être un hack. J'aimerais aussi en tenir /etc/hostscompte.

Donc, j'ai écrit un wrapper stupide dns.lookuppour vous qui avez Node.js installé pour fournir une CLI:

$ npm install -g lookup-hostname
$ lookup google.com
62.243.192.89
Thomas Jensen
la source
60% de chances de casse avant d'arriver à une résolution.
dotbit
@dotbit pourriez-vous élaborer? J'ai utilisé cet hebdomadaire depuis 1917 et je n'ai jamais eu de problèmes.
Thomas Jensen
@ Jensen mais vous êtes le seul, comme toujours. Le reste d'entre nous a l'habitude de tomber sur FAIL d'un type ou d'un autre, et toujours.
dotbit
"comme toujours" Qu'entendez-vous par là? "Le reste d'entre nous" Qui est-ce? "run in FAIL" Quel problème spécifique voyez-vous? Je suis curieux.
Thomas Jensen
2

dig est trop lent, nslookup est beaucoup plus rapide

nslookup google.com | grep -Po 'Address:\s*[0-9.]+' | tail -1 | sed -e 's/Address:\s*//g'
Andrey Izman
la source
2

Je ne connais pas le moyen le plus simple pour un script bash, mais si vous voulez résoudre un nom d'hôte et voir si l'hôte est actif, utilisez-le ping!

ping -a hostname -c 1

Est-ce que pingl'hôte une fois et résoudre le nom d'hôte en adresse IP.

$ ping -a www.google.com -c 1
PING www.google.com (216.58.211.132) 56(84) bytes of data.
64 bytes from arn09s10-in-f4.1e100.net (216.58.211.132): icmp_seq=1 ttl=54 time=1.51 ms
utilisateur257655
la source
Utiliser ping est une bonne chose, car tout le monde l'a, mais vous devez filtrer la partie IP à partir des sorties, si vous souhaitez l'utiliser dans un script.
Radon8472
1

Oui, il y a déjà beaucoup de réponses, mais il manque une solution utilisant perl:

perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com

Dans un script bash, il pourrait être utilisé comme ceci:

#!/bin/bash
ipaddr=$(perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com)
echo $ipaddr

Les modules utilisés ici sont des modules de base, ils devraient donc être disponibles partout sans installation avec CPAN.

Slaven Rezic
la source
perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null est beaucoup plus propre. mais personne d'autre que nous n'utilisons pörl, tout le monde utilise bien sûr le script Pascal.
dotbit
En fait, je préfère voir les messages d'erreur si quelque chose ne va pas. Can't call method "addr" on an undefined valueCe n’est pas exactement le meilleur message d’erreur, mais peut donner un indice sur le problème.
Slaven Rezic
1
#!/bin/bash

systemd-resolve   RT.com -t A  | awk '{ print $4 ; exit }'
systemd-resolve unix.stackexchange.com -t A --legend=no | awk '{ print $4 ; exit }'

resolveip -s      RT.com
dig       +short  RT.com
host              RT.com | awk '/has address/ { print $4 }'
nslookup          RT.com | awk '/^Address: /  { print $2 }'
ping -q -c 1 -t 1 RT.com | grep PING | sed -e "s/).*//" | sed -e "s/.*(//"

ruby     -rresolv -e      ' print    Resolv.getaddress "RT.com" '
python2  -c 'import socket; print socket.gethostbyname("RT.com")'
perl     -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' RT.com  2>/dev/null
php      -r "echo gethostbyname( 'RT.com' );"

echo        "   all do work for me - take your pick!  "
points
la source
1
La version ruby ​​imprime des guillemets autour de l'adresse IP - printdevrait probablement être utilisée à la place de p.
Slaven Rezic
merci, @Slaven Rezic et n'hésitez pas à voter. là encore en bas, le script est peut-être plus visible ... ;-)
dotbit
-1
host -t a cisco.com

cette commande affiche l'adresse IP (reslove le domaine sur IP)

aaa
la source
-1

Outre la solution ci-dessus, vous pouvez traduire plusieurs noms d'hôte en ip via le script ci-dessous. La seule dépendance est la commande "ping" dans le noyau Unix:

getip(){ ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' 2>&1 | tee >> /tmp/result.log & }

getip 'hostname.number1.net'

getip 'hostname.number2.net'

getip 'hostname.number3.net'

getip 'hostname.number4.net'

getip 'hostname.number5.net'

getip 'hostname.number6.net'

getip 'hostname.number7.net'

getip 'hostname.number8.net'
$ cat /tmp/result.log

ABC.DEF.GHI.XY1

ABC.DEF.GHI.XY2

ABC.DEF.GHI.XY3

ABC.DEF.GHI.XY4

ABC.DEF.GHI.XY5

ABC.DEF.GHI.XY6

ABC.DEF.GHI.XY7

ABC.DEF.GHI.XY8
Kevin Li
la source