iOS 端 DNS 相关技术

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缓存时间 也有可能不存在

具体代码可以看AppDNSParser类

2.2 通过iOS系统提供的CFHostRef 方式来获取

//通过系统CFHostRef方式获取 添加libresolv

  • (NSString *)fetchIPFromHost:(NSString *)host;

具体代码可以看AppDNSMapper.h类

2.3 通过 gethostbyname(hostName);

其中有一个注意点:iOS需要支持ipv6,需要调用 phost = gethostbyname2(hostName, AF_INET6);

具体代码可以看AppDNSMapper.h类

2.4 自己服务器返回

在替换host时,有一个注意点

HTTP 标准中规定,服务器会将请求头中的 host 字段的值作为请求的域名。咱们使用 IP 替换 URL 中的 host 进行访问,此时网络库会将 IP 当作 host,服务器就会解析异常了.

解决方案: request 添加header <host,originHost>

4.如何获取ip 时间,多个ip如何选择

思路: 客户端 采用ping的方式,在github上找了一个第三方

具体代码可以看IpManage类

代码不够完善Demo地址--https://github.com/softwarefaith/JiOSDNS

参考文章

  1. https://program-think.blogspot.com/2014/01/dns.html
  2. 在 Mac OS X 上通过 pdnsd 和 dnsmasq 加速 DNS 以及避免污染
  3. http://xintq.net/2017/05/16/mac-dnsmasq/
  4. https://elliotsomething.github.io/2016/10/18/DNS缓存/
  5. DNS解析失败的处理 (支持IPv6)http://nszzy.me/2016/09/07/dns-resolving/
  6. DNS 劫持
  7. https://github.com/music4kid/PPDNSMapping
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • dnsmasq是什么我就不说了,请自行百度。 目前我需要使用的用途是:1.dhcp(分配一个或者多个内网ip地址)...
    dnaEMx阅读 16,479评论 0 6
  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc阅读 7,946评论 0 0
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,675评论 2 45
  • 今天妈妈下班后,上托辅去接我,我说:“妈妈老师说我脑子挺聪明的,就是粗心大意。”我说老师说的对,以后要认真学习,没...
    快乐宝贝_61b8阅读 1,092评论 0 0
  • 数九寒冬冷,萧萧瑞雪凉。卧龙盘朔北辽乡。 朝看彩云追鹤,夕有雁排江。 飒爽虹桥立,英姿万亩塘。远观冬捕鲑鱼香。 万...
    静铃音阅读 1,787评论 0 3