3

Java を使用してInetAddress.getByName()ホストを IP に解決する際に、ローカル システムのデフォルトではなく Google の DNS を使用したいと考えています。他のスタックオーバーフローの質問とhttp://docs.oracle.com/javase/6/docs/technotes/guides/net/properties.htmlで提供される情報に基づいて、以下を使用して適切なプロパティを設定しています:

System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");

プログラムで後で呼び出すSystem.getProperty("sun.net.spi.nameservice.nameservers")と、プロパティが 8.8.8.8 に設定されていることが確認されますが、ネットワーク トラフィックは、すべての DNS 要求が Google の DNS ではなく、システムのデフォルトに送信されていることを明確に示しています。要求された DNS サーバーを Java に使用させるには、他に何をする必要がありますか?

4

3 に答える 3

1

私は同様の問題に直面しています。jvm 内のクリーン dns サーバー

あなたの問題は、DNS プロパティを設定しても効果がないからではなく、これらのパラメーターをコードの後半に設定している、または最初のネットワーク接続の後に設定しているためだと思います。

入れてみる

System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");

あなたのメインの最初の行で教えてください。幸運を

于 2013-07-02T13:48:03.667 に答える
1

より一般的には、これはおそらく Java の外部で設定する必要があるものです。JVM が OS によって提供されるネットワーク スタックと並行して独自のネットワーク スタックを持つことはあまり意味がないため、DNS 解決は OS レベルで構成する必要がある可能性があります。

DNS 解決がアプリケーションの中心的な要件である場合、実際には、通常のネットワーク ライブラリ (通常のネットワーク操作の副作用として DNS 解決を行う) を使用するよりも、自分で解決する方が理にかなっています。ルックアップ リクエストの作成に役立つライブラリが見つかることは間違いありません。

于 2012-08-14T21:04:23.153 に答える
0

\Windows\System32\drivers の下のホスト ファイルに sun.net.spi.nameservice.nameservers 8.8.8.8 を設定してみてください。すでにホストファイルにあるように見える sun.net.spi.nameservice.nameservers は、いくつかのエントリを指しています。ホストファイルの最後にsun.net.spi.nameservice.nameservers 8.8.8.8を設定してみてくださいbecozホストファイルが取得するのは、ホスト名エントリが解決される最初の場所です

于 2012-08-14T17:26:56.767 に答える