Java DNS Lookup для записей SRV
В приведенном ниже Java-коде я выполняю поиск записи DNS SRV для разрешения имени целевого домена и связанного порта для данного доменного имени, такого как root@1000000000.blubluzone.com. Функция поиска, обозначенная /HERE/ ниже, как-то возвращает null, и я не могу получить результат запроса (т. Е. Массив записей имеет значение null). Как следствие, исключение пустого указателя генерируется при обращении к массиву записей в цикле for.
Как вы думаете, мне не хватает, чтобы следующий код работал. Я использую с помощью dnsjava и соответствующий файл jar API доступен по адресу http://www.dnsjava.org/download/ (внизу страницы). Заранее спасибо за ваше предложение.
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.SRVRecord;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
public class DNSLookup {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Usage: java -jar DNSLookup <hostname>");
System.exit(1);
}
String query = "_ssh._tcp." + args[0];
try {
/*****HERE*********/
Record[] records = new Lookup(query, Type.SRV).run();
for (Record record : records) {
SRVRecord srv = (SRVRecord) record;
String hostname = srv.getTarget().toString().replaceFirst("\\.$", "");
int port = srv.getPort();
System.out.println(hostname + ":" + port);
}
} catch (TextParseException e) {
e.printStackTrace();
}
}
}
1 ответ
Ваш код в порядке, за исключением того, что Lookup.run()
возвращается null
(не пустой массив), если записи не найдены.
Например, если вы замените _ssh._tcp
с _nicname._tcp
а затем посмотрите вверх uk
Вы найдете запись SRV для.UK whois
сервер.
Если есть проблема, это с вашими входными параметрами.