首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dnsjava库返回“找不到记录”

dnsjava库返回“找不到记录”
EN

Stack Overflow用户
提问于 2019-06-18 01:02:57
回答 1查看 413关注 0票数 0

我在我的android项目"android studio“中使用dnsjava,我已经导入了库。但是当我运行代码时,我得到的结果是“找不到任何记录”,有人会遇到这种情况吗?我在这里找到了一篇文章,讨论了类似的问题,但解决方案不起作用。当我将查询类型更改为ANY、A或NS时。它就是不起作用。有人知道这是否是由于库代码的故障造成的?欢迎任何建议。

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 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服务器列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56635898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档