Android 调整DNS顺序

目前IPV6的大力推广,所以现在越来越多的Android设备都开始支持IPV6了,那么在网络上就是IPV4//IPV6双栈连接

IPV4/IPV6双栈连接那么系统就会得到下发的ipv4 dns服务器和ipv6 dns服务器,DNS服务器地址在dns协议中保存在一个数组中,后面进行DNS请求也是对该数组进行遍历,所以首先进行请求的目标DNS就是保存在数组中的第一个(具体DNS原理可以查看

https://blog.csdn.net/cc0410/article/details/103288483这篇文章)

而数组中保存的DNS顺序依据是什么呢?依据的是IPV4或者IPV6哪个先连接成功,如果IPV4先连接成功,那么DNS数组中优先存储的就是IPV4下发的DNS服务器,如果是IPV6先连接成功,那么DNS数组中优先存储的就是IPV6下发的DNS服务器

IPV4先连成功:

dns_list[0] = 8.8.8.8

dns_list[1] = 114.114.114.114

dns_list[2] = fe80::1

dns_list[3] = 2000::1

IPV6先连成功:

dns_list[0] = fe80::1

dns_list[1] = 2000::1

dns_list[2] = 8.8.8.8

dns_list[3] = 114.114.114.114

 

假设我们想先向IPV6 DNS发起请求,但这时是IPV4先连成功,那么Android原生流程就无法满足,所以这个时候我们需要对DNS的保存过程做一个调整:

    /**
     * set dns priority according to sys.network.priority(4 ro 6)
     */
    private Collection<InetAddress> sortDnsesByPriority(Collection<InetAddress> dnses) {
        Collection<InetAddress> dnsesList = new ArrayList<InetAddress>();
        if (dns
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值