Android 8.0网络DNS

news2024/10/7 14:29:52

1 Linux DNS规范
Linux上并没有一个单独的方法可以完成DNS查询工作;没有一个有这样的明确接口的核心系统调用system call。不过,glibc (nss)的getaddrinfo (3), gethostbyname (3)等相关API (RFC3493)提供了DNS查询功能。
1)不支持nscd(name service cache daemon)服务,那么这2个函数接口通过文件/etc/resolv.conf获取DNS服务器的IP地址,然后通过socket通信发送请求到该DNS IP地址去获取待查询域名的IP地址。
2)支持nscd服务(or dnsmasq),这2个函数接口发送请求给nscd,nscd再返回响应给请求者。
3)ping uses glibc gethostbyname()。

2 Android netd DNS
2.1 Android 4.3 DNS
Android 4.3 incorporated a somewhat confusing series of commits under the heading of "dns cache per interface," which effectively causes all Bionic DNS requests to be proxied through netd.

ANDROID_DNS_MODE=local
dumpsys connectivity
dumpsys netd
ndc tether dns set
ndc tether dns list

iptables -t nat -I OUTPUT -p udp \
--dport 53 -j DNAT \
--to-destination 192.168.1.5:53
iptables -t nat -I OUTPUT -p tcp \
--dport 53 -j DNAT \
--to-destination 192.168.1.5:53

This works by intercepting the DNS requests meant for the remote nameserver and redirecting it to the local DNS server. 

2.2 Android netd DNS
libcore/ojluni/src/main/java/java/net/InetAddress.java
netd中dns server设置文件:ResolverController.cpp
netd中域名解析文件:DnsProxyListener.cpp

Figure 2-1 Android netd DNS

2.3 libc DNS解析函数
Android bionic: based on OpenBSD, b means BSD
bionic/libc/dns/net/getaddrinfo.c
getaddrinfo(): IPv4 and IPv6
bionic/libc/dns/net/getnameinfo.c
getnameinfo()
bionic/libc/dns/net/gethnamaddr.c
gethostbyname(): only IPv4, gethostbyname_r(), r means reentry

通过netd获取DNS服务器的IP地址(Ubuntu通过进程dnsmasq和配置文件/etc/resolv.conf),然后构建DNS请求包,查询域名对应的IP地址,并且按照netId的分类缓存到netd中:
bionic/libc/dns/net/gethnamaddr.c
gethostbyname_internal_real()

2.4 Android三个网络基础库DNS解析
1) JDK HttpURLConnection
2) Apache HttpClient,Android 6.0之后不再支持HttpClient
3) OkHttp, third-party library

以上3个类库都会调用下面的JDK函数
InetAddress.getByName()
getaddrinfo() - libc DNS parser API

2.5 DHCP
DHCP Offer报文Options中包含了DNS Server地址

Android GB system/core/libnetutils/dhcp_utils.c
int dhcp_do_request(...,
in_addr_t *dns1, in_addr_t *dns2...)

3 Android netId
3.1 获取网络接口的netId
netd中将接口名(wlan0、eth0等)转化为netId的函数:
server/NetworkController.cpp
NetworkController::getNetworkForInterface(
const char* interface)

3.2 代码示例
server/CommandListener.cpp
函数CommandListener::NetworkCommand::runCommand()的最后添加如下的代码:
//     0            1                2
// network query_netid if_name
if (!strcmp(argv[1], "query_netid")) {
    if (argc < 3) {
        return syntaxError(client,
            "Missing argument");
    }
    int _netId =
        gCtls->netCtrl.getNetworkForInterface(
            argv[2]);
    char msg[16] = {0};
    int retval = snprintf(msg, 15, "%d", _netId);
    if (retval > 0) {
        client->sendMsg(
            ResponseCode::CommandOkay,
            msg, false);
        return 0;
    } else {
        return operationError(client,
            "Can not get netId", retval);
    }
}
用法:ndc network query_netid wlan0

4 ndc
4.1 查询可用命令表
ndc interface list

4.2 清除netd DNS缓存
ndc resolver flushif eth0
ndc resolver flushdefaultif -- flush default DNS resolver

Android 8.0没有导出刷新DNS缓存的接口,可以调用如下API添加。
bionic/libc/dns/resolv/res_cache.c
_resolv_flush_cache_for_net(netId)

4.3 设置netd DNS
ndc resolver setnetdns <netid> <domain> <dns1> <dns2> ...
ndc resolver setnetdns eth0 "" 8.8.8.8 192.168.1.1
ndc resolver setnetdns eth0 localdomain 8.8.8.8 192.168.1.1

5 Abbreviations
dnsmasq: DNS masquerade
mdnsd: multicast DNS,组播DNS
ndc:Native Daemon Connector
ojluni:Android libcore中的模块,包含OpenJDK、Language、Util、Net、IO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于使用STM32CubeMx配置串口出现的一些问题

一、使用CubeMX配置好串口中断的工程&#xff0c;打开工程添加相关代码后串口没有数据输出或者看不见数据但串口助手的RX会一直增加的问题。 参考&#xff1a;这里 大概意思就是时钟的原因&#xff0c;需要把stm32f4xx_hal_conf.h文件中的时钟改一下&#xff0c;将25MHz改为8…

Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(中)

在消费类电子产品领域&#xff0c;工程师可利用激光雷达实现众多功能&#xff0c;如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同&#xff0c;但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具有针对…

我要涨知识——TypeScript 经典高频面试题(二)

又是一个年底来了&#xff0c;好大一批人可能又准备跑路了&#xff0c;翻了翻掘金和 CSDN 发现好多大佬都有大厂 Offer &#xff0c;看着看着我心动了&#xff01; 话不多说&#xff0c;赶紧开干&#xff0c;给自己整了一个前端面试小助手——微信小程序内搜索 “WEB学习学习加…

jar启动指定JDK/JRE 安装路径教程

前言 因为疫情在家办公的缘故&#xff0c;有个老项目&#xff0c;需要改个接口&#xff0c;然后需要前端联调&#xff0c;因为外网服务器没有多余的空间了&#xff0c;想着把jar给前端让前端开发人员&#xff0c;在自己的本机启动后端服务&#xff0c;进行接口联调&#xff0c;…

streptavidin-PEG-6-FAM 链霉亲和素-聚乙二醇-6-羧甲基荧光素

产品名称&#xff1a;链霉亲和素-聚乙二醇-6-羧甲基荧光素 英文名称&#xff1a;streptavidin-PEG-6-FAM 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、75…

虚拟内存系统【如何支持巨大的虚拟地址空间】

如何支持巨大的虚拟地址空间&#x1f4d6;1. 为什么要支持巨大的虚拟地址空间&#x1f4d6;2. 交换空间&#x1f4d6;3. 存在位&#x1f4d6;4. 页错误&#x1f4d6;5. 为了处理页错误&#xff0c;操作系统大致做了什么&#xff1f;&#x1f4d6;6. 页面换出&#x1f4d6;7. 当…

IDEA 中使用 SparkSQL 远程连接 Hive

文章目录第一步&#xff0c;环境配置第二步&#xff0c;IDEA 配置第三步&#xff0c;授权第四步&#xff0c;连接测试扩展——华为云/阿里云集群报错第一步&#xff0c;环境配置 首先&#xff0c;你要确保你的集群可以正常运行。 我们在 Windows 电脑中安装 Hadoop&#xff0…

【新知实验室--音视频通话】腾讯云TRTC-实时音视频---多人会议视频通话SDK基础搭建

&#x1f996;我是Sam9029&#xff0c;一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 &#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;恭喜你&#xff0c;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求收…

基于STM32单片机的篮球计时记分器proteus仿真原理图PCB

功能&#xff1a; 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示比赛剩余时间&#xff0c;球队分数 2.默认计时器为4节&#xff0c;每节10分钟&#xff0c;每节比赛结束&#xff0c;蜂鸣器报警 3.按键功能介绍: 1’键——加1分 4’键——减1分 2’键——加2分 5’键—…

基于java+springmvc+mybatis+vue+mysql的水果食品果蔬生鲜商城销售系统

项目介绍 网络购物作为一种全新的销售方式赢得了越来越多销售者的青睐&#xff0c;近年来销售额更是以连年翻番的惊人速度成倍增长&#xff0c;网络购物已经形成了自身特有的网络销售市场和全新的网络营销模式&#xff0c;也使网络营销渠道应运而生&#xff0c;同时&#xff0…

SRM供应商平台哪些好用?

SRM系统是管理供应商的系统&#xff0c;旨在与供应商建立高效的协同关系&#xff0c;是一种围绕采购业务的双赢管理模式。 但市面上SRM系统供应商层出不穷&#xff0c;很多企业在数字化转型中不知如何挑选合适自己企业的SRM系统&#xff0c;或是选错了系统&#xff0c;效率提升…

成功的项目管理工具拥有的五大功能

如果您决定投资一种新的项目管理工具&#xff0c;那么您需要确保购买的是最适合自己的。在为您的企业寻找最佳项目管理软件时&#xff0c;不要被所有的花里胡哨分心&#xff0c;因为某些东西看起来很漂亮并不意味着它有实质。不要错过对团队成功至关重要的关键功能&#xff0c;…

【论文精读7】MVSNet系列论文详解-PVA-MVSNet

PVA-MVSNet论文名为&#xff1a;Pyramid Multi-view Stereo Net with Self-adaptive View Aggregation&#xff0c;主要是用了一个自适应的聚合模块来在构建代价体时不用均匀的方差、而是让不同的特征体具有一定的选择注意力权重来对最终的代价体做贡献&#xff0c;同时对于多尺…

星起航跨境:跨境卖家可以这样获得好评,稳步提升销量

据调查数据显示&#xff0c;90%以上的消费者购物之前会先查看产品评论&#xff0c;好的评价能促进产品更快地转化&#xff0c;不好的评价还会对产品listing权重产生一定的影响。例如&#xff1a;在产品listing的评价较少的情况下&#xff0c;一个1星差评在listing展示超过3天之…

WebRTC实战-第一章-理论基础

目录webrtc-demo基础理论ICE server/信令server/webrtc server的区别和联系coturn安装coturn穿透和转发服务器安装依赖ubuntu系统centos系统编译安装coturn快速测试启动自定义配置启动自定义配置真实配置新建start.sh测试地址&#xff0c;分别测试stun 和 turn打开测试地址测试…

jsp汽车销售管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp汽车销售管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使用…

Spire.Doc 10.11.9 支持设置形状填充颜色的透明度

度娘找破解版Spire.Doc for .NET是一个专业的Word .NET库&#xff0c;专门为开发人员设计&#xff0c;用于在任何.NET 平台&#xff08;Target .NET Framework、.NET Core、.NET Standard、 .NET 5.0、.NET 6.0、Xamarin 和 Mono Android&#xff09;&#xff0c;具有快速和高质…

纷享销客2022新增长系列之《高科技行业橙皮书》重磅发布

二十大报告进一步提出建设数字中国&#xff0c;加快发展数字经济。这意味着&#xff0c;对于各行业而言&#xff0c;充分运用数字化技术推动业务变革、效率变革、流程变革&#xff0c;是各行各业发展的必经之路。 高科技行业作为一个知识与技术密度性高的行业&#xff0c;具备技…

【pen200-lab】10.11.1.146

pen200-lab 学习笔记 【pen200-lab】10.11.1.146 &#x1f525;系列专栏&#xff1a;pen200-lab &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x1f36d;作…

day11-12【代码随想录】删除链表的倒数第N个节点、链表相交、字符串中第二大的数字

文章目录前言一、删除链表的倒数第N个节点&#xff08;力扣19&#xff09;二、链表相交&#xff08;力扣160&#xff09;三、字符串中第二大的数字&#xff08;力扣1796&#xff09;前言 1、删除链表的倒数第N个节点 2、链表相交 3、字符串中第二大的数字 一、删除链表的倒数…