Android 获取DNS
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相关推荐
- android 获取dns地址吗,Android: 获取dns IP地址
在Android系统中,想获取dns server的IP地址并不是一件容易的事,在bionic中,有关于获取dns IP地址的相关代码,但是你在native代码中却不能接调用相关的函数获取. 如在bi ...
- android时间同步服务ipv6,Android O : DNS列表获取及IPv4/IPv6优先级修改
一.Android应用获取有线网络DNS列表 /*** 获取DNS列表*/ private ListgetDnsList() { List dnsList = newArrayList();if (t ...
- android studio dns问题_Android网络优化篇-从DNS开始
什么是DNS DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务.域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址 ...
- android 自定义dns解析器,Android中DNS解析
当服务端IP变化,大量用户还是访问的以前的IP,连接不上服务器. 我们的客户端软件如何通过域名正确访问服务器?这里面主要涉及到DNS缓存的问题. 什么是DNS? DNS 是域名系统 (Domain N ...
- android socket gprs 与 wifi 网络切换,Android应用开发Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址...
Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址. //查看Wifi地址publicString getWifiIpAddress() { //获取wifi服务WifiMa ...
- android屏幕密度高度,Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)...
我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @para ...
- Android获取当前时间
2019独角兽企业重金招聘Python工程师标准>>> Android获取当前时间 2012-01-09 17:29:55| 分类: 私人日志 |字号 订阅 [转自stay] 取得 ...
- Android获取设备状态栏status bar高度的正确姿势
Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...
- 格式android id,android 获取APP的唯一标识applicationId的实例
使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...
- android 获取图片
Android获取手机或者内存卡里面的图片有两种方式 1.这是通过一种action Intent intent=new Intent();intent.setAction(Intent.ACTION_ ...
最新文章
- 双开虚拟机(一个是克隆的)网卡起不来...启动网卡报错..
- 内网渗透测试:NTLM Relay攻击分析
- 【数据展示】matplotlib中label框亮度设置
- 【超详细】思科实验模拟器EVE的安装与使用,附下载链接
- NFT火了,12岁男孩用 Python 写了一个「表情包」,赚了250万
- python3x程序设计基础周元哲_Python 3 x程序设计基础
- 老子《道德经》第三章
- JS讲解跟遇到的问题
- 使用Sqlserver事务发布实现数据同步(转)
- 大数据技术之Hadoop概述
- 手机html微信登录,添加手机APP微信登录支持,微信公众号单页应用网页授权登录支持...
- ts自动编译声明文件_TS 的声明文件
- java ImageIO处理
- 《深入理解Android 卷III》第八章深入理解Android壁纸
- 飞塔防火墙常用命令集合
- 海尔智家罗马尼亚冰箱工厂将投产;长沙世茂希尔顿酒店今夏揭幕​;现代与LG新能源打造环保汽车电池 | 美通企业周刊...
- 如何将多个excel表格合并成一个_如何将多个PDF文档合并为一个
- OKPay遭到DDoS攻击,本周进一步威胁网络攻击
- 【微信小程序】云函数/云数据库 errMsg: parameter should be object instead of undefined
- 非苹果机安装 Mac OS X 全教程~~~~转
热门文章
- XOM版本1.2.5
- JAVA--多线程管理
- web统计:UV、IP、PV、VV
- 基于Element UI Calendar实现日程提醒功能
- word打开文档很久很慢_Windows10系统下打开Word文档很慢的多种处理技巧
- 武汉市计算机类中专学校排名,武汉中职中专学校一览表 2021最新排名
- 计算机进去bios方式,各种电脑进入BIOS方法汇总|进入bios的方法大全
- Activiti6.0.0及以上版本集成Activiti Modeler
- aid learning安装应用_aidlearning下载-Aid Learning 安卓版v0.80-PC6安卓网
- python文件双击闪退_解决python文件双击运行秒退的问题