シェルからgetaddrinfo()? [コピー]

シェルからgetaddrinfo()? [コピー]

電話するとping name.domain合格両方 /etc/hostsIPを取得するためのDNSリゾルバーです。にハードコーディングされたIPでも、/etc/hostsDNSサーバーのIPでもかまいません。もちろん、getaddrinfo()または同等の関数を呼び出してこれを行います(直接呼び出す代わりに)。

getaddrinfo()シェルからどのように呼び出すのですか?アドレスからIPを取得する「一般」ネットワークユーティリティの効果をどのように再現できますか?

これは、DNSのみを使用したり/ onlyを使用したりすることとは関係ありませんdig。たとえば、確認する必要がある名前を受け取ると、一般的なアプリケーションの動作を再現したいと思います。 /に関する他の質問があります。この質問はその質問と重複しません。hostgetenthostspingdighost

修正する:私が見つけたものは次のとおりです(いくつかの他の質問に対する答えに基づいています)。

  • 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.confdns/etc/resolv.conf

私のテストでは、私のファイルに/etc/hostsホスト "skinner"のエントリがありませんが、getentDNSを介して問題が解決されます。

$ getent hosts skinner
192.168.1.3     skinner.bubba.net

$ grep skinner /etc/hosts
$

関連情報