iOS 端 DNS 相关技术
2017-09-07 本文已影响136人
践行者
iOS 端 DNS 相关技术
1.Mac下 关于 DNS 插件包
在 Mac OS X 上通过 pdnsd 和 dnsmasq 加速 DNS 以及避免污染
Note
在默认情况下,dnsmasq在解析一个域名时,会首先查找/etc/hosts文件中的定义,如果找不到的话,再去/etc/resolv.conf中去找。
2.程序实现 DNS 解析 ip
2.1 通过第三方接口地址 http://119.29.29.29/d?dn= 来获取
比如解析 www.163.com&ttl=1
返回结果:111.206.186.244;111.206.186.245,23
其中23是ttl缓存时间 也有可能不存在
2.2 通过iOS系统提供的CFHostRef 方式来获取
//通过系统CFHostRef方式获取 添加libresolv
- (NSString *)fetchIPFromHost:(NSString *)host;
2.3 通过 gethostbyname(hostName);
其中有一个注意点:iOS需要支持ipv6,需要调用 phost = gethostbyname2(hostName, AF_INET6);
2.4 自己服务器返回
在替换host时,有一个注意点
HTTP 标准中规定,服务器会将请求头中的 host 字段的值作为请求的域名。咱们使用 IP 替换 URL 中的 host 进行访问,此时网络库会将 IP 当作 host,服务器就会解析异常了.
解决方案: request 添加header <host,originHost>
4.如何获取ip 时间,多个ip如何选择
思路: 客户端 采用ping的方式,在github上找了一个第三方
代码不够完善Demo地址--https://github.com/softwarefaith/JiOSDNS