2017-02-11 13 views
0

domain/searchの値は、MacOSとLinuxのAndroidの/etc/resolv.confにあります。AndroidでDHCPのドメイン名を取得する

のMacOS:

# 
# Mac OS X Notice 
# 
# This file is not used by the host name and address resolution 
# or the DNS query routing mechanisms used by most processes on 
# this Mac OS X system. 
# 
# This file is automatically generated. 
# 
domain home 
nameserver 195.121.1.34 
nameserver 195.121.1.66 

のLinux:

は、ここでのMacOSとLinux(Fedoraの25)上の例であり、あなたが見ることができるように、値が私を探していますその

# Generated by NetworkManager 
search home 
nameserver 195.121.1.34 
nameserver 195.121.1.66 

上記の場合はhomeです。どのように私はAndroidでそれを得ることができますか?

私は何をしようとしていますか?

私は、ネットワークの設定によっては動作が異なるAndroidアプリを製作しようとしています。たとえば、サービスfoo.homeを検索しようとします(homeは動的でネットワークに依存します)、成功した場合はそのサーバーを使用します。それ以外の場合は、パブリック・サービスに照会して、使用するサーバーを探します。

+0

あなたのコードの一部を示し、問題または例外を明記してくださいあなたは遭遇しました。 – jww

+0

@jww私は現時点でAndroid側のコードはありません。私が知っているのは、MacOSとLinuxで私が何を求めているかを知ることだけです。しかし、 'resolv.conf'はAndroidには存在しません。だから私は立ち往生している。 – everplays

答えて

0

検索パスのポイントは、です。クエリには自動的にが適用されるため、アプリケーションで明示的にドメインに追加する必要はありません。

私はあなたがここに異なるプラットフォームをターゲットにしているので、使用しようとしているどのような言語わからないんだけど、単なる例として:

// start with the unqualified name 
service = "foo"; 
try { 
    InetAddress.getByName(addr); 
} catch (UnknownHostException e) { 
    // if `foo' did not resolve, use the external service 
    // specified by the fully qualified name 
    service = "public.whatever.com" 
} 
+0

あなたの提案に問題があります: このセットアップの2つのインスタンスがあるとします。 1つは「仕事」、もう1つは「家」です。自宅のネットワークに接続すると、 'resolv.conf'ファイルには' domain behrooz-home'が設定され、私が仕事場に接続すると値は 'domain behrooz-work'になります。 したがって、 'InetAddress.getByName'に渡すものは、ネットワークによって異なることになります。静的にすることはできません。 – everplays

+0

** bare **ホスト名を渡すだけです。要点は、ローカルドメイン名を指定する必要はないということです。ドメイン名を指定せずにホスト名を渡すと自動的に適用されます。 –

+0

サービスは、私が使っているネットワークによっては 'foo.behrooz-work'や' foo.behrooz-home'です。 *裸の*ホスト名はどういう意味ですか?私が知っている部分は 'foo'ですが、fooは何も解決しません。 'foo.behrooz-home'は動作し、' foo'や 'behrooz-home'では動作しません!だから、どうにかして2番目の部分の値を見つけ出し、 'foo'を追加したいのです。 – everplays

関連する問題