Hogyan tudom feloldani a gazdagépnevet egy Bash szkript IP-címére?

Mi a legtömörebb módszer a hostnév feloldására egy IP-címre egy Bash-szkriptben? A következőt használom: Arch Linux .

Megjegyzések

  • Szégyen, hogy a getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> válasz van valahol odalenn, a fenék közelében. ‘ a legegyszerűbb, nem igényel extra csomagokat, és könnyebb elemezni egy Bash szkriptből is.
  • @ 0xC0000022L: Az új szégyen az, hogy ez a válasz getent hosts somehost -re utal, amikor futtatja ezt , miközben somehost IPv6-címet fog létrehozni , amely eltér a legtöbb más eszköztől (ping, ssh legalább) feloldja a neveket, és megtör néhány dolgot. Használja az ahosts szót a hosts helyett.
  • @j_random_hacker: aki megakadályozza, hogy kifejezetten IPv4-et kérjen (ahostsv4) vagy IPv6 (ahostsv6) címek? Személy szerint nem találok semmi hibát abban, hogy a nem specifikált kérelem visszaküldi az IPv6-ot. El kell készíteni a kódot. Az IPv6 már több mint 20 éve létezik odakinn.
  • @ 0xC0000022L: Senki ” nem tart vissza ” ezt megteszem, de a válasz kifejezetten hosts javaslatot tesz, és eddig 4 ember szavazta meg a vinc17 ‘ kommentet, amelyben kifejezte a ” hirtelen IPv6 “. Az IPv6-ra való felkészülés nem mindig a kérdés: sok programnak módja van annak meghatározására, hogy két név / cím ugyanazon gazdagépre vonatkozik-e. Vagy egyszerű karakterlánc-egyezést használhatnak, vagy sokat kell tudniuk a hálózatról, hogy megtalálják a ” true ” választ. Ez utóbbi egy aknamező, annyi harmadik féltől származó program és rendszer – amelyet nem tudok ellenőrizni – az előbbit használja.

Válasz

Használhatja a getent alkalmazást, amely a glibc melléklettel érkezik (tehát Linuxon szinte biztosan megvan) . Ez megoldódik a gethostbyaddr / gethostbyname2 használatával, és így ellenőrizni fogja a /etc/hosts / NIS / etc parancsot is:

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

Vagy, amint Heinzi alább elmondta, használhatja az dig elemet a +short argumentummal (a DNS-kiszolgálókat közvetlenül kérdezi, nem a /etc/hosts / NSS / etc):

dig +short unix.stackexchange.com 

Ha a dig +short nem érhető el, bármelyik az alábbiaknak működnie kell. Mindezek közvetlenül lekérdezik a DNS-t, és figyelmen kívül hagyják a felbontás egyéb módjait:

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

Ha csak egy IP-t szeretne kinyomtatni, adja hozzá a exit parancs a awk” munkafolyamatához.

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

Megjegyzések

  • Alapértelmezés szerint a dig használata csak az ipv4 esetén működik, ahol a gazdagép mind az ipv4, mind az ipv6 válaszokat megadja. Ez váratlan lehet. Megpróbálhatja a következőt: 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.
  • A DIG nem működik, ha CNAME, akkor nem adja vissza az IP-t.
  • Néha host időtúllépés lehet, és semmit sem ad vissza. Bizonyos tartományoknál az dig +short tartományi álnevet adhat vissza az első sorba. Tehát annak biztosítása érdekében, hogy a kimenet IPv4 legyen címet, használja a következőt: dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1.
  • A getent hosts <host> használata helytelen, mint az instan esetében Ez megadhat IPv6-címet, miközben az IPv6 ‘ nem működik. A helyes megoldás az getent ahosts <host> használata, ha szükséges, mind az IPv6, mind az IPv4 kipróbálására.
  • Megemlítendő: Úgy tűnik, hogy a host, dig és az nslookup közvetlenül beszél a felsorolt szerverekkel a resolv.conf fájlban, míg a ” getent hosts ” tiszteletben tartja mind a helyi gazdagépfájlt, mind pedig a könyvtárszintű gyorsítótárat (például nscd), ha engedélyezve van .

Válasz

A következővel: host = “42fabf6d41”>

dnsutils csomag:

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

( Javítva csomag neve a megjegyzések szerint. Megjegyzésként más disztribúcióknak host vannak különböző csomagokban: Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)

Megjegyzések

  • Lásd az alábbi resolip bejegyzést, ha olyan dolgot szeretne megoldani, amely nincs a DNS-ben (pl. / Etc / hosts)
  • Ne feledje, hogy div id = “fc95fabfa4”> néha többsoros kimenetet ad vissza (átirányítások esetén), ‘ ll host unix.stackexchange.com | tail -n1 ha csak az IP címmel rendelkező sort akarja.
  • A ” host ” többféle kimeneti formátummal rendelkezik. Például. úgy tűnik, hogy a legtöbb rendszer BIND9 verzióval rendelkezik, de az Ubuntu 10.04 LTS szerveremnek valamilyen teljesen más verziója van.
  • ha nincs ‘ nincs host vagy dig telepítve használhatja a pinget, amely mindig elérhető: ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}" ehhez nincs szükség extra csomagok települnek a legtöbb Unix / Linux mérkőzésre.
  • Ez a válasz komoly visszhangot érdemel. Az host egy DNS-eszköz (hasonló a nslookup -hez), így csak a DNS-ben keresi a gazdagépeket, pl. /etc/hosts. Tehát NEM válasz az OP ‘ kérdésre.

Válasz

Van egy eszköz a gépemen, amely úgy tűnik, hogy elvégzi a munkát. A man oldal azt mutatja, hogy úgy tűnik, hogy a mysql-lel érkezik … Így használhatja:

resolveip -s unix.stackexchange.com 64.34.119.12 

Az eszköz visszatérési értéke eltér a 0-tól ha a hosztnév nem oldható fel:

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

UPDATE A fedorán a mysql-server jön:

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 

Gondolom, furcsa függőséget okozna a szkriptedben …

Megjegyzések

  • Úgy tűnik, ez az egyetlen megoldás itt, amely az OS ‘ rendszer beépítését használja a resolverben – így működik Az / etc / hosts, valamint a DNS.
  • getent, amint azt a másik válasz részletezi, az / etc / hosts-ra is kitekint, és a glibc-vel együtt érkezik, tehát nincs függősége egy Linux rendszertől.
  • Nem használnám a resolipet, mivel egy másik csomagtól hoz létre függőséget. A getent alapértelmezés szerint telepítve van. A host, az nslookup és a dig opcionális csomagokban vannak. Mindenképpen használja a getent parancsfájlt.
  • tetszik ez a válasz, de nem ‘ nem adja vissza az ipv6

Válasz

A következő parancs, amely a dig parancsot használja, lehetővé teszi az eredmény közvetlen olvasását sed / awk / stb. Nélkül. varázslat:

$ dig +short unix.stackexchange.com 64.34.119.12 

dig is szerepel a dnsutils csomag.


Megjegyzés : dig visszatérési értéke 0, még akkor is, ha a nevet nem sikerült feloldani. Ezért a visszatérési érték ellenőrzése helyett ellenőriznie kell, hogy a kimenet üres-e:

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

2. megjegyzés : Ha a gazdagépnévnek több IP-címe van (próbálkozzon például debian.org), akkor mindegyik Ez a “probléma” a kérdésben eddig említett összes eszközt érinti:

Megjegyzések

  • Ne feledje, hogy ha egy domain rendelkezik CNAME bejegyzéssel tartománya IP-cím helyett az első sorba nyomtatható.

Válasz

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

Megjegyzések

  • Fontolja meg a következőt: ahosts, ahostsv4, ahostsv6 és getent.
  • cut nem getent ‘ s, amelyek a \t t használják oszlopok elkülönítésére. Ez a helyzet a Solaris esetében.
  • @ceving: Solán ris lehet, hogy cut -et -d nélkül kell futtatnia (alapértelmezés szerint \t mint elválasztó). Linuxon ‘ szóközökkel rendelkezik, így a fenti sor működik.

Válasz

Az eddig megadott megoldások többnyire egyszerűbb esetben működnek: a hosztnév közvetlenül egyetlen IPv4-címre bomlik. Ez lehet az egyetlen eset, amikor meg kell oldania a gazdagépneveket, de ha nem, akkor az alábbiakban bemutatunk néhány esetet, amelyeket esetleg kezelnie kell.

Chris Down és Heinzi röviden átbeszélte azt az esetet, amikor a gazdagépnév megoldódott több IP-címre. Ebben az esetben (és az alábbiakban felsoroltaknál) megszakadhat az alapvető szkriptelés, feltéve, hogy a hosztnév közvetlenül egyetlen IP-címre változik. Az alábbiakban egy példa több IP címet feloldó hosztnévre:

$ 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 

De mi az a www.l.google.com ? Itt kell bevezetni a alias esetet. Ellenőrizzük az alábbi példát:

$ 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 

Tehát www.google.com nem közvetlenül az IP-címekre, hanem álnév, amely több IP-címre képes feloldódni. Az álnevekkel kapcsolatos további információkért ellenőrizze itt . Természetesen lehetséges az az eset is, amikor egy álnévnek egyetlen IP-címe van. , az alábbiak szerint:

$ 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 

De az álnevek láncolhatók-e?A válasz igen:

$ 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 

Nem találtam olyan példát, ahol a gazdagépnév egy álnévre bomlik, amely nem oldódik fel IP-címre, de azt hiszem, eset fordulhat elő.

Több IP-címen és álnéven kívül létezik más speciális eset is … mi van az IPv6-tal? Kipróbálhatja:

$ 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 

Ahol a hosztnév ipv6.google.com csak IPv6-alapú hosztnév. Mi a helyzet a kettős kötegű hosztnevekkel:

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

Ismételten az IPv6-ról, ha csak hosztja IPv4, akkor is megoldhatja az IPv6-címeket (csak IPv4-en tesztelt WinXP és az ipv6.google.com címen kipróbálhatod Linuxon). Ebben az esetben a felbontás sikeres, de a ping meghiúsul ismeretlen gazdagép hibaüzenettel . Ez lehet az eset, amikor a szkriptje nem sikerül.

Remélem, hogy ezek a megjegyzések hasznosak voltak.

Megjegyzések

  • Milyen nagyszerű kiegészíti az elfogadott választ, bemutatva mindazokat az éles eseteket, amelyekkel érdemes foglalkozni a szkriptelés során. Az én verzióm host még azt sem állítja, hogy ” van-e ” címe a fiókokhoz.

Válasz

Az álnevekkel kapcsolatos problémák elkerülése és az egyetlen IP-cím mindig használatra kész:

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

Megjegyzések

Válasz

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

függetlenül működik más rendszerektől (és az / etc / hosts fájlban megadott gazdagépeknél)

Megjegyzések

  • A ping használatára szükségem van, mivel szükségem van a gazdagép fájl értékére, de a sed minta helyesen értelmezõdik, de ez a pinget bevált – q -c 1 -t 1 az ön_gazdája_itt | fogd PING | sed -e ” s / ^ [^ (] * [(] // ” | sed -e ” s / [)]. * $ // ”
  • Az otthoni hálózaton található valamilyen probléma megoldása, például a myhostname.local, ez így működik nekem ez a legjobb válasz.
  • Javasolhatom ezt is: ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
  • getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> a /etc/hosts belüli deklarációkhoz is működik … és ez ‘ s a go-to-tool mindenféle rendszeradatbázishoz (passwd, group, álnevek, szolgáltatások).

Válasz

Egyszerű, de hasznos :

  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

Minden parancs felold egy IP-címet, ha a gazdagép még mindig létezik. Ha a gazdagép egy CNAME-re mutat, akkor az IP-t is megkapja eset.

Az első parancs a megoldott IPv4-címet adja vissza.

A második parancs a res-t adja vissza olved IPv6 cím.

A harmadik parancs visszaadja a tulajdonos által preferált címet, amely lehet IPv4 vagy IPv6 cím.

Megjegyzések

  • Messze a legegyszerűbb. És alapértelmezés szerint elérhető. Nem olyan, mint host, amelyekhez telepíteni kell a bindutils

Válasz

Íme a ping megközelítés egy kis változata, amely figyelembe veszi az “ismeretlen gazdagépet” (a stderr-n keresztül vezetve), és a tr a sed regexps használatának elkerülése érdekében:

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

Abban az esetben, ha fontos a kilépési érték rögzítése, akkor a következők működnek (bár kevésbé elegánsak):

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

megjegyzések

  • Szeretem ezt a megoldást, mert minden további eszköz nélkül működik.

Válasz

Chris Down válaszának kitöltése és a jfgagne (esetleg láncolt) álnevekre vonatkozó megjegyzések megszólítása érdekében íme egy megoldás, amely:

  • több IP-t vesz figyelembe
  • figyelembe veszi egy vagy több álnév (CNAME)
  • nem lekérdezi a /etc/hosts fájlt ( az én esetemben nem akartam); a lekérdezéshez a dbernt “s python megoldása tökéletes)
  • nem használja az awk / sed

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

Mindig adja vissza az első IP-címet, vagy ha az üres tringet nem sikerült megoldani. class = “comments”>

  • Köszönöm, a többi válasz feltételezi, hogy ” dig + short ” mindig visszatér egyetlen IP-cím. Nem fogják ‘ t elszámolni a CNAME-ekkel.
  • Válasz

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

    Megjegyzések

    • ez működik, de megköveteli, hogy a php legyen telepítve a terminálodra.
    • hasznos lehet egy tipikus php-dokkolóban, ahol ” host “, ” dig ” stb. nem érhetők el

    Válasz

    Szeretném ezt megjegyzésként hozzáadni Andrew McGregor Re: pinghez. Ez azonban nem engedi meg, ezért hozzá kell adnom ezt egy másik válaszként. (Ha valaki át tudja írni egy megjegyzésbe, nyugodtan tegye.)

    Ez egy másik változat, csak a ping és a grep használatával :

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

    grep -E a kiterjesztett reguláris kifejezésért és grep -o csak a megfelelő részt adja vissza: maga a regexp egy vagy több számjegyet ([0-9]+) és opcionálisan egy pontot (\.?) keres négyszer ( {4})

    Válasz

    Használhatja a :

    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 

    Válasz

    itt “Bash recept Más népi válaszok segítségével készültem – először megpróbálom a /etc/hosts -t, majd visszalépek az nslookup oldalra:

     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 }  

    Megjegyzések

    • Az egyértelműség kedvéért getent hosts nem ‘ csak egy keresés az / etc / hosts fájlban – ez ‘ egy teljes DNS-feloldó hívást küld a gethostbyaddr (3) , és ‘ s nagyon nem valószínű, hogy megbukik abban az esetben, ha dig sikeres lesz. Lásd a getent kézikönyv oldalát .
    • A @Stuartnak igaza van – én ‘ megtanultam sokat írtam, mióta ezt megírtam, és túlságosan leegyszerűsített egy erős parancsot. A getent továbbra is a kedvencem, bár nekem is tetszik a dig +short

    Válasz

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

    volt a megoldás, amelyet DNS-szerver nélkül találtam

    Válasz

    Talán nem a legtömörebb, de úgy tűnik, hogy robusztus és hatékony:

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

    Ez egyetlen IPv4-et fog kiadni IP, valamint meghibásodás esetén adja vissza a 1 -t, miközben maszkolja a stderr kimenetet.

    Használhatja így:

    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 

    A Google IP-címe 216.58.192.46.

    Ha IPv6-címet szeretne helyette, egyszerűen cserélje le a -4 szót a -6 kifejezésre.

    Válasz

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

    Megjegyzések

    • Bizonyos kontextus, hogy a válasz hogyan javul a már meglévőkhöz képest Legyél nagyszerű. Kérjük, írja be a parancsokat 4 szóközzel (vö. A markdown szintaxissal).

    Válasz

    az ásás is lassú, az nslookup sokkal gyorsabb

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

    Válasz

    1 sor felold egy listát gazdagépnév

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

    Válasz

    Ezt állandóan a saját Mac, amelynek nincs getent. A ping feltörésnek tűnik. Szeretném figyelembe venni a /etc/hosts -t is.

    Szóval írtam egy hülye burkolót a következőhöz: dns.lookup Ön, akinek a Node.js telepítve van CLI biztosításához:

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

    Hozzászólások

    • 60% az esély a törés előtt, mielőtt a megoldás közelébe érne.
    • @dotbit részletezné? ‘ ezt a hetet használtam ‘ 17 óta, és soha nem volt problémám.
    • @Jensen, de te ‘ re az egyetlen, mint mindig. A többiek általában az egyik vagy másik FAIL-ba ütköznek, és mindig.
    • ” mint mindig ” Mit értesz ez alatt? ” A többiek ” Ki ‘ ? ” befut a FAIL ” Milyen konkrét problémát lát?

    kíváncsi vagyok.

    Válasz

    Nem ” Nem tudom a bash-script legegyszerűbb módját, de ha fel akarod oldani a gazdagép nevét, és megnézed, hogy a gazdagép fent van-e, használd a ping!

    ping -a hostname -c 1 

    Egyszer ping fogja a gazdagépet, és feloldja a hosztnevet IP-címre.

    $ 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 

    Megjegyzések

    • a ping használata jó, mert mindenkinek megvan, de meg kell szűrje ki az IP-részt a kimenetekből, ha azt szkriptben szeretné használni.

    Válasz

    Igen, már sok válasz van, de hiányzik a perl-t használó megoldás:

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

    Egy bash szkriptben így lehetne használni:

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

    Az itt használt modulok alapvető modulok, ezért mindenhol elérhetőnek kell lenniük a CPAN-nal történő telepítés nélkül.

    Megjegyzések

    • perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null sokkal tisztább. de kettőnkön kívül senki nem használja a p ö rl-t, mindenki más természetesen a Pascal Script-et használja.
    • Valójában inkább a hibaüzeneteket látom, ha bármi elromlik. A Can't call method "addr" on an undefined value nem ‘ nem éppen a legjobb hibaüzenet, de utalást adhat a problémára.

    Válasz

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

    Megjegyzések

    • A rubin verzió idézőjeleket nyomtat az IP-cím körül — valószínűleg print -t kell használni a p helyett.
    • thx, @Slaven Rezic és nyugodtan szavazzon. akkor itt alul a szkript valóban láthatóbb lehet … 😉

    Válasz

    host -t a cisco.com 

    ez a parancs megjeleníti az ip címet (a tartományt IP-re fogja váltani)

    Válasz

    A fenti megoldás mellett több állomásnevet is lefordíthat ip-be az alábbi szkript segítségével, az egyetlen függőség a “ping” parancs a Unix magban:

    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 

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük