Istnieje kilka narzędzi wiersza polecenia do nazw hostów resolve ( host
, dig
, nslookup
), jednak są one wszystkie serwery nazw użytku wyłącznie, gdy aplikacje w ogólnym wyglądzie w /etc/hosts
pierwszym (używając gethostbyname wierzę).
Czy istnieje narzędzie wiersza polecenia do rozpoznawania nazw hostów, które zachowują się jak zwykła aplikacja, a więc szukają /etc/hosts
najpierw, a dopiero potem pytają serwer nazw?
(Zdaję sobie sprawę, że prawdopodobnie byłyby to 3 wiersze c, ale potrzebuję go w dość przenośnym skrypcie powłoki).
awk '/hostname/ { print $1 }' /etc/hosts
pomagaOdpowiedzi:
Można to łatwo osiągnąć dzięki
getent
:getent
wykona wyszukiwania dla dowolnego typu danych skonfigurowanych wnsswitch.conf
.źródło
dig
lubnslookup
.Jednym z narzędzi, które by działało, jest
getent
. Więc możesz użyćgetent hosts www.google.com
lubgetent hosts localhost
. Pobiera wpisy z baz danych zgodnie z konfiguracją przełącznika usługi nazw/etc/nsswitch.conf
.źródło
files dns
dla hostów, co oznacza, że sprawdzany jest plik / etc / hosts, a następnie resolver DNS. Twoja konfiguracja może być inna.getent
. Dzięki za wprowadzenie do tego polecenia.Możesz użyć opakowania gethostbyname () (przestarzałe), takiego jak:
Lub opakowanie getaddrinfo (), takie jak:
Zauważ, że getaddrinfo zwróci wszystkie instancje jako listę. Ostatnia część polecenia wybiera tylko pierwszą krotkę. Może to również zwrócić adresy IPv6.
źródło
resolveip
zrobi to.Co dziwne, jest to część pakietów mysql-server na RHEL i Ubuntu.
źródło
Możesz użyć [swojego ulubionego języka tutaj], aby napisać skrypt, który wywołuje getnameinfo . W ten sposób powinny to robić pliki binarne (takie jak ping), więc masz pewność, że otrzymasz takie samo traktowanie.
źródło
Użyj
getent ahosts
na przykład:Otrzymasz wszystkie adresy IPv4 i IPv6, za pośrednictwem programu rozpoznawania nazw glibc (w ten sposób używając
/etc/hosts
pierwszego, jak zwykle skonfigurowanego w/etc/nsswitch.conf
).Nie używaj
getent hosts
, ponieważ da ci to adresy IPv6 lub IPv4 (nie oba), a wybrany protokół może nie być tym, który nie działa. Rzeczywiście, adresy IPv6 są ogólnie preferowane, ale w niektórych miejscach routery filtrują (nie są obsługiwane) dane IPv6.źródło
Wersja wiersza polecenia „gethostbyname” :
źródło
Możesz być naprawdę hacky i użyć
arp
:ale byłoby to naprawdę brzydkie, więc nie powinieneś tego robić.
źródło
getent hosts
jest zepsuta. Preferuje adresy IPv6,gai.conf
powinien być skonfigurowany tak, aby preferował IPv4, ale ....Perl
gethostbyname
używa pierwszeństwa w/etc/nsswitch.conf
Więc to działa jak
getent hosts
powinno działać dla mnie.Również:
powinno działać.
źródło
getent ahosts
.Spróbuj tego:
źródło
Następujące polecenie wykona wyszukiwanie przez DNS / etc / hosts przez bezpośrednie wyszukiwanie serwera DNS.
To polecenie spróbuje wysłać polecenie ping do domeny (w tym przypadku google.com) jeden raz z czasem oczekiwania wynoszącym 2 sekundy, pobierz pierwszy wiersz polecenia PING, który będzie oznaczać „PING google.com (216.58.199.36) 56 (84 ) bajtów danych ”, a następnie użyj Edytora strumienia (sed), aby wykryć pierwszy zestaw nawiasów i wyodrębnić w nim dane, których szukamy.
UWAGA: wyrażenie regularne nie będzie działać, jeśli w adresie URL znajdują się nawiasy (zwane również nawiasami okrągłymi), ale byłby to rzadki przypadek.
źródło