Jaki jest najbardziej zwięzły sposób przekształcenia nazwy hosta na adres IP w skrypcie Bash? Używam Arch Linux .
Komentarze
Odpowiedz
Możesz użyć getent
, który zawiera glibc
(więc prawie na pewno masz go w Linuksie) . To rozwiązuje się za pomocą gethostbyaddr / gethostbyname2, a więc również sprawdza /etc/hosts
/ NIS / etc:
getent hosts unix.stackexchange.com | awk "{ print $1 }"
Albo, jak powiedział Heinzi poniżej, możesz użyć dig
z argumentem +short
(wysyła zapytanie bezpośrednio do serwerów DNS, nie sprawdza /etc/hosts
/ NSS / etc):
dig +short unix.stackexchange.com
Jeśli dig +short
jest niedostępny, dowolny z następujących powinno działać. Wszystkie te zapytania bezpośrednio wysyłają do DNS i ignorują inne sposoby rozwiązania:
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 }"
Jeśli chcesz wydrukować tylko jeden adres IP, dodaj exit
do awk
” przepływu pracy.
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 }"
Komentarze
- Domyślnie użycie dig działa tylko z ipv4, gdzie host daje odpowiedzi zarówno ipv4, jak i ipv6. Może to być nieoczekiwane. Możesz spróbować
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 nie działa, jeśli jest CNAME, nie zwraca adresu IP.
- Czasami może przekroczyć limit czasu i nic nie zwraca. W przypadku niektórych domen
dig +short
może zwrócić alias domeny w pierwszym wierszu. Aby więc upewnić się, że dane wyjściowe to IPv4 adres, użyjdig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1
. - Używanie
getent hosts <host>
jest niepoprawne, jak w przypadku instan ce może dać adres IPv6, podczas gdy IPv6 ' nie działa. Poprawnym rozwiązaniem jest użyciegetent ahosts <host>
do wypróbowania w razie potrzeby zarówno IPv6, jak i IPv4. - Warto wspomnieć: host, dig i nslookup wydają się komunikować bezpośrednio z wymienionymi serwerami w resolv.conf, natomiast ” getent hosts ” przestrzegają zarówno lokalnego pliku hostów, jak i buforowania na poziomie biblioteki (np. nscd), jeśli jest włączone .
Odpowiedz
Z host
z dnsutils :
$ host unix.stackexchange.com unix.stackexchange.com has address 64.34.119.12
( Poprawione nazwa pakietu zgodnie z komentarzami. Uwaga: inne dystrybucje mają host
w różnych pakietach: Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)
Komentarze
- Jeśli chcesz rozwiązać problem, którego nie ma w DNS (np. / Etc / hosts), zapoznaj się z poniższym wpisem resolutionip.
- Pamiętaj, że
host
czasami zwraca wieloliniowe wyjście (w przypadku przekierowań), ' chceszhost unix.stackexchange.com | tail -n1
, jeśli chcesz tylko linię z adresem IP. - Istnieje wiele wersji ” hosta ” z różnymi formatami wyjściowymi. Na przykład. wygląda na to, że większość systemów ma wersję BIND9, ale mój serwer Ubuntu 10.04 LTS ma jakoś zupełnie inną wersję ..
- jeśli nie ' nie masz
host
lubdig
możesz użyć polecenia ping, które jest zawsze dostępne:ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}"
to nie wymaga dodatkowe pakiety instalują się na większości odpowiedników systemów Unix / Linux. - Ta odpowiedź zasługuje na poważną negatywną opinię.
host
to narzędzie DNS (podobne donslookup
), więc wyszukuje hosty tylko w DNS, a nie np./etc/hosts
. Więc to NIE jest odpowiedzią na pytanie OP '.
Odpowiedź
Mam na komputerze narzędzie, które wydaje się wykonywać swoją pracę. Strona podręcznika pokazuje, że wygląda na to, że pochodzi z mysql … Oto jak możesz go użyć:
resolveip -s unix.stackexchange.com 64.34.119.12
Wartość zwracana przez to narzędzie jest różna od 0 jeśli nie można rozwiązać nazwy hosta:
resolveip -s unix.stackexchange.coma resolveip: Unable to find hostid for "unix.stackexchange.coma": host not found exit 2
UPDATE W Fedorze jest dostarczany z serwerem mysql:
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
Wydaje mi się, że stworzyłoby to dziwną zależność dla twojego skryptu …
Komentarze
- Wydaje się, że jest to jedyne rozwiązanie w tym miejscu, które korzysta z wbudowanego systemu operacyjnego ' – tak działa / etc / hosts, a także DNS.
-
getent
, jak szczegółowo opisano w drugiej odpowiedzi, również przegląda / etc / hosts i zawiera glibc, więc nie ma żadnych zależności w systemie Linux. - Nie użyłbym resip, ponieważ tworzysz zależność od innego pakietu. getent jest instalowany domyślnie. host, nslookup i dig znajdują się w opcjonalnych pakietach. Zdecydowanie użyj getent w skrypcie.
- Podoba mi się ta odpowiedź, ale nie ' t return ipv6
Odpowiedz
Następujące polecenie używające dig
umożliwia bezpośrednie odczytanie wyniku bez sed / awk / etc. magia:
$ dig +short unix.stackexchange.com 64.34.119.12
dig
jest również zawarte w dnsutils
pakiet.
Uwaga : dig
zwraca wartość 0
, nawet jeśli nazwy nie można rozpoznać. Dlatego „d musisz sprawdzić, czy wynik jest pusty, zamiast sprawdzać zwracaną wartość:
hostname=unix.stackexchange.com ip=`dig +short $hostname` if [ -n "$ip" ]; then echo IP: $ip else echo Could not resolve hostname. fi
Uwaga 2 : Jeśli nazwa hosta ma wiele adresów IP (spróbuj na przykład debian.org
), wszystkie będą zwrócony. Ten „problem” dotyczy wszystkich narzędzi wymienionych w tym pytaniu do tej pory:
Komentarze
- Należy pamiętać, że jeśli domena ma wpis CNAME jego domena może być wydrukowana w pierwszym wierszu zamiast adresu IP.
Odpowiedź
getent hosts unix.stackexchange.com | cut -d" " -f1
Komentarze
- Weź również pod uwagę
ahosts
,ahostsv4
,ahostsv6
zgetent
. -
cut
nie będzie getent ' s, które używają\t
do oddzielenia kolumn. Tak jest w przypadku systemu Solaris. - @ceving: On Sola może być konieczne uruchomienie
cut
bez-d
(domyślnie\t
jako separator). W systemie Linux spacje są ', więc powyższa linia działa.
Odpowiedź
Rozwiązania podane do tej pory działają głównie w prostszym przypadku: nazwa hosta jest tłumaczona bezpośrednio na pojedynczy adres IPv4. Może to być jedyny przypadek, w którym musisz rozwiązać nazwy hostów, ale jeśli nie, poniżej znajduje się dyskusja na temat niektórych przypadków, które możesz potrzebować.
Chris Down i Heinzi krótko omówili przypadek, w którym rozwiązuje się nazwa hosta do więcej niż jednego adresu IP. W tym przypadku (i innych poniżej) podstawowe skrypty przy założeniu, że nazwa hosta jest tłumaczona bezpośrednio na pojedynczy adres IP, może się zepsuć. Poniżej przykład z nazwą hosta odpowiadającą więcej niż jednemu adresowi 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
Ale co to jest www.l.google.com
? Tutaj należy wprowadzić przypadek alias . Spójrzmy na poniższy przykład:
$ 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
Więc www.google.com
nie rozwiązuje bezpośrednio adresu IP, ale alias, który sam jest tłumaczony na wiele adresów IP. Aby uzyskać więcej informacji o aliasach, sprawdź tutaj . Oczywiście przypadek, w którym alias ma pojedynczy adres IP, jest możliwy , jak pokazano poniżej:
$ 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
Ale czy aliasy można łączyć?Odpowiedź brzmi: tak:
$ 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
Nie znalazłem żadnego przykładu, w którym nazwa hosta jest tłumaczona na alias, który nie jest tłumaczony na adres IP, ale myślę, że może się zdarzyć.
Więcej niż wiele adresów IP i aliasów, czy są jakieś inne specjalne przypadki … a co z IPv6? Możesz spróbować:
$ 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
Gdzie nazwa hosta ipv6.google.com
to nazwa hosta wyłącznie dla IPv6. Co z nazwami hostów z dwoma stosami:
$ 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::
Znowu jeśli chodzi o IPv6, jeśli twój host ma tylko IPv4, nadal możesz rozwiązać adresy IPv6 (testowane na WinXP tylko dla IPv4 a na ipv6.google.com możesz wypróbować go w systemie Linux). W tym przypadku rozpoznanie powiedzie się, ale polecenie ping kończy się niepowodzeniem z komunikatem o nieznanym błędzie hosta . Może to być przypadek, w którym twój skrypt nie powiedzie się.
Mam nadzieję, że te uwagi były przydatne.
Komentarze
- Co za wspaniały uzupełnienie zaakceptowanej odpowiedzi, pokazując wszystkie skrajne przypadki, z którymi warto się zmierzyć w skryptach. Moja wersja
host
nie wskazuje nawet, że ” ma adres ” dla moich skrzynek.
Odpowiedź
Aby uniknąć problemu z aliasami i zawsze mieć jeden adres IP gotowy do użycia:
python -c "import socket; print socket.gethostbyname("www.example.com")"
Komentarze
- Utworzyłem funkcję bash do umieszczenia w moim bashrc z tej odpowiedzi: gist.github.com/brycepg/ba117a37de53906dc8fcc312bd7d5fee
-
python3 -c 'import socket; print(socket.gethostbyname("www.example.com"))'
Odpowiedź
ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s/).*//" | sed -e "s/.*(//"
działa bez zależności od innych systemów (i dla hostów określonych w / etc / hosts)
Komentarze
- Użycie polecenia ping jest tym, czego potrzebowałem, ponieważ potrzebuję wartości z pliku hosts, ale poprawnie przeanalizowałem wzorzec seda, ale ten ping zadziałał – q -c 1 -t 1 your_host_here | grep PING | sed -e ” s / ^ [^ (] * [(] // ” | sed -e ” s / [)]. * $ // ”
- Aby rozwiązać problem w mojej sieci domowej, na przykład myhostname.local, działa to tak ja to najlepsza odpowiedź.
- Mogę również zasugerować to:
ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
-
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>
działa również w przypadku deklaracji w/etc/hosts
… i ' s go-to-tool dla wszystkich rodzajów systemowych baz danych (hasła, grupy, aliasy, usługi).
Odpowiedź
Proste, ale przydatne :
-
getent ahostsv4 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
-
getent ahostsv6 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
-
getent hosts google.de | head -n 1 | cut -d " " -f 1
Wszystkie polecenia rozwiązują adres IP, jeśli host nadal istnieje. Jeśli host wskazuje na CNAME, otrzyma również adres IP w tym
Pierwsze polecenie zwraca rozwiązany adres IPv4.
Drugie polecenie zwraca olved adres IPv6.
Trzecie polecenie zwróci preferowany adres właściciela, który może być adresem IPv4 lub IPv6.
Komentarze
- Zdecydowanie najprostszy. I jest domyślnie dostępny. Nie tak jak
host
, które wymagają instalacjibindutils
odpowiedzi
Oto niewielka odmiana podejścia ping
, które bierze pod uwagę „nieznany host” (przez przepuszczanie przez stderr) i używa tr
, aby uniknąć stosowania sed
wyrażeń regularnych:
ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}"
W przypadku ważne jest, aby uchwycić wartość wyjścia, wtedy zadziała (choć mniej elegancka):
ping -c1 -t1 -W0 www.example.com &>/dev/null && ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}"
Komentarze
- Uwielbiam to rozwiązanie, ponieważ działa bez żadnych dodatkowych narzędzi.
Odpowiedź
Aby uzupełnić odpowiedź Chrisa Downa i zająć się komentarzami jfgagne na temat (prawdopodobnie połączonych w łańcuch) aliasów, oto rozwiązanie, które:
- bierze pod uwagę wiele adresów IP
- bierze pod uwagę jeden lub więcej aliasów (CNAME)
- nie sprawdza pliku
/etc/hosts
( w moim przypadku tego nie chciałem); aby zapytać, rozwiązanie Pythona dbernta jest idealne) -
nie używa awk / sed
dig +short www.alias.com | grep -v "\.$" | head -n 1
Zawsze zwraca pierwszy adres IP lub pusty wpis, jeśli nie został rozwiązany. z wersją dig:
$ dig -v DiG 9.8.1-P1
Komentarze
- Dzięki, inne odpowiedzi zakładają, że ” dig + short ” zawsze zwraca pojedynczy adres IP. Nie ' nie uwzględniały rekordów CNAME.
Odpowiedź
php -r "echo gethostbyname("unix.stackexchange.com");"
Komentarze
- to działa, ale wymaga zainstalowania php na twoim terminalu
- może być przydatne w typowym kontenerze docker php, gdzie ” host „, ” dig ” itd. są niedostępne
Odpowiedź
Chciałbym dodać to jako komentarz do Andrew McGregora Re: ping. Jednak na to mi nie pozwoli, więc muszę to dodać jako kolejną odpowiedź. (Jeśli ktoś może przenieść to do komentarza, nie krępuj się).
To jest inny wariant, używający tylko poleceń ping i grep :
ping -q -c1 -t1 your_host_here | grep -Eo "([0-9]+\.?){4}"
grep -E
dla rozszerzonego wyrażenia regularnego i grep -o
do zwraca tylko pasującą część. samo wyrażenie regularne szuka jednej lub wielu cyfr ([0-9]+
) i opcjonalnie kropki (\.?
) cztery razy ( {4}
)
Odpowiedź
Możesz użyć 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
Odpowiedz
tutaj „przepis na Bash Gotowałem, korzystając z odpowiedzi innych ludzi – najpierw próbuję /etc/hosts
, a potem wracam do 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 }
Komentarze
- Żeby było jasne,
getent hosts
isn ' to tylko wyszukiwanie w / etc / hosts – to ' to pełne wywołanie rozwiązywania DNS do gethostbyaddr (3) i ' s bardzo nie powiedzie się w przypadku, gdydig
powiedzie się. Zobacz stronę podręcznika dla getent . - @Stuart ma rację – i ' już się nauczyłem bardzo dużo od czasu napisania tego i nadmiernie uprościłem potężne polecenie.
getent
pozostaje moim ulubionym, chociaż lubię teżdig +short
Odpowiedź
nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n "s/.*[(]\([0-9\.]*\)[)].*/\1/p"
to rozwiązanie, które znalazłem bez serwera DNS
Odpowiedź
Może nie jest to najbardziej zwięzłe, ale wydaje się być solidne i wydajne:
# $(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 }
Spowoduje to wyświetlenie pojedynczego adresu IPv4 IP, a także zwracają 1
w przypadku niepowodzenia, maskując wyjście stderr.
Możesz tego użyć w ten sposób:
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
Adres IP Google to 216.58.192.46.
Jeśli zamiast tego chcesz otrzymać adres IPv6, po prostu zamień -4
na -6
.
Odpowiedź
dig +noall +answer +nocomments example.com | awk "{printf "%-36s\t%s\n", $1, $5 }"
Komentarze
- Pewien kontekst, w jaki sposób ta odpowiedź poprawiłaby się w stosunku do już istniejących być wspaniałym. Ponadto, wcięcie poleceń należy wykonać 4 spacjami (por. Składnia znaczników).
Odpowiedź
dig to też wolno, nslookup jest znacznie szybsze
nslookup google.com | grep -Po "Address:\s*[0-9.]+" | tail -1 | sed -e "s/Address:\s*//g"
Odpowiedz
1 wiersz rozwiązuje listę nazwy hosta
for LINE in `cat ~/Desktop/mylist`; do a=$(nslookup $LINE | awk "/^Address: / { print $1 }"); echo $a >> ~/Desktop/ip; done
Odpowiedź
Robię to cały czas na moim Mac, który nie ma getent
. ping
wygląda na włamanie. Chciałbym również wziąć pod uwagę /etc/hosts
.
Napisałem więc głupie opakowanie dla dns.lookup
dla masz zainstalowany Node.js zapewniający CLI:
$ npm install -g lookup-hostname $ lookup google.com 62.243.192.89
Komentarze
- 60% szansy złamania, zanim zbliżysz się do rozwiązania.
- @dotbit czy mógłbyś rozwinąć? ' korzystam z tego co tydzień od ' 17 i nigdy nie miałem żadnych problemów.
- @Jensen, ale Ty ' są jak zawsze jedyni. Reszta z nas zwykle napotyka FAIL tego lub innego rodzaju i zawsze.
- ” jak zawsze ” Co przez to rozumiesz? ” Reszta z nas ” Kto ' to ? ” napotkasz FAIL ” Jaki konkretny problem widzisz? Jestem ' zaciekawiony.
Odpowiedź
Nie ” nie znam najprostszego sposobu na użycie skryptu bash, ale jeśli chcesz rozwiązać nazwę hosta i sprawdzić, czy host działa, użyj ping
!
ping -a hostname -c 1
ping
host jeden raz i przetłumaczy nazwę hosta na adres 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
Komentarze
- używanie polecenia ping jest dobre, ponieważ każdy go ma, ale musisz odfiltruj część IP z wyjść, jeśli chcesz jej użyć w skrypcie.
Odpowiedź
Tak, jest już wiele odpowiedzi, ale brakuje rozwiązania używającego Perla:
perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com
W skrypcie basha można go użyć w następujący sposób:
#!/bin/bash ipaddr=$(perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com) echo $ipaddr
Moduły użyte tutaj są modułami podstawowymi, więc powinny być dostępne wszędzie bez instalacji z CPAN.
Komentarze
#!/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! "
Komentarze
- Wersja ruby drukuje cudzysłowy wokół adresu IP – prawdopodobnie należy użyć
print
zamiastp
. - thx, @Slaven Rezic i zapraszam do głosowania za. z drugiej strony, tutaj na dole skrypt może być właściwie bardziej widoczny … 😉
Odpowiedz
host -t a cisco.com
to polecenie pokaże adres IP (zmieni domenę na IP)
Odpowiedź
Oprócz powyższego rozwiązania, możesz przetłumaczyć wiele nazw hostów na ip za pomocą poniższego skryptu, jedyną zależnością jest polecenie „ping” w podstawowym systemie 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
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>
odpowiedź jest gdzieś na dole. Jest ' najprostszy, nie wymaga dodatkowych pakietów i jest łatwiejszy do przeanalizowania ze skryptu Bash.getent hosts somehost
, gdy uruchamia to podczassomehost
utworzy adres IPv6 , który różni się od większości innych narzędzi (ping
,ssh
przynajmniej) rozwiązuje nazwy i psuje niektóre rzeczy. Użyjahosts
zamiasthosts
.ahostsv4
) lub IPv6 (ahostsv6
)? Osobiście nie widzę nic złego w niespecyficznym żądaniu zwrotu IPv6. Twój kod powinien być przygotowany. Protokół IPv6 istnieje od ponad 20 lat.hosts
, a do tej pory 4 osoby zagłosowały za vinc17 ' komentarz wyrażający ból spowodowany przez ” nagle IPv6 „. Przygotowanie do IPv6 nie zawsze jest problemem: wiele programów potrzebuje sposobu na określenie, czy dwie nazwy / adresy odnoszą się do tego samego hosta. Mogą albo użyć prostego dopasowania ciągów, albo muszą dużo wiedzieć o sieci, aby znaleźć ” prawdziwą ” odpowiedź. To ostatnie jest polem minowym, więc wiele programów i systemów innych firm – nad którymi nie mam kontroli – używa tego pierwszego.