public class DnsUtil {/*** 获取dns** @param context* @return*/public static String getDns(Context context) {/*** 获取dns*/String[] dnsServers = getDnsFromCommand();if (dnsServers == null || dnsServers.length == 0) {dnsServers = getDnsFromConnectionManager(context);}/*** 组装*/StringBuffer sb = new StringBuffer();if (dnsServers != null) {for (int i = 0; i < dnsServers.length; i++) {sb.append(dnsServers[i]);sb.append(" / ");}}//return sb.toString();}//通过 getprop 命令获取private static String[] getDnsFromCommand() {LinkedList<String> dnsServers = new LinkedList<>();try {Process process = Runtime.getRuntime().exec("getprop");InputStream inputStream = process.getInputStream();LineNumberReader lnr = new LineNumberReader(new InputStreamReader(inputStream));String line = null;while ((line = lnr.readLine()) != null) {int split = line.indexOf("]: [");if (split == -1) continue;String property = line.substring(1, split);String value = line.substring(split + 4, line.length() - 1);if (property.endsWith(".dns")|| property.endsWith(".dns1")|| property.endsWith(".dns2")|| property.endsWith(".dns3")|| property.endsWith(".dns4")) {InetAddress ip = InetAddress.getByName(value);if (ip == null) continue;value = ip.getHostAddress();if (value == null) continue;if (value.length() == 0) continue;dnsServers.add(value);}}} catch (Exception e) {e.printStackTrace();}return dnsServers.isEmpty() ? new String[0] : dnsServers.toArray(new String[dnsServers.size()]);}private static String[] getDnsFromConnectionManager(Context context) {LinkedList<String> dnsServers = new LinkedList<>();if (Build.VERSION.SDK_INT >= 21 && context != null) {ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);if (connectivityManager != null) {NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();if (activeNetworkInfo != null) {for (Network network : connectivityManager.getAllNetworks()) {NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);if (networkInfo != null && networkInfo.getType() == activeNetworkInfo.getType()) {LinkProperties lp = connectivityManager.getLinkProperties(network);for (InetAddress addr : lp.getDnsServers()) {dnsServers.add(addr.getHostAddress());}}}}}}return dnsServers.isEmpty() ? new String[0] : dnsServers.toArray(new String[dnsServers.size()]);}}
  • 这种方式是有缺陷的:wifi情况下,高版本的手机获取到的dns是内网ip(反而是一些低版本的手机,或者比较老的手机没这个问题)
  • 网易有一个获取dns地址的get请求地址:http://xx.nstool.netease.com

暂时没有找到一个完美的办法获取DNS,有了解的同学,请留言

Android 获取DNS相关推荐

  1. android 获取dns地址吗,Android: 获取dns IP地址

    在Android系统中,想获取dns server的IP地址并不是一件容易的事,在bionic中,有关于获取dns IP地址的相关代码,但是你在native代码中却不能接调用相关的函数获取. 如在bi ...

  2. android时间同步服务ipv6,Android O : DNS列表获取及IPv4/IPv6优先级修改

    一.Android应用获取有线网络DNS列表 /*** 获取DNS列表*/ private ListgetDnsList() { List dnsList = newArrayList();if (t ...

  3. android studio dns问题_Android网络优化篇-从DNS开始

    ​什么是DNS DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务.域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址 ...

  4. android 自定义dns解析器,Android中DNS解析

    当服务端IP变化,大量用户还是访问的以前的IP,连接不上服务器. 我们的客户端软件如何通过域名正确访问服务器?这里面主要涉及到DNS缓存的问题. 什么是DNS? DNS 是域名系统 (Domain N ...

  5. android socket gprs 与 wifi 网络切换,Android应用开发Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址...

    Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址. //查看Wifi地址publicString   getWifiIpAddress() { //获取wifi服务WifiMa ...

  6. android屏幕密度高度,Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)...

    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @para ...

  7. Android获取当前时间

    2019独角兽企业重金招聘Python工程师标准>>> Android获取当前时间 2012-01-09 17:29:55|  分类: 私人日志 |字号 订阅 [转自stay] 取得 ...

  8. Android获取设备状态栏status bar高度的正确姿势

    Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...

  9. 格式android id,android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...

  10. android 获取图片

    Android获取手机或者内存卡里面的图片有两种方式 1.这是通过一种action Intent intent=new Intent();intent.setAction(Intent.ACTION_ ...

最新文章

  1. 双开虚拟机(一个是克隆的)网卡起不来...启动网卡报错..
  2. 内网渗透测试:NTLM Relay攻击分析
  3. 【数据展示】matplotlib中label框亮度设置
  4. 【超详细】思科实验模拟器EVE的安装与使用,附下载链接
  5. NFT火了,12岁男孩用 Python 写了一个「表情包」,赚了250万
  6. python3x程序设计基础周元哲_Python 3 x程序设计基础
  7. 老子《道德经》第三章
  8. JS讲解跟遇到的问题
  9. 使用Sqlserver事务发布实现数据同步(转)
  10. 大数据技术之Hadoop概述
  11. 手机html微信登录,添加手机APP微信登录支持,微信公众号单页应用网页授权登录支持...
  12. ts自动编译声明文件_TS 的声明文件
  13. java ImageIO处理
  14. 《深入理解Android 卷III》第八章深入理解Android壁纸
  15. 飞塔防火墙常用命令集合
  16. 海尔智家罗马尼亚冰箱工厂将投产;长沙世茂希尔顿酒店今夏揭幕​;现代与LG新能源打造环保汽车电池 | 美通企业周刊...
  17. 如何将多个excel表格合并成一个_如何将多个PDF文档合并为一个
  18. OKPay遭到DDoS攻击,本周进一步威胁网络攻击
  19. 【微信小程序】云函数/云数据库 errMsg: parameter should be object instead of undefined
  20. 非苹果机安装 Mac OS X 全教程~~~~转

热门文章

  1. XOM版本1.2.5
  2. JAVA--多线程管理
  3. web统计:UV、IP、PV、VV
  4. 基于Element UI Calendar实现日程提醒功能
  5. word打开文档很久很慢_Windows10系统下打开Word文档很慢的多种处理技巧
  6. 武汉市计算机类中专学校排名,武汉中职中专学校一览表 2021最新排名
  7. 计算机进去bios方式,各种电脑进入BIOS方法汇总|进入bios的方法大全
  8. Activiti6.0.0及以上版本集成Activiti Modeler
  9. aid learning安装应用_aidlearning下载-Aid Learning 安卓版v0.80-PC6安卓网
  10. python文件双击闪退_解决python文件双击运行秒退的问题