해결 호스트 이름 (몇 가지 명령 행 유틸리티가있다 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
}