一、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命令可