Hoe kan ik een hostnaam omzetten in een IP-adres in een Bash-script?

Wat is de meest beknopte manier om een hostnaam om te zetten in een IP-adres in een Bash-script? Ik gebruik Arch Linux .

Reacties

  • Jammer dat het getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> antwoord is ergens daar beneden bij de bodem. Het ‘ is het eenvoudigste, vereist geen extra pakketten en is gemakkelijker te ontleden vanuit een Bash-script.
  • @ 0xC0000022L: De nieuwe schande is dat dat antwoord getent hosts somehost suggereert wanneer dit uitvoert terwijl op somehost produceert een IPv6-adres , dat verschilt van de manier waarop de meeste andere tools (ping, ssh tenminste) namen op, en breekt sommige dingen. Gebruik de ahosts in plaats van hosts.
  • @j_random_hacker: wie weerhoudt je ervan specifiek IPv4 (ahostsv4) of IPv6 (ahostsv6) adressen? Persoonlijk vind ik niets mis met het niet-specifieke verzoek om IPv6 te retourneren. Uw code moet worden voorbereid. IPv6 is al meer dan 20 jaar beschikbaar.
  • @ 0xC0000022L: Niemand ” houdt me ” tegen doet dat, maar het antwoord suggereert specifiek hosts, en tot nu toe hebben 4 mensen de opmerking van vinc17 ‘ geüpgraded waarin de pijn wordt uitgedrukt die wordt veroorzaakt door ” plotseling IPv6 “. Voorbereid zijn op IPv6 is niet altijd het probleem: veel programmas hebben een manier nodig om te bepalen of twee namen / adressen naar dezelfde host verwijzen. Ze kunnen ofwel eenvoudige string-matching gebruiken, of ze moeten veel weten over het netwerk om het ” true ” antwoord te vinden. Het laatste is een mijnenveld, zoveel programmas en systemen van derden – waar ik geen controle over heb – gebruiken het eerste.

Antwoord

Je kunt getent gebruiken, die wordt geleverd met glibc (dus je hebt het vrijwel zeker onder Linux) . Dit lost op met gethostbyaddr / gethostbyname2, en dus wordt ook gecontroleerd op /etc/hosts / NIS / etc:

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

Of, zoals Heinzi hieronder zei, kun je dig gebruiken met het +short -argument (vraagt DNS-servers rechtstreeks, kijkt niet naar /etc/hosts / NSS / etc):

dig +short unix.stackexchange.com 

Als dig +short niet beschikbaar is, kan iedereen van het volgende zou moeten werken. Al deze vragen rechtstreeks naar DNS en negeren andere manieren van oplossing:

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 }" 

Als u slechts één IP-adres wilt afdrukken, voegt u het exit commando voor awk” s workflow.

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 }" 

Reacties

  • Standaard werkt het gebruik van dig alleen met ipv4, waar host zowel ipv4 als ipv6 antwoorden geeft. Dit kan onverwacht zijn. Je kunt 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.
  • DIG werkt niet, als het een CNAME is, wordt het IP-adres niet geretourneerd.
  • Soms host kan een time-out hebben en geeft niets terug. Voor sommige domeinen kan dig +short een domeinalias in de eerste regel retourneren. Om er dus voor te zorgen dat de uitvoer een IPv4 is adres, gebruik dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1.
  • Het gebruik van getent hosts <host> is onjuist, zoals voor instan ce het kan een IPv6-adres geven terwijl IPv6 niet ‘ werkt. De juiste oplossing is om getent ahosts <host> te gebruiken om zowel IPv6 als IPv4 te proberen, indien nodig.
  • Vermeldenswaard: host, dig en nslookup lijken rechtstreeks met de vermelde servers te praten in resolv.conf, terwijl ” getent hosts ” zowel het lokale hosts-bestand respecteren als caching op bibliotheekniveau (zoals nscd) indien ingeschakeld .

Antwoord

Met host van de dnsutils pakket:

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

( Gecorrigeerd pakketnaam volgens de opmerkingen. Zoals een opmerking hebben andere distributies host in verschillende pakketten: Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)

Reacties

  • Zie het resolvip-item hieronder als u iets moet oplossen dat niet in DNS staat (bijv. / Etc / hosts).
  • Houd er rekening mee dat host retourneert soms meerregelige uitvoer (in het geval van omleidingen), ‘ wil host unix.stackexchange.com | tail -n1 als u alleen de regel met het IP-adres wilt.
  • Er zijn meerdere versies van ” host ” met verschillende uitvoerformaten. Bijv. de meeste systemen lijken de BIND9-versie te hebben, maar mijn Ubuntu 10.04 LTS-server heeft op de een of andere manier een compleet andere versie.
  • als je ‘ niet host of dig geïnstalleerd, kunt u in plaats daarvan ping gebruiken die altijd beschikbaar is: ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}" dit heeft geen nodig extra pakketten worden geïnstalleerd op de meeste Unix / Linux-matchines.
  • Dit antwoord verdient een serieuze downvote. host is een DNS-tool (vergelijkbaar met nslookup), dus het zoekt alleen hosts op in DNS, niet in bijv. /etc/hosts. Het is dus NIET een antwoord op de vraag van OP ‘ s.

Antwoord

Ik heb een tool op mijn machine die de klus lijkt te klaren. De man-pagina laat zien dat het lijkt te komen met mysql … Hier is hoe je het zou kunnen gebruiken:

resolveip -s unix.stackexchange.com 64.34.119.12 

De geretourneerde waarde van deze tool is anders dan 0 als de hostnaam niet kan worden omgezet:

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

UPDATE Op fedora wordt het geleverd met 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 

Ik denk dat het een vreemde afhankelijkheid voor je script zou creëren …

Opmerkingen

  • Dit lijkt de enige oplossing hier te zijn die de OS ‘ s ingebouwde resolver gebruikt – dus werkt voor / etc / hosts en DNS.
  • getent, zoals beschreven in het andere antwoord, kijkt ook naar / etc / hosts, en wordt geleverd met glibc, dus heeft geen afhankelijkheden op een Linux-systeem.
  • Ik zou resolvip niet gebruiken omdat je een afhankelijkheid van een ander pakket creëert. getent wordt standaard geïnstalleerd. host, nslookup en dig zijn allemaal in optionele pakketten. Gebruik getent zeker in een script.
  • ik vind dit antwoord leuk, maar het ‘ retourneert geen ipv6

Answer

Het volgende commando met dig stelt je in staat om het resultaat direct te lezen zonder enige sed / awk / etc. magie:

$ dig +short unix.stackexchange.com 64.34.119.12 

dig is ook opgenomen in de dnsutils pakket.


Opmerking : dig heeft een retourwaarde van 0, zelfs als de naam niet kon worden omgezet. Je moet dus “controleren of de uitvoer leeg is in plaats van de geretourneerde waarde te controleren:

hostname=unix.stackexchange.com ip=`dig +short $hostname` if [ -n "$ip" ]; then echo IP: $ip else echo Could not resolve hostname. fi 

Opmerking 2 : als een hostnaam meerdere IP-adressen heeft (probeer bijvoorbeeld debian.org), dan worden ze allemaal geretourneerd. Dit “probleem” heeft invloed op alle tools die tot dusver in deze vraag zijn genoemd:

Opmerkingen

  • Merk op dat als een domein een CNAME-vermelding heeft zijn domein kan in de eerste regel worden afgedrukt in plaats van een IP-adres.

Answer

getent hosts unix.stackexchange.com | cut -d" " -f1 

Reacties

  • Overweeg ook ahosts, ahostsv4, ahostsv6 met getent.
  • cut zal niet voor getent ‘ s, die \t gebruiken om kolommen te scheiden. Dit is het geval op Solaris.
  • @ceving: Op Sola ris moet je misschien cut uitvoeren zonder -d (standaard \t als scheidingsteken). Op Linux zijn ‘ spaties, dus de regel hierboven werkt.

Antwoord

De oplossingen die tot nu toe zijn gegeven, werken meestal in het eenvoudigere geval: de hostnaam wordt direct omgezet in een enkel IPv4-adres. Dit is misschien het enige geval waarin u hostnamen moet oplossen, maar zo niet, dan vindt u hieronder een bespreking van enkele gevallen die u mogelijk moet behandelen.

Chris Down en Heinzi bespraken kort het geval waarin de hostnaam wordt opgelost. naar meer dan één IP-adres. In dit geval (en andere hieronder) kan basisscripting onder de veronderstelling dat een hostnaam direct wordt omgezet naar een enkel IP-adres, defect raken. Hieronder een voorbeeld met een hostnaam die wordt omgezet in meer dan één IP-adres:

$ 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 

Maar wat is www.l.google.com ? Dit is waar de alias case moet worden geïntroduceerd. Laten we eens kijken naar het onderstaande voorbeeld:

$ 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 

Dus www.google.com wordt niet direct omgezet naar IP-adressen, maar naar een alias die zichzelf herleidt naar meerdere IP-adressen. Voor meer informatie over aliassen, kijk hier . Het is natuurlijk mogelijk dat een alias één IP-adres heeft , zoals hieronder getoond:

$ 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 

Maar kunnen aliassen worden geketend?Het antwoord is ja:

$ 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 

Ik heb geen voorbeeld gevonden waarin een hostnaam wordt omgezet in een alias die niet wordt omgezet in een IP-adres, maar ik denk dat de geval kan voorkomen.

Meer dan meerdere IP-adressen en aliassen, zijn er enkele andere speciale gevallen … hoe zit het met IPv6? Je zou kunnen proberen:

$ 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 

Waar de hostnaam ipv6.google.com een IPv6-hostnaam is. Hoe zit het met dual-stack hostnamen:

$ 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:: 

Nogmaals over IPv6, als uw host alleen IPv4 is, kunt u nog steeds IPv6-adressen omzetten (getest op een IPv4 alleen WinXP en met ipv6.google.com zou je het kunnen proberen op Linux). In dit geval lukt de oplossing, maar een ping mislukt met een onbekende hostfoutmelding . Dit kan een geval zijn waarin uw scripting mislukt.

Ik hoop dat die opmerkingen nuttig waren.

Opmerkingen

  • Wat een geweldige aanvulling op het geaccepteerde antwoord, waarbij alle randgevallen worden getoond die men zou willen behandelen in scripting. Mijn versie host vermeldt niet eens ” heeft adres ” voor mijn boxen.

Answer

Om het probleem met aliassen te vermijden en altijd een enkel IP-adres klaar voor gebruik te hebben:

python -c "import socket; print socket.gethostbyname("www.example.com")" 

Reacties

Answer

ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s/).*//" | sed -e "s/.*(//" 

werkt zonder afhankelijkheden van andere systemen (en voor hosts gespecificeerd in / etc / hosts)

Opmerkingen

  • Het gebruik van ping is wat ik nodig had, aangezien ik de waarde van het hosts-bestand nodig heb, maar het sed-patroon correct ontleedt, maar dit werkte ping – q -c 1 -t 1 uw_host_hier | grep PING | sed -e ” s / ^ [^ (] * [(] // ” | sed -e ” s / [)]. * $ // ”
  • Om iets op mijn thuisnetwerk zoals mijnhostnaam.local op te lossen, werkt dit zo voor mij is dit het beste antwoord.
  • Mag ik dit ook voorstellen: ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
  • getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> werkt ook voor declaraties in /etc/hosts … en het is ‘ s de go-to-tool voor alle soorten systeemdatabases (passwd, group, aliassen, services).

Answer

Eenvoudig maar nuttig :

  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

Alle opdrachten zullen een IP-adres omzetten als de host nog steeds bestaat. Als de host naar een CNAME verwijst, krijgt hij ook het IP-adres in dat case.

Het eerste commando retourneert het opgeloste IPv4-adres.

Het tweede commando retourneert het res olved IPv6-adres.

Het derde commando retourneert het voorkeursadres van de eigenaar, dat een IPv4- of een IPv6-adres kan zijn.

Opmerkingen

  • Verreweg de eenvoudigste. En het is standaard beschikbaar. Niet zoals host waarvoor installatie van het bindutils

Antwoord

Hier is een kleine variatie op de ping -benadering die rekening houdt met “onbekende host” (door door stderr te leiden) en tr om het gebruik van sed regexps te vermijden:

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

Voor het geval dat het is belangrijk om de exit-waarde vast te leggen, dan werkt het volgende (hoewel minder elegant):

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

Reacties

  • Ik ben dol op deze oplossing, omdat deze werkt zonder extra tools.

Answer

Om het antwoord van Chris Down te voltooien en jfgagne-opmerkingen over (mogelijk gekoppelde) aliassen te adresseren, is hier een oplossing die:

  • rekening houdt met meerdere IP-adressen
  • rekening houdt met een of meer aliassen (CNAME)
  • vraagt niet naar /etc/hosts -bestand ( in mijn geval wilde ik het niet); om het te doorzoeken, is de python-oplossing van dbernt perfect)
  • gebruikt geen awk / sed

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

Retourneert altijd het eerste IP-adres, of lege tring indien niet opgelost. met versie van dig:

 $ dig -v DiG 9.8.1-P1 

Reacties

  • Bedankt, andere antwoorden gaan ervan uit dat ” dig + short ” altijd retourneert een enkel IP-adres. Ze waren ‘ t goed voor CNAMEs.

Antwoord

 php -r "echo gethostbyname("unix.stackexchange.com");" 

Reacties

  • dit werkt, maar het vereist dat php op je terminal is geïnstalleerd
  • kan handig zijn op een typische php docker-container waar ” host “, ” dig ” etc. zijn niet beschikbaar

Antwoord

Ik had dit graag als commentaar willen toevoegen aan Andrew McGregor Re: ping. Het zou me echter niet toestaan, dus ik moet dit als een ander antwoord toevoegen. (Als iemand het in een opmerking kan verplaatsen, voel je dan vrij.)

Dit is een andere variant, alleen met ping en grep :

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

grep -E voor uitgebreide reguliere expressie en grep -o naar retourneert alleen het overeenkomende deel. de regexp zelf zoekt vier keer naar een of meer cijfers ([0-9]+) en optioneel een punt (\.?) ( {4})

Antwoord

Je zou :

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 

Antwoord

hier “een Bash-recept Ik heb de antwoorden van andere mensen gebruikt – probeer eerst /etc/hosts, en val dan terug op 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 }  

Reacties

  • Voor alle duidelijkheid: getent hosts isn ‘ t alleen een zoekopdracht in / etc / hosts – het ‘ is een volledige DNS-oplossende oproep naar gethostbyaddr (3) , en het ‘ s zeer zal waarschijnlijk niet falen in een geval waarin dig zal slagen. Zie de man-pagina voor getent .
  • @Stuart heeft gelijk – i ‘ heb geleerd veel sinds ik dat heb geschreven en een krachtig commando te simpel gemaakt. getent blijft mijn favoriet, hoewel ik ook graag dig +short

Antwoord

nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n "s/.*[(]\([0-9\.]*\)[)].*/\1/p" 

was de oplossing die ik vond zonder DNS-server

Antwoord

Misschien niet de meest beknopte, maar het lijkt robuust en efficiënt te zijn:

# $(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 } 

Dit zal een enkele IPv4 uitvoeren IP en retourneer 1 in het geval van een storing, terwijl de uitvoer van stderr wordt gemaskeerd.

U kunt het als volgt gebruiken:

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 

Het IP-adres van Google is 216.58.192.46.

Als u in plaats daarvan een IPv6-adres wilt, vervang dan -4 door -6.

Antwoord

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

Reacties

  • Enige context op welke manier dat antwoord verbetert ten opzichte van de reeds bestaande wees geweldig. Laat commandos ook 4 spaties inspringen (zie de markdown-syntaxis).

Antwoord

dig is ook traag, nslookup is veel sneller

nslookup google.com | grep -Po "Address:\s*[0-9.]+" | tail -1 | sed -e "s/Address:\s*//g" 

Antwoord

1 regel lost een lijst op van hostnaam

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

Antwoord

Ik doe dit de hele tijd op mijn Mac die geen getent heeft. ping lijkt een hack. Ik zou ook rekening willen houden met /etc/hosts.

Dus ik schreef een stomme wrapper voor dns.lookup voor jullie die Node.js hebben geïnstalleerd om een CLI te bieden:

$ npm install -g lookup-hostname $ lookup google.com 62.243.192.89 

Reacties

  • 60% kans breuk voordat je in de buurt van een oplossing komt.
  • @dotbit kun je uitweiden? Ik ‘ heb dit wekelijks gebruikt sinds ‘ 17 en heb nooit problemen gehad.
  • @Jensen maar jij ‘ re de enige ooit, zoals altijd. De rest van ons komt meestal FAIL van de een of andere soort tegen, en altijd.
  • ” zoals altijd ” Wat bedoel je daarmee? ” De rest van ons ” Wie ‘ is dat ? ” is FAIL tegengekomen ” Welk specifiek probleem zie je? Ik ‘ ben nieuwsgierig.

Antwoord

Ik niet ” Ik weet de gemakkelijkste manier voor een bash-script, maar als je een hostnaam wilt oplossen en wilt zien of de host actief is, gebruik dan ping!

ping -a hostname -c 1 

Zal ping een keer de host zijn en de hostnaam omzetten in het IP-adres.

$ 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 

Reacties

  • ping gebruiken is goed, want iedereen heeft het, maar je moet wel filter het IP-deel uit de uitgangen, als je het in een script wilt gebruiken.

Antwoord

Ja, er zijn al veel antwoorden, maar een oplossing met perl ontbreekt:

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

In een bash-script zou het als volgt kunnen worden gebruikt:

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

Modules die hier worden gebruikt, zijn kernmodules, dus zouden overal beschikbaar moeten zijn zonder installatie met CPAN.

Reacties

  • perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null is veel schoner. maar niemand behalve wij twee gebruiken p ö rl, alle anderen gebruiken natuurlijk Pascal Script.
  • Eigenlijk zie ik liever de foutmeldingen als er iets is gaat fout. Can't call method "addr" on an undefined value isn ‘ t precies de beste foutmelding, maar kan een hint geven over het probleem.

Antwoord

#!/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! " 

Reacties

  • De ruby-versie drukt aanhalingstekens af rond het IP-adres — waarschijnlijk moet print worden gebruikt in plaats van p.
  • bedankt, @Slaven Rezic en voel je vrij om te stemmen. nogmaals, hier onderaan is het script misschien beter zichtbaar … 😉

Answer

host -t a cisco.com 

deze opdracht zal het ip-adres tonen (zal domein naar IP veranderen)

Answer

Naast bovenstaande oplossing, kunt u meerdere hostnamen naar ip vertalen via het onderstaande script, de enige afhankelijkheid is de “ping” -opdracht in de kern 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 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *