iOS HttpDNS實(shí)踐

項(xiàng)目中用到了HTTPDNS误甚,順便把做的過(guò)程和遇到的流程記錄下。
<h1>1谱净、為啥要做HttpDNS窑邦?
<h6>對(duì)于互聯(lián)網(wǎng),域名是訪問(wèn)的第一跳壕探,而這一跳很多時(shí)候會(huì)“失足”奕翔,導(dǎo)致訪問(wèn)錯(cuò)誤內(nèi)容,失敗連接等浩蓉。
HttpDNS是使用HTTP協(xié)議向DNS服務(wù)器的80端口進(jìn)行請(qǐng)求派继,代替?zhèn)鹘y(tǒng)的DNS協(xié)議向DNS服務(wù)器的53端口進(jìn)行請(qǐng)求,繞開(kāi)了運(yùn)營(yíng)商的Local DNS,從而避免了使用運(yùn)營(yíng)商Local DNS造成的劫持和跨網(wǎng)問(wèn)題捻艳。具體可以看看鵝廠的這篇文章(<a > 鵝廠DNS分析 </a>).
<h1>2驾窟、怎么做的?
<h6>我這邊選用的騰訊云的移動(dòng)解析HttpDNS认轨,接入SDK绅络,<a >SDK鏈接</a>。注意在配置的時(shí)候要在info.plist配置Demo中給出的信息嘁字,等公司申請(qǐng)下來(lái)賬號(hào)以后替換對(duì)應(yīng)的key和id恩急。

/**
 域名解析ip
 @param host 域名
 @return ip(優(yōu)先使用ipv6),沒(méi)解析到返回host
 */    
- (NSString *)dnsByDomain:(NSString *)domain {
    NSTimeInterval time1 = [[NSDate date] timeIntervalSince1970];
    NSArray *result = [[MSDKDns sharedInstance] WGGetHostByName:domain];
    NSTimeInterval time2 = [[NSDate date] timeIntervalSince1970];
    NSLog(@"HttpDNS 本次耗時(shí):%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>其中比較重要的是如何攔截網(wǎng)絡(luò)請(qǐng)求纪蜒,把其中的域名換成對(duì)應(yīng)的ip地址衷恭。
<h6>我在項(xiàng)目中,選用的是自定義NSURLProtocol的方法纯续,對(duì)于不了解的同學(xué)可以在這個(gè)地方科普下<a href="http://www.reibang.com/p/7c89b8c5482a"> NSURLProtocol 科普</a>随珠。

<h1>3、遇到的問(wèn)題
<h6>在前面兩步做的都比較順利猬错,在把域名替換成ip訪問(wèn)網(wǎng)絡(luò)的時(shí)候出現(xiàn)的問(wèn)題:“返回此服務(wù)器的證書(shū)無(wú)效窗看。您可能正在連接到一個(gè)偽裝成“14.215.177.37”的服務(wù)器,這會(huì)威脅到您的機(jī)密信息的安全(14.215.177.37 是www.baidu.com的ip)倦炒∠陨颍”
后來(lái)自信看了sdk文檔,發(fā)現(xiàn)在Https建立連接的時(shí)候是需要驗(yàn)證證書(shū)的逢唤,<a > Https場(chǎng)景處理</a>拉讯。

但是按照文檔方法寫(xiě)了后還是不能訪問(wèn),

/*
 * 評(píng)估當(dāng)前serverTrust是否可信任智玻,
 * 官方建議在result = kSecTrustResultUnspecified 或 kSecTrustResultProceed
 * 的情況下serverTrust可以被驗(yàn)證通過(guò)遂唧,https://developer.apple.com/library/ios/technotes/tn2232/_index.html
 * 關(guān)于SecTrustResultType的詳細(xì)信息請(qǐng)參考SecTrust.h
 */
SecTrustResultType result;
SecTrustEvaluate(serverTrust, &result);

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

后來(lái)看了返回的錯(cuò)誤信息,發(fā)現(xiàn)加上result == kSecTrustResultRecoverableTrustFailure就可以正常處理了吊奢。
<h5>關(guān)于證書(shū)信任
<h6>用戶是否是自己主動(dòng)設(shè)置信任的盖彭,比如有些彈窗,用戶點(diǎn)擊了信任
1.用戶自定義的页滚,成功是 kSecTrustResultProceed 失敗是kSecTrustResultDeny
2.非用戶定義的召边, 成功是kSecTrustResultUnspecified 失敗是kSecTrustResultRecoverableTrustFailure
這個(gè)感覺(jué)是服務(wù)器的問(wèn)題,還沒(méi)有確定問(wèn)題原因裹驰。
<a > Https建立連接過(guò)程</a>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隧熙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子幻林,更是在濱河造成了極大的恐慌贞盯,老刑警劉巖音念,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異躏敢,居然都是意外死亡闷愤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)件余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讥脐,“玉大人,你說(shuō)我怎么就攤上這事啼器⊙” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵端壳,是天一觀的道長(zhǎng)告丢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)更哄,這世上最難降的妖魔是什么芋齿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮成翩,結(jié)果婚禮上觅捆,老公的妹妹穿的比我還像新娘。我一直安慰自己麻敌,他們只是感情好栅炒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著术羔,像睡著了一般赢赊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上级历,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天释移,我揣著相機(jī)與錄音,去河邊找鬼寥殖。 笑死玩讳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚼贡。 我是一名探鬼主播熏纯,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粤策!你這毒婦竟也來(lái)了樟澜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秩贰,沒(méi)想到半個(gè)月后霹俺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萍膛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年吭服,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝗罗。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蝌戒,靈堂內(nèi)的尸體忽然破棺而出串塑,到底是詐尸還是另有隱情,我是刑警寧澤北苟,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布桩匪,位于F島的核電站,受9級(jí)特大地震影響友鼻,放射性物質(zhì)發(fā)生泄漏傻昙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一彩扔、第九天 我趴在偏房一處隱蔽的房頂上張望妆档。 院中可真熱鬧,春花似錦虫碉、人聲如沸贾惦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)须板。三九已至,卻和暖如春兢卵,著一層夾襖步出監(jiān)牢的瞬間习瑰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工秽荤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甜奄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓王滤,卻偏偏與公主長(zhǎng)得像贺嫂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雁乡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容