通過ubuntu等Linux系統都是通過resolve.conf檔案進行網域名稱解析的,通過man resolve.conf可以查看到:
The resolver is a set of routines in the C library that provide access to the Internet Domain Name System (DNS). The resolver configuration file contains information that is read by the resolver routines the first time they are invoked by a process. The file is designed to be human readable and contains a list of keywords with values that provide various types of resolver information. If this file doesn't exist the only name server to be queried will be on the local machine; the domain name is determined from the hostname and the domain search path is constructed from the domain name.
所以DNS解析是由C庫函數進行解析的,在Android中bionic/libc/docs/overview.txt檔案中我們也可以看到:
NS resolver:
Bionic uses a NetBSD-derived resolver library which has been modified in the following ways:
- don't implement the name-server-switch feature (a.k.a. <nsswitch.h>)
- read /system/etc/resolv.conf instead of /etc/resolv.conf
- read the list of servers from system properties. the code looks for 'net.dns1', 'net.dns2', etc.. Each property should contain the IP address of a DNS server.
these properties are set/modified by other parts of the Android system (e.g. the dhcpd daemon).
the implementation also supports per-process DNS server list, using the properties 'net.dns1.<pid>', 'net.dns2.<pid>', etc... Where <pid> stands for the numerical ID of the current process.
- when performing a query, use a properly randomized Query ID (instead of a incremented one), for increased security.
- when performing a query, bind the local client socket to a random port for increased security.
- get rid of *many* unfortunate thread-safety issues in the original code
Bionic does *not* expose implementation details of its DNS resolver; the content of <arpa/nameser.h> is intentionally blank. The resolver implementation might change completely in the future.
所以android關注的是resolv.conf以及net.dns1等屬性。
通過adb shell中通過getprop查看屬性,確實有net.dns1、net.dns2以及wifi中的net.tiwlan0.dns1以及net.tiwlan0.dns2,移動網路中的net.rmnet0.dns1以及net.rmnet0.dns2等屬性。