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

如在bionic/libc/include/resolv.h中有如下声明:

__BEGIN_DECLS

#pragma GCC visibility push(default)

struct res_state;

extern struct __res_state *__res_state(void);

#define _res (*__res_state())

#define b64_ntop __b64_ntop

#define b64_pton __b64_pton

extern int b64_ntop(u_char const*, size_t, char*, size_t);

extern int b64_pton(char const*, u_char*, size_t);

#define dn_comp __dn_comp

extern int dn_comp(const char*, u_char*, int, u_char**, u_char**);

extern int dn_expand(const u_char*, const u_char*, const u_char*, char*, int);

#pragma GCC visibility pop

__END_DECLS

文件中设置了编译条件:visibility为default, 而在bionic/libc/Android.mk文件中,将visibility设置为了hidden, 就是使得你在native代码中使用了_res或者是__res_state()函数时,在进行编译链接时,会报如下错误:

: error: undefined reference to '__res_state'

collect2: error: ld returned 1 exit status

既然这条路行不通,那我们还有什么别的办法吗,先看一下与dns相关的系统属性:

$ adb shell getprop | grep dns

[dhcp.wlan0.dns1]: [10.0.0.1]

[dhcp.wlan0.dns2]: []

[dhcp.wlan0.dns3]: []

[dhcp.wlan0.dns4]: []

[net.change]: [net.dns1]

[net.dns1]: [10.0.0.1]

这里我们可以看到当前连接的wifi网络的dns以及系统全局使用的dns(net.dns1),也许,我们只能从系统属性获取dns了。

在java代码中,我们可以通过LinkProperties即调用ConnectivityManager.getLinkProperties()得到特定网络的相关信息,当然这其中也包含了dns server的信息(LinkProperties.getDnsServers()):

Describes the properties of a network link. A link represents a connection to a network. It may have multiple addresses and multiple gateways, multiple dns servers but only one http proxy and one network interface. Note that this is just a holder of data. Modifying it does not affect live networks.

相关的代码如下:

// ...

ConnectivityManager cm = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);

NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();

for (Network network : cm.getAllNetworks()) {

NetworkInfo networkInfo = cm.getNetworkInfo(network);

if (networkInfo.getType() == activeNetworkInfo.getType()) {

LinkProperties lp = cm.getLinkProperties(network);

for (InetAddress addr : lp.getDnsServers()) {

// Get DNS IP address here:

}

}

}

// ...

android 获取dns地址吗,Android: 获取dns IP地址相关推荐

  1. 探索浏览器(二)向DNS服务器查询Web服务器的IP地址

    1.IP地址基础知识 (1)尽管浏览器能解析网址并生成HTTP消息,但它本身是不能发送网络消息的,这必须委托给操作系统来实现.在此之前,我们要查询网址中的服务器域名找到对应的IP地址.所以任务又可以细 ...

  2. 《网络是怎样连接的》第一章第二节:向DNS服务器查询Web服务器的IP地址

    <网络是怎样连接的>第一章:浏览器生成消息 概述:这本书以 "从在浏览器输入网址,到屏幕显示出网页,当中到底发生了什么?"为疑问,探究其中的过程.本章讲的是浏览器怎么把 ...

  3. PHP获取IP地址的方法,防止伪造IP地址注入攻击

    PHP获取IP地址的方法,防止伪造IP地址注入攻击 原文:PHP获取IP地址的方法,防止伪造IP地址注入攻击 PHP获取IP地址的方法 /*** 获取客户端IP地址* <br />来源:T ...

  4. iOS 如何获取手机外网IP地址(附内网IP地址)

    查找了一些方法,最初以为拿到的就是手机对外的公网地址,其实只是本地IP地址.下面把获取手机内外网IP地址的方法总结下: 一.获取手机本地静态IP地址:(局域网) 方法1: 首先导入头文件: //IP地 ...

  5. dns按来路ip智能解析_求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址?...

    求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址? (2012-01-10 08:43:58) 标签: ip地址 如何 杂谈 求助DNS问题,如何根据来源Ip地址作策略, ...

  6. 【网络是怎么连接的】—— 1.2 向 DNS 服务器查询 Web 服务器的 IP 地址

    目录 1.2 向 DNS 服务器查询 Web 服务器的 IP 地址 1.2.1 IP地址基础知识 1.2.2 域名和 IP 地址并用的理由 1.2.3 Socket 库提供查询 IP 地址的功能 1. ...

  7. Python获取局域网内可连通的主机ip地址

    使用python来获取整个局域网内可以连通的主机ip地址: 整体是思路就是 1.先获取我本机的ip地址 2.拿到我本机ip后,截取ip的最后一段,保留前一部分网段信息 3.调用cmd命令,循环从1循环 ...

  8. 阿里云域名DNS解析到网站服务器空间IP地址教程

    阿里云域名添加网站解析是指域名解析到网站空间或服务器的IP地址,实现通过域名可以访问网站的效果,阿里云百科分享阿里云域名解析到服务器或空间IP地址的教程: 阿里云域名添加网站解析教程 阿里云域名解析到 ...

  9. 2021-08-26——获取电脑真实的IP地址,忽略虚拟机等IP地址的干扰

    获取电脑真实的IP地址,忽略虚拟机等IP地址的干扰 此代码中只要读取到了WiFi或者有线地址其中之一立即return. 微信搜索"HUC思梦"关注我吧,关注有惊喜,不定时有免费资源 ...

  10. 获取公网、局域网、以及根据ip地址找城市

    1.公网代码 package com.fan.study.ip;import java.io.BufferedReader; import java.io.IOException; import ja ...

最新文章

  1. Jquery为DIV添加点击事件,Jquery为a标签超链接添加点击事件
  2. css3鼠标果果变手型代码_css3 鼠标悬浮动画效果
  3. 利用深度学习方法进行情感分析以及在海航舆情云平台的实践
  4. 隐藏频道_《TED频道》-隐藏真实自我
  5. 李倩星r语言实战_《基于R的统计分析与数据挖掘》教学大纲
  6. 从零开始学spring-boot(2)-集成spring-data-jpa
  7. html网页如何获取后台数据库的数据(html + ajax + php + mysql)
  8. ABP入门系列(16)——通过webapi与系统进行交互
  9. 贝叶斯网络的应用实例一
  10. excel首行空不能导入access_终于解决SQL Server 2008 64位系统无法导入Access/Excel的问题 2012/08/01...
  11. C++算法学习(回溯算法)
  12. java 组件更新,java – 我可以批量处理一些Swing组件更新,以便重绘全部一次完成吗?...
  13. java 复制网页文字,网页文字和图片不能复制怎么办
  14. 微信支付解决多商户平台收款
  15. vue 统计中英文字符串长度_Ant Design Vue实现区分中英文分全角/半角字符长度校验功能...
  16. 前端架构师的YY定义
  17. LD、CD、VCD、SVCD、DVD、DVCD、HDCD
  18. 企业最需要的邮件服务器5大功能模块
  19. 光盘复制-DVD光盘复制格式剖析
  20. 核电站问题 解题报告

热门文章

  1. 真真感受到了c语言的古老!
  2. c语言中百分号ld是什么意思,正确表达科技论文图表中的百分号和应变.pdf
  3. imx6 ar8031 千兆网卡不能用
  4. 在淘宝开放平台创建应该步骤
  5. 双目立体视觉源代码 双目立体视觉匹配程序 双目视觉3d成像(三维重构图像处理) 基于双目视觉的深度计算和三维重建 opencv写的双目视觉摄像机标定和三维重建代码
  6. 十进制小数如何转换为二进制小数
  7. js的判断以及图片的点击切换效果
  8. 根据仙女的白富美程度匹配高富帅
  9. 如何取出一个字节的高4位和低4位
  10. linux 安装python2.7