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


19

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

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

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

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

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

5
정확히 무엇이 잘못 getent되었습니까?
Patrick

2
그래, 내가 얻는 것보다 더 편리해질 수는 없어
Bratchley

@ 패트릭 : 흠, 나는 getentDNS에서도 보이는 것을 몰랐다 /etc/hosts. 이제 시도해 보았으므로 여기에 잘못된 점이 있습니다 getent. for : google.com단일 주소를 반환하고 해당 주소는 IPv6입니다. IPv4 네트워크에 있기 때문에 도움이되지 않으며 명령이 실제로 IPv4 주소를 인쇄합니다.
Roman Cheplyaka

@RomanCheplyaka-getent를 사용하여 IPv4 주소 만 찾는 방법을 보여주는 eppesuig의 답변 참조 : unix.stackexchange.com/a/71392/7453
slm

답변:



14

문제가 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

히스토리 (예 : IPv4)를 잊어 버리고 싶은 사람들은을 사용하십시오 ahostsv6.
Luc

2
IPv4와 IPv6의 차이점을 고려하지 않으려면을 사용하십시오 getent ahosts google.com.
Mikko Rantalainen

6

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

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

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

2

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

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


2

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


0

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

/ 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.