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

  • 相关阅读:
    git
    HTML5 新增语义化标签
    vue directive 常用指令
    JS 数组 数组迭代方法 map, forEach, filter, some, every,
    图片居中
    进度条
    移动页面 REM自适应
    轮播图基本样式
    webpack3.0
    关于码云中项目提交的问题
  • 原文地址:https://www.cnblogs.com/air-liyan/p/13994990.html
Copyright © 2011-2022 走看看