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

  • 相关阅读:
    tzoj5855: 数据结构实验:最短路(SPFA)
    tzoj5779 最短路(SPFA模板)
    洛谷P3375 【模板】KMP字符串匹配(KMP)
    poj2533 The Bottom of a Graph(Tarjan+缩点)
    poj1236 Network of Schools(Tarjan+缩点)
    危险道路(Tarjan+割边/桥)
    前端开发中的浏览器兼容性问题总结
    递归应用示例
    统计单词数
    找素数的两种方法
  • 原文地址:https://www.cnblogs.com/air-liyan/p/13994990.html
Copyright © 2011-2022 走看看