[unix] / etc / hosts를 존중하는 호스트 조회

같은 유틸리티 hostdig호스트 이름에 해당하는 IP 주소를 볼 수 있습니다.

도있다 getent쿼리에 사용할 수있는 유틸리티 /etc/hosts나 다른 NSS 데이터베이스는.

정의 된 위치에 관계없이 호스트 이름을 확인하는 편리한 표준 유틸리티 (데비안에서 사용할 수 있음)를 찾고 있습니다.

그것은 다소 비슷해야합니다

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



답변

내가 아는 유일한 명령은 resolveip입니다.

http://linux.die.net/man/1/resolveip

그러나 mysql-server 만 제공되므로 모든 곳에 설치하는 것이 이상적이지 않을 수 있습니다.


답변

문제가 ipv6을 사용하여 이러한 이름을 확인하지 않으려는 경우 getent에게 ipv4 만 사용하도록 요청하십시오. 이것은 모든 ipv4 주소를 열거합니다 :

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


답변

문제는 같은 호스트 이름을 해결하기 위해 몇 가지의 API가있다 gethostbyname, getaddrinfo그리고inet_pton 그 중 일부는 하나 개 이상의 주소를 반환 할 수 및 / 또는 당신이 원하는 주소의 유형을 조회 할 수 있습니다.

하나의 IPv4 주소 를 얻는 이식 가능한 방법을 원한다면 다음을 수행하십시오.

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


답변

(이 답변은 컴퓨터에 루트 인 경우에만 적용됩니다.)

나는 이것에 대해 화가 났고 모든 컴퓨터 에서 dnsmasq 를 실행 하도록 표준화했습니다 . Dnsmasq는 간단한 DNS 캐시입니다. 부수적 인 이점으로 /etc/hostsDNS 를 통한 컨텐츠를 제공합니다 .


답변

gethostip -d name.domainsyslinux우분투 (그리고 아마도 데비안) 의 패키지에서. -d십진 형식을 출력합니다.


답변

나는 순수한 펄 지식을 사용하고 오류 처리와 함께 작은 스크립트를 만들었습니다.

/ 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";

초기 아이디어를 위해 Stéphane Chazelas에게 Thx


답변