我在我的android项目"android studio“中使用dnsjava,我已经导入了库。但是当我运行代码时,我得到的结果是“找不到任何记录”,有人会遇到这种情况吗?我在这里找到了一篇文章,讨论了类似的问题,但解决方案不起作用。当我将查询类型更改为ANY、A或NS时。它就是不起作用。有人知道这是否是由于库代码的故障造成的?欢迎任何建议。
package org.pctechtips.netdroid.async;
import android.os.AsyncTask;
import android.util.Log;
import org.pctechtips.netdroid.response.DnsAsyncResponse;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
import java.lang.ref.WeakReference;
public class DnsLookupAsyncTask extends AsyncTask<String, Void, String> {
private final WeakReference<DnsAsyncResponse> delegate;
/**
* Constructor to set the delegate
*
* @param delegate Called when the DNS lookup finishes
*/
public DnsLookupAsyncTask(DnsAsyncResponse delegate) {
this.delegate = new WeakReference<>(delegate);
}
/**
* Performs the appropriate lookup for specified record type
*
* @param params
* @return DNS answer
*/
@Override
protected String doInBackground(String... params) {
String domain = params[0];
int recordType = Integer.parseInt(params[1]);
Record[] records;
try {
records = new Lookup("google.com", Type.ANY).run();
Log.d("DNS", records.toString());
if (records == null) {
return "No records found.";
}
StringBuilder answer = new StringBuilder();
for (Record record : records) {
String rClass = this.parseRecordClass(record.getDClass());
answer.append(String.format("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s%n%n", record.getName(), record.getTTL(), rClass, record.rdataToString()));
}
return answer.toString();
} catch (TextParseException e) {
return "Error performing lookup!";
}
}
/**
* Determines the string representation of the DNS record class
*
* @param recordClass Numeric record class
* @return Human readable record class
*/
private String parseRecordClass(int recordClass) {
switch (recordClass) {
case 1:
return "IN";
case 2:
return "CS";
case 3:
return "CH";
case 4:
return "HS";
default:
return "IN";
}
}
/**
* Calls the delegate when the DNS lookup has finished
*
* @param result DNS answer
*/
@Override
protected void onPostExecute(String result) {
DnsAsyncResponse activity = delegate.get();
if (activity != null) {
activity.processFinish(result);
}
}
}发布于 2019-06-19 22:00:00
Android Oreo做了一个改变,阻止查找dns服务器。https://developer.android.com/about/versions/oreo/android-8.0-changes.html#o-pri
有关更多详细信息和解决方法,请参阅:https://stackoverflow.com/a/48973823/5420880。
作为dnsjava的一种特定解决方法,您可以通过dns.server系统属性提供一个以逗号分隔的dns服务器列表。
https://stackoverflow.com/questions/56635898
复制相似问题