1

静的 DNS エントリをルーターに追加し、IP アドレスを にバインドしましたbuilds-mac。次に、Java を使用してその IP アドレスを検索しようとしました。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Testcase
{
    public static void main(String[] args) throws UnknownHostException
    {
        System.out.println("got: " + InetAddress.getByName("builds-mac"));
    }
}

これは失敗しました:

java.net.UnknownHostException: builds-mac
    at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1246)
    at java.net.InetAddress.getAllByName(InetAddress.java:1162)
    at java.net.InetAddress.getAllByName(InetAddress.java:1098)
    at java.net.InetAddress.getByName(InetAddress.java:1048)

builds.home.localしかし、ホスト名を(それに応じてDNSエントリを更新して)置き換えると、操作は成功しました。

InetAddress.getByName()にホスト名サフィックスが必要なのはなぜですか? サフィックスのないホスト名で機能させることは可能ですか?

(Windows7、64ビットでJDK 1.7.0_60を実行しています)

更新:最初は失敗しますが ( )nslookup builds-mac常に動作しますが、VMWare で仮想マシンを起動すると動作し始めます。が機能し始めると、機能します。ping builds-maccould not find builds-macpingpingInetAddress.getByName()

  1. pingホストの検索に失敗するのはなぜnslookupですか?
  2. VM を起動するとping、ホストが認識されるようになるのはなぜですか? ホストがダウンしているため、ホストを見つけたが、応答が得られないのとは対照的に、ping言うことを覚えておいてください。could not find builds-mac後者は予想されますが、前者はそうではありません。

UPDATE2 : それで、さらに 3 つの興味深い手がかりを発見しました...

  1. いつでもping動作しInetAddress.getByName()ます。の場合はそうではありませんnslookup
  2. デフォルトでは、ルーターにはドメイン名が割り当てられていません。このモードでは、nslookup常に機能しますが、ping機能しません。
  3. ルーターにドメイン名を割り当て、[1] ルックアップを実行しているコンピューターのリースを更新すると、機能しping始めます。

[1] コンピューターを再起動するか実行ipconfig /renewすると、新しいドメイン名が取得されますが、取得されipconfig /flushdnsません。

したがって、これは元の質問に戻ります。

Windows Client Resolver (内部pingで使用するもの) がドメイン名サフィックスを必要とするのはなぜですか? つまり、なくても機能するはずですか?

4

0 に答える 0