전화하면 ping name.domain
통과된다둘 다 /etc/hosts
IP를 얻기 위한 DNS 확인자입니다. 에 하드코딩된 IP일 수도 /etc/hosts
있고 DNS 서버의 IP일 수도 있습니다. 물론, getaddrinfo() 또는 동등한 함수를 호출하여 이를 수행합니다(직접 호출하는 대신).
getaddrinfo()
쉘에서 어떻게 호출하나요? 주소에서 IP를 얻는 "일반" 네트워크 유틸리티의 효과를 어떻게 재현할 수 있습니까?
이는 DNS만 사용하거나 /only를 사용하는 것과는 아무런 관련이 없습니다 dig
. 예를 들어 확인해야 하는 이름을 수신할 때 일반적인 응용 프로그램 동작을 재현하고 싶습니다. /에 대한 다른 질문이 있습니다. 이 질문은 해당 질문과 중복되지 않습니다.host
getent
hosts
ping
dig
host
고쳐 쓰다: 내가 찾은 내용은 다음과 같습니다(일부 다른 질문에 대한 답변을 기반으로 함).
- Ubuntu(및 Debian?)
gethostip -d name.domain
에는syslinux
. perl -MSocket -le 'print inet_ntoa inet_aton shift' name.domain
안정적으로 작동하며 허용되는 답변보다 더 간결합니다.- 사용
getent
가능한또한 작동합니다:getent ahostsv4 name.domain | grep STREAM | head -1 | cut -f1 -d' '
이것이 가장 좋은 방법인 것 같습니다.
답변1
Perl을 사용할 수 있다면 제가 직접 출시했습니다(인터넷에서 찾아서 사용했습니다).
#!/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
}
이 코드는 다음 SF Q&A에서 나왔습니다.호스트 이름을 확인하기 위해 먼저 /etc/hosts를 사용하는 Linux 명령줄 유틸리티.
예
$ ./gethostbyname.pl skinner
192.168.1.3
$ ./gethostbyname.pl www.google.com
74.125.225.84
$ ./gethostbyname.pl localhost
127.0.0.1
코드가 여러 Unix 시스템(Linux뿐만 아니라)에서 실행될 때 위의 접근 방식을 사용했기 때문에 이는 getent
옵션이 아니었습니다.
얻다
내가 아는 매뉴얼 페이지는 파일 데이터베이스에서만 볼 것이라고 getent
생각하게 만들지 만 통과할 것이라고 믿습니다 . 따라서 거기에 값으로 선언되면 서버에 구성된 DNS를 요청할 것이라고 믿습니다 . 파일에 하나가 정의되어 있다고 가정합니다.getent
/etc/nsswitch.conf
dns
/etc/resolv.conf
내 테스트에서는 내 파일에 /etc/hosts
호스트 "skinner"에 대한 항목이 없지만 getent
DNS를 통해 문제가 해결됩니다.
$ getent hosts skinner
192.168.1.3 skinner.bubba.net
$ grep skinner /etc/hosts
$