Ana bilgisayar adını Bash komut dosyasında bir IP adresine nasıl çözebilirim?


416

Ana bilgisayar adını Bash komut dosyasında bir IP adresine çözümlemenin en özlü yolu nedir? Arch Linux kullanıyorum .


21
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>Cevabın aşağıya yakın bir yerde olması konusunda utanç . En basittir, ekstra paket gerektirmez ve Bash komut dosyasından ayrıştırılması da kolaydır .
0xC0000022L

1
@ 0xC0000022L: Yeni utanç o cevap düşündürmesidir getent hosts somehostzaman, bu çalışan üzerinde süresomehost IPv6 adresi üretecek diğer birçok araçları (nasıl farklıdır, ping, sshen azından) adlarını çözümlemek ve bazı şeyleri kırar. Kullanım ahostsyerine hosts.
j_random_hacker

@j_random_hacker: sizi özellikle IPv4 ( ahostsv4) veya IPv6 ( ahostsv6) adresleri istemekten kim alıkoyuyor ? Şahsen ben IPv6 döndüren spesifik olmayan istekle ilgili yanlış bir şey bulamıyorum. Kodunuz hazırlanmalı. IPv6 20 yıldan beri orada.
0xC0000022L

@ 0xC0000022L: Kimse beni "engellemiyor", ama cevabın özellikle önerdiği gibi hosts, şu ana kadar 4 kişi, "aniden IPv6" nın neden olduğu acıyı ifade eden vinc17'nin yorumunu reddetti. IPv6'ya hazırlıklı olmak her zaman sorun değildir: birçok programın, iki adın / adresin aynı ana bilgisayara yönlendirilip iletilmediğini belirleme yöntemine ihtiyacı vardır. Basit bir dize eşlemesi kullanabilirler veya "doğru" cevabını bulmak için ağ hakkında çok şey bilmeleri gerekir. İkincisi, bir mayın tarlasıdır, pek çok 3. parti program ve sistem - ki bunlar üzerinde hiçbir kontrolüm yok - birincisini kullanın.
j_random_hacker

Yanıtlar:


533

Sen kullanabilirsiniz getentbirlikte gelir ki, glibc(böylece neredeyse kesin Linux'ta var). Bu, gethostbyaddr / gethostbyname2 işlevini kullanır ve böylece /etc/hosts/ NIS / etc öğesini de denetler:

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

Heinzi aşağıda söylediği gibi Ya da, kullanabilirsiniz digile +short(bakmaz, doğrudan sorgular DNS sunucuları argüman /etc/hosts/ NSS / vs):

dig +short unix.stackexchange.com

Kullanılamıyorsa dig +short, aşağıdakilerden herhangi biri çalışmalıdır. Bu sorguların tümü doğrudan DNS’yi sorgular ve diğer çözüm yollarını yok sayar:

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

Yalnızca bir IP yazdırmak istiyorsanız, exitkomutu awkiş akışına ekleyin .

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

2
Varsayılan olarak, dig'i kullanmak sadece hostun hem ipv4 hem de ipv6 cevapları verdiği ipv4 ile çalışır. Bu beklenmedik olabilir. Deneyebilirsin 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 21:11

6
DIG çalışmıyor, bir CNAME ise IP'ye geri dönmeyecek.
sorin

4
Bazen hostzaman aşımına uğrar ve hiçbir şey döndürmez. Bazı etki alanları için, dig +shortilk satırdaki alan takma adını döndürebilir. Bu nedenle, çıktının bir IPv4 adresi olduğundan emin olmak için kullanın dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1.
caiguanhao

9
Kullanma getent hosts <host>yanlış, örneğin IPv6 çalışmıyorken bir IPv6 adresi verebilir. Doğru çözüm, getent ahosts <host>gerekirse IPv6 ve IPv4'ü denemek için kullanmaktır .
vinc17

5
Bahsetmeye değer: host, dig ve nslookup, resolv.conf'ta listelenen sunucularla doğrudan konuşuyor gibi gözüküyor, "getent host" ise hem yerel host dosyasına hem de kitaplık düzeyinde önbelleğe almayı (örneğin, nscd) dikkate alıyor.
Saustrup

141

İle hostgelen dnsutils paketinin:

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

( Yorumlara göre paket adı düzeltildi . Diğer dağıtımların hostfarklı paketlerde bulundukları bir not olarak : Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)


4
Bunu mu demek istedin dnsutils ? Neyse, iyi hostçalıştı, teşekkürler
Eugene Yarmash

Muhtemelen haklısın. Kontrol etmek için burada kemerim yok. (Daha sonra bunu söyleyen bir yorum eklemek niyetindeydim, ancak cevap zaten reddedildi, bu yüzden çivilediğimi
sandım

1
DNS'de olmayan bir şeyi çözmeniz gerekirse, aşağıdaki çözümleyici girişine bakın (örn. / Etc / hosts dosyası)
Gavin Brock

2
Unutmayın hostbazen (yönlendirmelerin durumunda) çok satırlı çıkışı verir, sen isteyeceksiniz host unix.stackexchange.com | tail -n1sadece IP adresi ile çizgiyi istiyorum.
Edward Coffey

3
Bu cevap ciddi bir aşağı oyu hak ediyor. hostbir DNS aracıdır (buna benzer nslookup), bu nedenle yalnızca DNS'deki ana bilgisayarları arar, örn /etc/hosts. Bu yüzden OP'nin sorusuna bir cevap DEĞİLDİR .
peter

54

Makinemde işi yapan bir aletim var. Man sayfa mysql ile geliyor gibi görünüyor ... İşte nasıl kullanabileceğinizi İşte:

resolveip -s unix.stackexchange.com
64.34.119.12

Ana bilgisayar adı çözümlenemiyorsa bu aracın dönüş değeri 0'dan farklıdır:

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

GÜNCELLEME Fedorada, mysql-server ile birlikte gelir:

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

Senaryosuna garip bir bağımlılık yaratacağını tahmin ediyorum ...


6
Bu, işletim sisteminin yapıcısını çözümleyicide kullanan tek çözüm gibi görünüyor - bu yüzden / etc / hosts dosyası ve DNS için de çalışıyor.
Gavin Brock

8
getentDiğer cevapta da belirtildiği gibi, / etc / hosts dosyasına da bakar ve glibc ile birlikte gelir, bu nedenle Linux sistemine bağımlı değildir.
Asfand Qazi,

44

Aşağıdaki komut dig, sonucu herhangi bir sed / awk / etc kullanmadan doğrudan okumanıza izin verir. sihirli:

$ dig +short unix.stackexchange.com
64.34.119.12

digdnsutilspakete dahil edilmiştir .


Not : isim çözülemese bile dig, bir dönüş değeri vardır 0. Bu nedenle, dönüş değerini kontrol etmek yerine çıktının boş olup olmadığını kontrol etmeniz gerekir:

hostname=unix.stackexchange.com

ip=`dig +short $hostname`

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

Not 2 : Bir ana bilgisayar adında birden fazla IP adresi varsa ( debian.orgörneğin deneyin ), tümü döndürülür. Bu "sorun", şu ana kadar bu soruda bahsedilen araçların tümünü etkiler:


2
Bir etki alanı bir CNAME girdisine sahipse, etki alanının IP adresi yerine ilk satırda yazdırılabileceğini unutmayın.
pcworld

40
getent hosts unix.stackexchange.com | cut -d' ' -f1

4
Ayrıca düşünün ahosts, ahostsv4, ahostsv6ile getent.
0xC0000022L

cut\tsütunları ayırmak için kullanılan getent için olmaz . Solaris'teki durum budur.
16'da

1
@ceving: Solaris'te cutonsuz çalıştırmanız gerekebilir -d(varsayılan \tolarak sınırlayıcı olarak). Linux'ta uzaylar, yani yukarıdaki çizgi çalışıyor.
sborsky

27

Şimdiye kadar verilen çözümler çoğunlukla daha basit durumda işe yarar: ana bilgisayar adı doğrudan tek bir IPv4 adresine çözümlenir. Bu, ana bilgisayar adlarını çözmeniz gereken tek durum olabilir, ancak değilse, bazı durumlarda ele almanız gerekebilecek bir tartışmadır.

Chris Down ve Heinzi, ana bilgisayar adının birden fazla IP adresine çözümlediği durumu kısaca açıkladı. Bu durumda (ve diğerleri aşağıda), bir ana bilgisayar adının doğrudan tek bir IP adresine çözdüğü varsayımı altında temel komut dosyası bozulabilir. Aşağıda, tek bir IP adresinden daha fazlasına çözümlenen bir ana bilgisayar adı örneği:

$ 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

Fakat nedir www.l.google.com? Bu, takma ismin sunulması gereken yer. Aşağıdaki örneği kontrol edelim:

$ 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

Böylece www.google.comdoğrudan IP adreslerine değil, birden fazla IP adresine çözümlenen diğer adı da çözebilir. Takma adlar hakkında daha fazla bilgi için burayı kontrol edin . Tabii ki, bir takma adın tek bir IP adresine sahip olduğu durumda, aşağıda gösterildiği gibi mümkündür:

$ 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

Ancak takma adlar zincirlenebilir mi? Cevap Evet:

$ 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

Bir ana bilgisayar adının bir IP adresine çözümlenmeyen bir diğer adı için çözümlediği hiçbir örnek bulamadım, ancak durumun ortaya çıkabileceğini düşünüyorum.

Birden fazla IP adresi ve diğer adından daha fazlası, başka özel durumlar var mı? IPv6 ne olacak? Deneyebilirsin:

$ 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

Ana bilgisayar adının ipv6.google.comyalnızca IPv6 yalnızca bir ana bilgisayar adı olduğu. Peki ya çift yığınlı ana bilgisayar adları:

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

Yine IPv6 ile ilgili olarak, eğer ana makineniz sadece IPv4 ise, hala IPv6 adreslerini çözebilirsiniz (sadece bir IPv4'te WinXP ve ipv6.google.com ile test edilmiştir), Linux'ta deneyebilirsiniz. Bu durumda, çözünürlük başarılı olur, ancak bir ping bilinmeyen bir ana bilgisayar hata mesajıyla başarısız olur . Bu, komut dizinizin başarısız olduğu bir durum olabilir.

Umarım bu sözler yararlı olmuştur.


2
Kod yazarken ele almak isteyebileceği tüm son durumları gösteren, kabul edilen cevaba ne kadar büyük bir tamamlayıcı. Sürümüm hostkutularım için "adres" bile belirtmiyor.
Mihai Danila,


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

diğer sistemlere bağımlı olmadan çalışır (ve / etc / hosts dosyasında belirtilen ana bilgisayarlar için)


2
Ping kullanımı, hosts dosyasındaki değere ihtiyacım olduğu için gerekli olan, ancak sed deseninin doğru ayrıştırılması, ancak bu işe yaradı ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s / ^ [^ (] * [(] //" | sed -e "s / /)).*$//"
ManiacZX

1
Ev ağımda myhostname.local gibi bir şeyi çözmek için bu işe yarıyor, bu benim için işe yarıyor.
Matt Friedman

1
Bunu da önerebilir miyim:ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
Matt Friedman

getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>içeride bildirimleri için çalışır /etc/hosts, çok ... ve bu kadar sistem veritabanları (passwd, grubun, takma adların hizmetler) her türlü go-to-araç.
0xC0000022L,

17

Basit ama kullanışlı:

  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

Ana bilgisayar hala varsa tüm komutlar bir IP adresini çözecektir. Ana bilgisayar CNAME'ye işaret ediyorsa, bu durumda IP adresi de alınır.

İlk komut çözülen IPv4 adresini döndürür

İkinci komut, çözülen IPv6 adresini döndürür

Üçüncü komut sahiplerinin IPv4 veya IPv6 adreslerini tercih ettikleri adresi döndürür.


Şimdiye kadar en basit olanı. Ve varsayılan olarak avilable. Bunun gibi bir hostyükleme gerektirmezbindutils
michaelbn

7

Burada ping"bilinmeyen ana bilgisayarı" hesaba katan (stderr aracılığıyla piping yaparak) ve regexps trkullanımından kaçınmak için kullanılan yaklaşımın küçük bir varyasyonu sed:

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

Çıkış değerini yakalamak önemlidir, o zaman aşağıdakiler işe yarar (daha az şık olsa da):

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

Bu çözümü çok seviyorum, çünkü fazladan alet kullanmadan çalışıyor.
Radon8472

7

Chris Down'ın cevabını tamamlamak ve (muhtemelen zincirleme) takma adları hakkındaki jfgagne yorumlarını ele almak için, işte size bir çözüm:

  • çoklu IP'leri dikkate alır
  • bir veya daha fazla takma adı dikkate alır (CNAME)
  • /etc/hostsdosya sorgulamıyor (benim durumumda istemedim); Sorgulamak için dbernt'ın python çözümü mükemmeldir)
  • awk / sed kullanmaz

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

Her zaman ilk IP adresini döndürür veya çözülmediyse boş tring. dig sürümüyle:

    $ dig -v
    DiG 9.8.1-P1

1
Teşekkürler, diğer cevaplar "dig + short" in her zaman tek bir ip adresi döndürdüğünü varsayar . CNAME'leri hesaplamıyorlardı.
jamshid

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

bu çalışır, ancak terminalinize php kurulu olmasını gerektirir
Radon8472

1
"host", "dig" vb uygun olmayan tipik bir php liman işçisi konteynırında faydalı olabilir
Fabian Schmengler 5:18

5

Bunu Andrew McGregor Re: ping'e yorum olarak eklemek isterdim. Ancak bana izin vermedi, bu yüzden bunu başka bir cevap olarak eklemem gerekiyor. (Birisi bir yoruma taşıyabilirse, çekinmeyin.)

Bu sadece ping ve grep kullanan bir başka değişkendir:

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

grep -Euzatılmış düzenli ifade için ve grep -osadece eşleşen kısmı döndürmek için. regexp'in kendisi bir veya birden çok rakam ( [0-9]+) ve isteğe bağlı olarak \.?dört kez ( {4}) bir nokta arar.


4

Kullanabilirsiniz 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

4

işte başkalarının cevaplarını kullanarak pişirdiğim bir Bash tarifi - önce dener /etc/hosts, sonra nslookup'a geri döner:

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
}

Açık olmak gerekirse, getent hosts/ etc / hosts sadece bir arama değil - bu tam DNS-çözme çağrısına bir gethostbyaddr (3) ve bu kadar çok bir durumda arıza yapması muhtemel digbaşarılı olacaktır. Getent için man sayfasına bakın .
Stuart P. Bentley,

@Stuart haklı - bunu yazdığımdan beri çok şey öğrendim ve güçlü bir komutu fazla basitleştirdim. getentyine de sevdiğim halde, benim favorim olmaya devam ediyordig +short
RubyTuesdayDONO

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

DNS sunucusu olmadan bulduğum çözümdü


3

Belki de en özlü değildir, ancak sağlam ve verimli görünüyor:

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

Bu, tek bir IPv4 IP çıktısının yanı sıra 1stderr çıktısını maskeleyken hata durumunda geri dönecektir .

Bu şekilde kullanabilirsiniz:

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

Google’ın IP’si 216.58.192.46’dır.

Bunun yerine bir IPv6 adresi istiyorsanız, sadece değiştirmek -4ile -6.


3

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


1
Bu bağlamda cevabın halihazırdaki cevaplar üzerinde nasıl bir iyileşme sağladığı bazı bağlamlar için harika olurdu. Ayrıca, lütfen komutları 4 boşluk bırakarak girin (markdown sözdizimi konusuna bakın).
maxschlepzig

2

1 satır bir ana bilgisayar adı listesini çözer

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

2

Bunu Mac'imde bulunmayan her zaman yapıyorum getent. pingkesmek gibi görünüyor. Ben de /etc/hostsdikkate almak istiyorum .

Bu nedenle, dns.lookupsizin için Node.js yüklü olan bir CLI sağlamak üzere aptal bir paketleyici yazdım :

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

Bir çözüme yaklaşmadan önce% 60 kırılma şansı.
Ağustos’ta

@dotbit detaylandırabilir misiniz? Bunu 17'den beri haftalık olarak kullanıyorum ve hiç sorun yaşamadım.
Thomas Jensen

@Jensen ama her zamanki gibi bir tek sen varsın. Geri kalanımız genellikle bir veya diğer türden FAIL ile karşılaşır ve her zaman.
Ağustos'ta

"her zaman olduğu gibi" Bununla ne demek istiyorsun? "Geri kalanımız" Kim o? "FAIL ile karşılaş" Hangi sorunu görüyorsun? Merak ediyorum.
Thomas Jensen

2

kazmak çok yavaş, nslookup çok daha hızlı

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

2

Bir bash betiğinin en kolay yolunu bilmiyorum ama bir ana bilgisayar adını çözmek ve ana bilgisayarın hazır olup olmadığını görmek istiyorsanız kullanın ping!

ping -a hostname -c 1

pingBir kez ana bilgisayar olacak ve ana bilgisayar adını IP adresine çözecektir.

$ 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

Ping kullanmak iyidir, çünkü herkes kullanabilir, ancak bir IP-Komut dosyasında kullanmak istiyorsanız IP-Partiyi çıkışlardan filtrelemeniz gerekir.
Radon8472

1

Evet, zaten birçok cevap var, fakat perl kullanan bir çözüm eksik:

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

Bir bash betiğinde bu şekilde kullanılabilir:

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

Burada kullanılan modüller çekirdek modüllerdir, bu nedenle her yerde CPAN takmadan kullanılabilir olmalıdır.


perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null çok daha temiz. ama bizden başka kimse pörl kullanmıyor, herkes elbette Pascal Script kullanıyor.
Ağustos'ta

Aslında bir şeyler ters giderse hata mesajlarını görmeyi tercih ederim. Can't call method "addr" on an undefined valuetam olarak en iyi hata mesajı değil, ancak sorun hakkında bir ipucu verebilir.
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!  "

1
Yakut sürümü IP adresinin etrafında alıntılar basıyor - muhtemelen printkullanılması gerekir p.
Slaven Rezic,

thx, @Slaven Rezic ve oy kullanmaktan çekinmeyin. sonra tekrar, burada en alt kısımda komut dosyası daha görünür olabilir ... ;-)
dotbit,

-1
host -t a cisco.com

bu komut ip adresini gösterecektir (etki alanını IP'ye geri gönderir)


-1

Yukarıdaki çözümün yanında, birden fazla ana bilgisayar adını aşağıdaki komut dosyası yoluyla ip'e çevirebilirsiniz, tek bağımlılık çekirdek Unix'te "ping" komutudur:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.