Android получает службы DNS из другой подсети
Хорошо, я искал способы получить DNS-сервисы из локальной подсети, но не могу заставить его работать.
До сих пор я могу получить локальные IP-адреса DNS при подключении к Wi-Fi с помощью следующего кода:
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
Отсюда я хочу запросить каждый IP-адрес DNS для всех его услуг, но не знаю как.
РЕДАКТИРОВАТЬ: я пытался использовать 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());
}
}
1 ответ
Jmdns.create связывается только с локальным сетевым интерфейсом. Не для удаленного DNS-сервера. Используйте IP-адрес любого сетевого интерфейса вашего компьютера, jmds будет работать только на этом интерфейсе. Вам не нужно запрашивать у серверов сервисы. Они должны публиковать их автоматически, и вы должны получить вызов serviceAddedEvent.