Jaki jest najłatwiejszy sposób na uzyskanie adresu IP z nazwy hosta?
Myślałem o wypróbowaniu ping
i przeanalizowaniu go z wyniku. Nie wydaje się to jednak zbyt przyjemne i prawdopodobnie nie będzie działać w ten sam sposób na wszystkich systemach.
Przeszukałem trochę i znalazłem rozwiązania nslookup
, ale to nie działa dla nazw hostów w /etc/hosts
.
Odpowiedzi:
Możesz to zrobić za pomocą standardowych wywołań systemowych. Oto przykład w Perlu:
daje wynik:
(W wierszu polecenia ten sam skrypt można zapisać jako
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)'
:)Możesz to zrobić podobnie w innych językach - patrz strona podręcznika systemowego dla wywołań systemowych w
man -s3 gethostbyname
itp.źródło
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
.sed -e '/some people consider Perl a better form/s/better/worse/'
SCNRhost <hostname>
Dawny:
Edytować
W systemie Linux (a przynajmniej niektóre warianty OS X) możesz być w stanie korzystać z niego
resolveip
, który jest częścią pakietu serwera MySQL:źródło
/etc/hosts
.) Spróbujhost localhost
.serv ~ $ host localhost \n localhost has address 127.0.0.1
resolveip
.resolveip
nie jest domyślnie instalowany na moim Debianie.Ten starożytny post wydaje się mieć wiele kreatywnych rozwiązań.
Jeśli muszę się upewnić, że również
/etc/hosts
uzyskam dostęp, zwykle używamgetent hosts somehost.com
Działa to, przynajmniej jeśli `/etc/nsswitch.conf 'został skonfigurowany do używania plików (jak zwykle jest).
źródło
ahosts
nie zwraca, podczas gdy zwraca informacje o wielu wierszach.W przypadku IPv4 istnieje standardowy program, który działa od razu przy użyciu resolvera, w tym / etc / hosts:
Jest częścią Debiana, zainstaluj go z:
W przypadku protokołów innych niż IPv4 (takich jak IPv6) obecnie nie znam podobnego narzędzia. Aktualizacja: Z tego powodu właśnie napisałem małe narzędzie, które jest również w stanie rozwiązać IPv6:
https://github.com/hilbix/misc/blob/master/src/ipof.c
Uważany jest za szybkie i brudne użycie powłoki, takie jak,
gethostip
ale zezwala również na IPv6:Można go również używać interaktywnie, na przykład:
HTH
źródło
Dlaczego nie
dig +short hostname
?(zapytanie DNS)
źródło
/etc/hosts
pod uwagę.Moje obecne rozwiązanie:
źródło
sed
zachowuje się nieco inaczej w każdym systemie. :) Jak denerwujące. Trochę to zmieniłem, myślę, że teraz powinno działać wszędzie.W przypadku niektórych Unices następujące funkcje będą działać:
Na przykład w systemie Mac OS X otrzymuję to:
źródło
arp -n hostname
pokazuje adres IP.Używanie
ping
nie jest takie złe, ponieważ generalnie nie masz żadnych silnych zależności.Oto funkcja, której użyłem w systemach Linux:
źródło
źródło