zoukankan      html  css  js  c++  java
  • iOS DNS防劫持一点记录

    DNS 概念:
    DNS 域名解析系统,解析成相应的服务器IP, DNS劫持是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名
    由于DNS请求报文是明文状态,可能在请求过程被监测,然后伪装DNS服务器发送带有假ip地址的响应报文,从而使主机访问假的服务器。

    LocalDNS
    LocalDNS 是常见ios本地的DNS解析方式,不依赖http请求 , 在网络发起请求时,通过NSURLProtocol 拦截请求域名 进行本地解析 获得 Ip 地址 , 实际开发中可使用HttpDNS解析域名获得IP地址,也可以自己设置ip池。

    NSURLProtocol
    上面提到 NSURLProtocol 是网络拦截的关键,可通过子类化来定义新的或已存在的URL加载行为 如:
    . 拦截加载请求,返回特定数据
    .对发出请求的header进行格式化
    .过滤请求和返回中的敏感信息
    因为项目需要拦截wkwebview 加载,通过ip直连的方式防止DNS劫持,首先hook wkwebview 注册 NSURLProtocol子类

    + (void)wk_registerScheme:(NSString *)scheme {
        Class cls = NSClassFromString(@"WKBrowsingContextController");
        SEL sel = NSSelectorFromString(@"registerSchemeForCustomProtocol:");
        if ([cls respondsToSelector:sel]) {
            // 放弃编辑器警告
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [cls performSelector:sel withObject:scheme];
    #pragma clang diagnostic pop
        }
    }
    
    + (void)wk_unregisterScheme:(NSString *)scheme {
        Class cls = NSClassFromString(@"WKBrowsingContextController");
        SEL sel = NSSelectorFromString(@"unregisterSchemeForCustomProtocol:");
        if ([cls respondsToSelector:sel]) {
            // 放弃编辑器警告
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [cls performSelector:sel withObject:scheme];
    #pragma clang diagnostic pop
        }
    }

    具体NSURLProtocol子类实现请看Dmeo

    参考: NSURLProtocol

  • 相关阅读:
    洛谷 1498 南蛮图腾——模拟
    bzoj 4198 [Noi2015]荷马史诗——哈夫曼树
    bzoj 1026 [SCOI2009]windy数——数位dp水题
    bzoj 1045 [HAOI2008] 糖果传递——设变量推式子
    bzoj 4521 [Cqoi2016]手机号码——数位dp
    bzoj1044 [HAOI2008]木棍分割——前缀和优化DP
    bzoj1090 [SCOI2003]字符串折叠——区间DP
    bzoj1911 [Apio2010]特别行动队——斜率优化DP
    bzoj1025 [SCOI2009]游戏——因数DP
    bzoj1207 [HNOI2004]打鼹鼠——LIS
  • 原文地址:https://www.cnblogs.com/air-liyan/p/13994990.html
Copyright © 2011-2022 走看看