電話すると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を要求すると信じています。ファイルに1つが定義されているとします。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
$