原址

一、android中代码
framework端,设置dns服务器代码路径如下:
kk-4.x/libcore/luni/src/main/java/java/net/InetAddress.java
kk-4.x/frameworks/base/services/java/com/android/server/NetworkManagementService.java
kk-4.x/frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
NetworkManagementService中函数setDnsServersForInterface
最终会通过本地socket传输命令到守护进程netd
所以framework层还可以使用INetworkManagementService mNetd  来更改dns地址
二、和dns相关libc代码路径如下:
kk-4.x/bionic/libc/netbsd
三、netd模块,netd是一个守护进程
kk-4.x/system/netd
四、其他命令设置dns
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 202.96.134.33:53
取消设置的DNS:
iptables -t nat -L OUTPUT -n -v --line-numbers
iptables -t nat -D OUTPUT *linenumber*

五、第一次开机起来后获取DNS:

/data/data/com.android.providers.settings/databases/Settings.db 里面有保存dns数据

在开机状态下,获取DNS:
EthernetManager可以设置获取DNS,这个dns是保存在内存的键值对中。

六、流程
android 4.3之后通过DNS获取ip,采用netd代理,netd是一个守护进程。
通过ndc命令可以配置DNS服务器:
ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
各个版本支持的ndc命令:
https://github.com/bparmentier/DNSSetter/wiki/ndc-resolver-commands

1、ndc通过本地socket将命令传给netd
2、通过netd调用res_cache将dns1和dns2等信息保存到cache中
3、 netd调用bionic libc下netbsd中函数getaddrinfo
4、libc更新要访问的dns服务器ip地址

android中请求DNS服务器,获取ip流程如下
上层应用设置dns
NativeDaemonConnector通过java本地socket,将命令发送给NetD。
如果不走netd,流程如下:
注:lbc为android下bionic里面的libc
如果4.3之后有需求,需要和4.3之前一样,通过属性配置DNS。
那么可以合并4.0.3代码,即res_init.c中合并通过属性获取DNS
服务器ip地址代码,通过在自己的程序中设置环境变量:
setenv("ANDROID_DNS_MODE", "local", 1);不要export。
当然不合并代码也是可以的,只需要修改dns服务器地址。
在res_init中res_setservers里面可以修改

struct addrinfo hints, *ai;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_NUMERICHOST;
sprintf(sbuf, "%u", NAMESERVER_PORT);
sprintf(propname, "net.dns%d", i+1);
__system_property_get(propname,propvalue);
printf(" propname: %s \n",propname);
printf("propvalue dns: %s \n",propvalue);
char* p = propvalue;
while (*p == ' ' || *p == '\t')
p++;
p[strcspn(p, ";# \t\n")] = '\0';
if (getaddrinfo(propvalue, sbuf, &hints, &ai) != 0){
memcpy(&statp->nsaddr_list[nserv],&set->sin, size);
}else{
memcpy(&statp->nsaddr_list[nserv],ai->ai_addr, ai->ai_addrlen);
}
如果不修改底层代码,是可以通过ndc命令修改DNS服务器的。原理就是第一个图。
基本请求流程如下:
android apk上从dns服务器获取ip方式如下:
new Thread( networkTask).start();
Runnable networkTask = new Runnable() {
@Override
public void run() {
try {
InetAddress inetAddress = InetAddress.getByName( "www.baidu.com");
Log. i( TAG, "Address is getHostName:" + inetAddress.getHostName());
Log. i( TAG, "Address is " + inetAddress.getHostAddress());
} catch (Exception e) {
e.printStackTrace();
Log. i( TAG, "Address is Exception");
}
}
};
< uses-permission android:name = "android.permission.INTERNET" />

android 4.3以上修改DNS流程(netd)相关推荐

  1. android 4.3以上修改DNS 及 流程(netd)

    一.android中代码 framework端,设置dns服务器代码路径如下: kk-4.x/libcore/luni/src/main/java/java/net/InetAddress.java ...

  2. android谷歌dns设置在哪,安卓手机怎么设置DNS Android手机修改DNS图文教程

    对于PC电脑设置DNS怎么设置笔者相信大家应该有一点定的能力,但是对于运行Android系统的智能手机想必大家都缺乏了解.那么安卓手机怎么设置DNS地址呢?下面百事网小编针对运行Android系统的安 ...

  3. Android通过WindowManager.LayoutParams修改Activity窗口亮度流程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_38059988/article/ ...

  4. 修改dns访问android.com

    1.几个常用dns服务器 8.8.8.8 美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器 8.8.4.4 美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器 8.8.4.3 美国 加利福尼 ...

  5. android模拟器dns,网络异常,显示无网络(修改DNS方法)

    纵观全网,有许多使用夜神小伙伴反馈说,在安卓模拟器更新游戏或在线更新文件的时候无法更新,会出现"更新失败.网络异常.浏览器显示无网络"等情况,可以戳应用无法联网.网络异常的解决办法 ...

  6. 更改android模拟器dns,安卓模拟器网络异常修改DNS教程

    纵观全网,有许多雷电小伙伴反馈说,在安卓模拟器更新游戏或在线更新文件的时候无法更新,会出现"更新失败.网络异常.浏览器显示无网络"等情况,可以戳应用无法联网.网络异常的解决办法查看 ...

  7. 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )

    文章目录 一.应用结构分析 二.定位动态库位置 三.定位动态库中的修改点 四.修改动态库 五.重打包 一.应用结构分析 分析上一篇博客 [Android 逆向]逆向修改游戏应用 ( APK 解析工具 ...

  8. 【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 )

    文章目录 一.检查 Oboe 音频流属性 二.开始播放 三.停止播放 四.关闭音频流 五.重新配置 Oboe 音频流属性 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : G ...

  9. 手机流量怎么修改dns服务器,手机上网速度慢怎么办?手动修改DNS为上网提速

    相信很多Android手机用户都有遇到过类似问题,明明大家用的都是同样的Wi-Fi网络,但是别人的手机可以秒开网页,而自己的手机却总会慢个半拍或是经常打不开.遇到这种问题是不是很气人呢,那么,手机上网 ...

最新文章

  1. [BZOJ5303] [HAOI2018] 反色游戏
  2. window 安装python 环境
  3. Oracle分析函数六——数据分布函数及报表函数
  4. 【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题
  5. html无序列表中的正方形点点,CSS 有序或者无序列表的前面的标记 list-style-type 属性的实现...
  6. Springboot项目中Maven Plugin各个插件的版本控制
  7. Redis实战篇(视频学习来自黑马程序员)
  8. 淘宝开店经验 心得 攻略
  9. day3-作业(18-23)(java泛型总结一)
  10. [原创] 仿滴滴出行打车APP定位导航,增加RFID认证、海外版、司机证件号码识别功能
  11. 我的年终奖发了!你呢???
  12. Dynamics AX2012 SSRS errors:For more information about this error navigate...
  13. [Qt] Qt自带的modbus client 和 server 例程的拓展
  14. PCB Stack设计规范
  15. 逐级模糊度固定方法(CIR)
  16. 基于java的医院分诊系统的设计与实现
  17. 数据库运维都要做些什么?
  18. web安全测试之appscan – “X-Content-Type-Options”头缺失或不安全
  19. 获嘉供应链直播基地,培育网红爆款都说好
  20. 【深度学习在智能机器人中的应用】论文合集推荐丨CMU新型机器人算法可操纵所有日常家具

热门文章

  1. Java Lock的使用
  2. C# 6.0 新特性
  3. Sql Server 事务日志(二)
  4. cisco交换机端口“假死”现象
  5. Linux Kernel Linux内核项目
  6. 机器学习三个部分:输入、算法、输出 资料收集
  7. 对象删除某个属性_JS对象基本用法
  8. 数据库设计三范式的举例及四大特性说明
  9. vue中select选择框的监听事件
  10. c语言综合性程序设计,《C语言程序设计》综合性实验报告撰写格式