Android DNS 代码分析

本文深入探讨了Android系统中DNS解析的代码实现,主要位于bionic/libc/netbsd目录下。通过分析,发现代码源于废弃的NetBSD项目,但在Android中仍然使用。在Android设备上,可以通过编译简单的程序并执行来观察DNS查询过程。首先,_files_getaddrinfo会检查本地hosts文件,接着/_dns_getaddrinfo与DNS服务器交互。DNS服务器地址在__res_get_state中获取,通常设置为8.8.8.8。程序利用res_queryN进行查询,并由res_nsend发送请求,最终返回结果。
摘要由CSDN通过智能技术生成

Android DNS 代码都在bionic/libc/netbsd中

(虽然netbsd 是个废弃的项目,但dns功能部分代码被 Android用上了)

netbsd 代码晦涩难懂,只有一边写程序,一边打log验证


照抄了一个简单程序, 在android 下面用 mmm 编译可以得到 py_getaddr 可执行文件, 用adb 登陆到 devices 再到 system/bin 下去执行

payne@payne-desktop:~/njb/getaddr$ cat py_getaddr.c 
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s hostname\n",
argv[0]);
exit(1);   
}

struct addrinfo *answer, hint, *curr;
char ipstr[16];   
bzero(&hint, sizeof(hint));
hint.ai_family = AF_INET;
hint.ai_socktype 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值