/ Etc / hosts ile ilgili ana makine araması


19

Ana bilgisayar adına karşılık gelen IP adresini beğenir hostve diggörmenizi sağlar.

getentSorgulama /etc/hostsveya diğer NSS veritabanlarını sorgulamak için kullanılabilecek bir yardımcı program da vardır .

Nerede tanımlandığına bakılmaksızın bir ana bilgisayar adını çözen uygun bir standart yardımcı programı (Debian kullanılabilir, demek) arıyorum.

Aşağı yukarı

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'

5
Tam olarak neyin yanlış olduğu getent?
Patrick

2
Evet, getent'ten daha uygun hale gelebileceği bir şey değil.
Bratchley

@Patrick: hmm, getentDNS'de de göründüğünü fark etmedim (sadece göründüğünü düşündüm /etc/hosts). Şimdi denedim, burada yanlış olan şey getent: çünkü google.com, tek bir adres döndürür ve bu adres IPv6. IPv4 ağında olduğum ve komutum aslında bir IPv4 adresi yazdıracağımdan, bu yardımcı olmaz.
Roman Cheplyaka

@RomanCheplyaka - Yalnızca IPv4 adreslerini aramak için getent'in nasıl kullanılacağını gösteren eppesuig'in cevabına bakın: unix.stackexchange.com/a/71392/7453
slm

Yanıtlar:



14

Sorun ipv6 kullanarak bu adları çözmek istemiyorsanız, sadece getent'ten sadece ipv4'ü kullanmasını isteyin. Bu, tüm ipv4 adreslerini numaralandıracaktır:

giuseppe@blatta:~$ getent ahostsv4 www.google.com | cut -d' ' -f1 | sort -u
173.194.40.80
173.194.40.81
173.194.40.82
173.194.40.83
173.194.40.84

Geçmişi (IPv4) unutmayı önemseyenler için kullanın ahostsv6.
Luc

2
IPv4 ve IPv6 arasındaki farkları düşünmekten kaçınmak isteyenler için kullanın getent ahosts google.com.
Mikko Rantalainen

6

Şey gibi çözülmesine ana makine adlarına birkaç API'leri vardır olduğunu gethostbyname, getaddrinfove inet_ptonbu projelerin bazılarının birden fazla adres dönebilir ve / veya istediğiniz adresin türünü sorgulayabilir.

Eğer almak için taşınabilir bir şekilde istiyorsanız bir IPv4 adresini, sonra belki:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com

2

(Bu cevap yalnızca makinede root iseniz geçerlidir.)

Ben de bundan rahatsız oluyordum ve daha sonra tüm makinelerimde dnsmasq çalıştırmak konusunda standartlaştım . Dnsmasq hafif bir DNS önbelleğidir. Bir yan fayda olarak, /etc/hostsDNS üzerinden içerik sunar .


2

gethostip -d name.domaindan syslinuxUbuntu (ve muhtemelen Debian) paketin. -dondalık biçim çıktılar.


0

Saf perl bilgimi kullandım ve hata işleme ile küçük bir komut dosyası yaptım:

/ Usr / local / bin / gethostip:

#!/usr/bin/perl

# inspired by: /unix/71379/host-lookup-that-respects-etc-hosts#71393

use strict;
use Socket;

my $name = $ARGV[0];
if ($name eq '') {
  print STDERR "Usage: gethostip <hostname>\n";
  exit 1;
}
my $ip = inet_aton($name);
die("Unable to resolve host name $name") if ($ip eq '');
my $ipstr = inet_ntoa($ip);
print "$ipstr\n";

İlk fikir için Stéphane Chazelas'a teşekkürler

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.