iOS HttpDNS实践

项目中用到了HTTPDNS,顺便把做的过程和遇到的流程记录下。
<h1>1、为啥要做HttpDNS?
<h6>对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”,导致访问错误内容,失败连接等。
HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求,绕开了运营商的Local DNS,从而避免了使用运营商Local DNS造成的劫持和跨网问题。具体可以看看鹅厂的这篇文章(<a href="http://mp.weixin.qq.com/s?__biz=MzA3ODgyNzcwMw==&mid=201837080&idx=1&sn=b2a152b84df1c7dbd294ea66037cf262&scene=2&from=timeline&isappinstalled=0&utm_source=tuicool"> 鹅厂DNS分析 </a>).
<h1>2、怎么做的?
<h6>我这边选用的腾讯云的移动解析HttpDNS,接入SDK,<a href="https://www.qcloud.com/document/product/379/6469">SDK链接</a>。注意在配置的时候要在info.plist配置Demo中给出的信息,等公司申请下来账号以后替换对应的key和id。

/**
 域名解析ip
 @param host 域名
 @return ip(优先使用ipv6),没解析到返回host
 */    
- (NSString *)dnsByDomain:(NSString *)domain {
    NSTimeInterval time1 = [[NSDate date] timeIntervalSince1970];
    NSArray *result = [[MSDKDns sharedInstance] WGGetHostByName:domain];
    NSTimeInterval time2 = [[NSDate date] timeIntervalSince1970];
    NSLog(@"HttpDNS 本次耗时:%f", (time2 - time1) * 1000);
    if (result && result.count > 1) {
        NSString *ipv4 = result[0];
        NSString *ipv6 = result[1];
        if (ipv6 && ipv6.length > 1) {
            NSLog(@"HttpDNS domain(%@),ip(%@)", domain, ipv6);
            return [NSString stringWithFormat:@"%@", ipv6];
        } else if (ipv4 && ipv4.length > 1) {
            NSLog(@"HttpDNS domain(%@),ip(%@)", domain, ipv4);
            return [NSString stringWithFormat:@"%@", ipv4];
    }
}

return nil;
}

<h4>其中比较重要的是如何拦截网络请求,把其中的域名换成对应的ip地址。
<h6>我在项目中,选用的是自定义NSURLProtocol的方法,对于不了解的同学可以在这个地方科普下<a href="http://www.jianshu.com/p/7c89b8c5482a"> NSURLProtocol 科普</a>。

<h1>3、遇到的问题
<h6>在前面两步做的都比较顺利,在把域名替换成ip访问网络的时候出现的问题:“返回此服务器的证书无效。您可能正在连接到一个伪装成“14.215.177.37”的服务器,这会威胁到您的机密信息的安全(14.215.177.37 是www.baidu.com的ip)。”
后来自信看了sdk文档,发现在Https建立连接的时候是需要验证证书的,<a href="https://www.qcloud.com/document/product/379/6471#ios.E9.83.A8.E5.88.86.E4.BB.A3.E7.A0.81"> Https场景处理</a>。

但是按照文档方法写了后还是不能访问,

/*
 * 评估当前serverTrust是否可信任,
 * 官方建议在result = kSecTrustResultUnspecified 或 kSecTrustResultProceed
 * 的情况下serverTrust可以被验证通过,https://developer.apple.com/library/ios/technotes/tn2232/_index.html
 * 关于SecTrustResultType的详细信息请参考SecTrust.h
 */
SecTrustResultType result;
SecTrustEvaluate(serverTrust, &result);

return (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed);

后来看了返回的错误信息,发现加上result == kSecTrustResultRecoverableTrustFailure就可以正常处理了。
<h5>关于证书信任
<h6>用户是否是自己主动设置信任的,比如有些弹窗,用户点击了信任
1.用户自定义的,成功是 kSecTrustResultProceed 失败是kSecTrustResultDeny
2.非用户定义的, 成功是kSecTrustResultUnspecified 失败是kSecTrustResultRecoverableTrustFailure
这个感觉是服务器的问题,还没有确定问题原因。
<a href="http://www.cnblogs.com/machao/p/5704201.html"> Https建立连接过程</a>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容