0

わかりました、ローカル サブネットから DNS サービスを取得する方法を探していましたが、機能していないようです。

これまでのところ、次のコードを使用して wifi に接続すると、ローカル DNS の IP を取得できます。

ArrayList<String> servers = new ArrayList<String>();
        try {
            Class<?> SystemProperties = Class
                    .forName("android.os.SystemProperties");
            Method method = SystemProperties.getMethod("get",
                    new Class[] { String.class });

            for (String name : new String[] { "net.dns1", "net.dns2",
                    "net.dns3", "net.dns4", }) {
                String value = (String) method.invoke(null, name);
                if (value != null && !"".equals(value)
                        && !servers.contains(value))
                    servers.add(value);
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        for (String s : servers) {
            Log.v("ERRORID", s);
        }

そして、以下を文字列として返します。

10.10.10.204
172.19.2.10

ここから、すべてのサービスについて各 DNS IP を照会したいのですが、方法がわかりません。

編集:jmDNSを使用してみましたが、うまくいきませんでした

InetAddress addr = InetAddress.getByName("172.19.2.10");
JmDNS jmdns = JmDNS.create(addr);
jmdns.addServiceListener("_http._tcp.local.", new SampleListener());

SampleListener() は次のとおりです。

    static class SampleListener implements ServiceListener {
    @Override
    public void serviceAdded(ServiceEvent event) {
        Log.v("ERRORID", "Service added   : " + event.getName() + "."
                + event.getType());
    }

    @Override
    public void serviceRemoved(ServiceEvent event) {
        Log.v("ERRORID", "Service removed : " + event.getName() + "."
                + event.getType());
    }

    @Override
    public void serviceResolved(ServiceEvent event) {
        Log.v("ERRORID", "Service resolved: " + event.getInfo());
    }
}
4

1 に答える 1

0

Jmdns.create は、ローカル ネットワーク インターフェイスにのみバインドします。リモート DNS サーバーではありません。PC の任意のネットワーク インターフェイスの IP を使用すると、jmds はこのインターフェイスでのみ動作します。サーバーにサービスを照会する必要はありません。それらは自動的に公開され、serviceAddedEvent 呼び出しを取得する必要があります。

于 2015-04-08T12:28:30.650 に答える