[server] / etc / hosts를 사용하여 호스트 이름을 먼저 확인하는 Linux 명령 행 유틸리티

해결 호스트 이름 (몇 가지 명령 행 유틸리티가있다 host, dig, nslookup) 그러나 그들은 모두 사용하는 네임 서버는 일반 찾는 애플리케이션 동안 독점적으로, /etc/hosts첫 번째는 (gethostbyname까지도를 사용하여 나는 믿는다).

일반적인 응용 프로그램처럼 동작하는 호스트 이름을 확인하는 명령 줄 유틸리티가 /etc/hosts있습니까?

(나는 아마도 3 줄의 c와 같을 것임을 알고 있지만 다소 이식성이 좋은 쉘 스크립트 안에 필요합니다.)



답변

이것은 다음과 getent같이 쉽게 달성됩니다 .

getent hosts 127.0.0.1

getent에서 구성된 모든 유형의 데이터를 검색합니다 nsswitch.conf.


답변

작동하는 도구 중 하나는 getent입니다. 따라서 getent hosts www.google.com또는을 사용할 수 있습니다 getent hosts localhost. 이름 서비스 스위치 구성에 지정된대로 데이터베이스에서 항목을 검색합니다 /etc/nsswitch.conf.


답변

다음과 같이 gethostbyname () (더 이상 사용되지 않음) 랩퍼를 사용할 수 있습니다.

python -c 'import socket;print socket.gethostbyname("www.google.com")'

또는 다음과 같은 getaddrinfo () 래퍼 :

python -c 'import socket;print socket.getaddrinfo("www.google.com","http")[0][4][0]'

getaddrinfo는 모든 인스턴스를 목록으로 반환합니다. 명령의 마지막 부분은 첫 번째 튜플 만 선택합니다. IPv6 주소도 반환 할 수 있습니다.


답변

resolveip 이것을 할 것입니다.

이상하게도 RHEL 및 Ubuntu의 mysql-server 패키지의 일부입니다.


답변

[여기에서 가장 좋아하는 언어]를 사용하여 getnameinfo 를 호출하는 스크립트를 작성할 수 있습니다 . 이것이 바이너리 (예 : 핑)가 수행해야하는 방식이므로 동일한 치료를받을 수 있습니다.


답변

사용 getent ahosts예를 들어, :

$ getent ahosts www.google.com | sed -n 's/ *STREAM.*//p'
216.58.210.196
2a00:1450:4006:803::2004

glibc 리졸버를 통해 모든 IPv4 및 IPv6 주소를 얻을 수 있습니다 (따라서 /etc/hosts일반적으로에서 구성한대로 먼저 사용 /etc/nsswitch.conf).

사용하지 마십시오 getent hosts당신이 중 하나의 IPv6 또는 IPv4 주소 (둘), 그리고 선택된 프로토콜이 일을하지 않는 한하지 않을 수 있습니다 줄 것 같은. 실제로, IPv6 주소가 일반적으로 선호되지만, 어떤 곳에서는 라우터에 의해 IPv6 데이터가 필터링 (지원되지 않음)됩니다.


답변

“gethostbyname” 명령 행 버전 :

#!/usr/bin/perl
use Socket;

$host = shift @ARGV;
die("usage: gethostbyname hostname\n") unless(defined($host));

$packed_ip = gethostbyname($host);

if (defined $packed_ip) {
    $ip_address = inet_ntoa($packed_ip);
    print "$ip_address\n";
    exit 0
} else {
    warn "$host not found\n";
    exit 1
}