美文网首页
dnsjava edns请求

dnsjava edns请求

作者: mg1213 | 来源:发表于2019-03-27 15:03 被阅读0次

依赖包

在pom.xml文件添加dnsjava依赖

 <dependency>
        <groupId>dnsjava</groupId>
         <artifactId>dnsjava</artifactId>
         <version>2.1.8</version>
  </dependency>

请求代码部分

import org.xbill.DNS.*;

import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;


/**
 * @author Created by mg1213 on 2019/3/27
 * @email 244493422@qq.com
 */
public class Ends {
    public static void main(String[] args) throws IOException {
        long startTime, endTime;
        String namesever = "202.108.22.220";
        String clientIp = "113.123.136.145";
        String domainName = "www.baidu.com.";
        Name name = null;
        Record rec;
        Message query, response;
        SimpleResolver res = null;
        //是否指定dns服务器 没有指定使用localdns
        if (namesever == null || "".equals(namesever.trim())) {
            res = new SimpleResolver();
        } else {
            res = new SimpleResolver(namesever);
        }

        int type = Type.A, dclass = DClass.IN;
        InetAddress address = InetAddress.getByName(clientIp);
        name = Name.fromString(domainName, Name.root);
        ClientSubnetOption clientSubnetOption = new ClientSubnetOption(32, address);
        List ops = new ArrayList();
        ops.add(clientSubnetOption);
        rec = Record.newRecord(name, Type.A, dclass);
        query = Message.newQuery(rec);
        //开启EDNS 并且设置client ip
        res.setEDNS(0, 0, ExtendedFlags.DO, ops);
        startTime = System.currentTimeMillis();
        response = res.send(query);
        endTime = System.currentTimeMillis();
        if (type == Type.AXFR) {
            doAXFR(response, name);
        } else {
            doQuery(response, endTime - startTime);
        }
    }

    static void doAXFR(Message response, Name name) throws IOException {
        System.out.println("; java dig 0.0 <> " + name + " axfr");
        if (response.isSigned()) {
            System.out.print(";; TSIG ");
            if (response.isVerified()) {
                System.out.println("ok");
            } else {
                System.out.println("failed");
            }

        }

        if (response.getRcode() != Rcode.NOERROR) {
            System.out.println(response);
            return;
        }

        Record[] records = response.getSectionArray(Section.ANSWER);
        for (int i = 0; i < records.length; i++) {
            System.out.println(records[i]);
        }
        System.out.print(";; done (");
        System.out.print(response.getHeader().getCount(Section.ANSWER));
        System.out.print(" records, ");
        System.out.print(response.getHeader().getCount(Section.ADDITIONAL));
        System.out.println(" additional)");
    }

    static void doQuery(Message response, long ms) throws IOException {
        System.out.println("; java dig 0.0");
        System.out.println(response);
        System.out.println(";; Query time: " + ms + " ms");
    }
}

相关文章

网友评论

      本文标题:dnsjava edns请求

      本文链接:https://www.haomeiwen.com/subject/afpzvqtx.html