前言

在客户端进行业务接口请求时,往往会在线上出现解析JSON响应内容失败而导致的应用崩溃,但是在实际开发测试过程中却没有遇到此问题。解决办法就是对JSON解析进行异常捕获,然后将实际响应内容上报到服务端,从而查看具体问题。对上报到服务端的实际响应内容进行分析后,发现响应内容变成各种HTML文本,以下是常见的几种:

1、安全DNS服务门户:Fortinet Secure DNS Service Portal<html><head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" /> <title>Fortinet Secure DNS Service Portal</title> </head> <body> <center> <h2>Web Page Blocked!</h2> You have tried to access a web page which belongs to a category that is blocked. </center>  </body>
</html>2、安全软件重定向:SHP Redirector<html><head> <title>SHP Redirector</title> <meta charset="UTF-8" /> <meta name="description" content="SHP Redirector" /> <script type="text/javascript" src="http://shgw.router:8080/ids.js"></script> <script src="http://blockpg.lion.shp.mcafee.com/blockpage/third-party/jquery-3.3.1.min.js"></script> <script src="http://blockpg.lion.shp.mcafee.com/blockpage/js/redirector1.1.js"></script> </head> <body> <div id="settings" blockpage="http://blockpg.lion.shp.mcafee.com/blockpage/?" server="xxx.xxx.xxx">  </div></body>
</html>3、运营商广告劫持:<html><head><meta charset="big5" /><title></title><style><!-- A{text-decoration:none} --></style><script src="/redirect/js/jquery-1.6.2.min.js"></script><script>function btnSub(btnId){ $("#accept_redirect").append("<input type='hidden' name='btnId' value="+btnId+" />"); $("#accept_redirect").submit(); } $(document).ready(function() { $(window).bind("beforeunload", function() { $("form").submit(); }); });  </script></head><body><div align="center"><form id="accept_redirect" name="accept_redirect" method="post" action="php_bin/recovery_sub.php"><div><input type="hidden" name="url" value="" /><input type="hidden" name="system" value="NX" /><input type="hidden" name="so" value="PHC" /><input type="hidden" name="flag" value="1" /><input onclick="btnSub(1);" value="线上支付" type="button" style="font-size:16px;height:6%;width:30%; margin : 80px;margin-bottom : 5px;margin-top : 5px;" /><input type="hidden" value="https://www.twmbroadband.com/T01/service-online-payment_5_1062_1113.html" name="url1" id="url1" /><input onclick="btnSub(2);" value="我已阅读过本页面" type="button" style="font-size:16px;height:6%;width:30%; margin : 80px;margin-bottom : 5px;margin-top : 5px;" /></div><div><img src="/redirect/images/P01_PC_pc.jpg" style="height: 80%;width: 80%; margin : 5px;" /></div><div></div></form></div></body>
</html>

以上几种均是DNS劫持导致的结果,想知道DNS是如何被劫持的,需要先理解DNS域名是如何解析的,当用户在浏览器地址栏输入域名时,DNS解析有大致十个过程:

1、浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。

2、如果浏览器缓存中没有,浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程,即通过hosts文件来设置,如果在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。

3、如果至此还没有命中域名,才会真正地请求本地域名服务器(LDNS)来解析这个域名。

4、如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析。

5、根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址。

6、此时LDNS再发送请求给上一步返回的gTLD。

7、接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器。

8、Name Server根据映射关系表找到目标ip,返回给LDNS。

9、LDNS缓存这个域名和对应的ip。

10、 LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。

缓存是DNS被劫持的根本原因,在DNS解析过程的各个缓存中均有可能被劫持。主要包括本机的hosts篡改劫持,和运营商的Local DNS劫持等。HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求。也就是使用Http协议去进行DNS解析请求,将服务器返回的解析结果,直接向该IP发起对应的API服务请求,代替使用域名,域名解析请求直接发送到HTTPDNS服务器,绕过运营商Local DNS,避免域名劫持问题。HTTPDNS在阿里云和腾讯云服务器均有支持,大家可以在其官网中查看。

Android中DNS域名劫持问题-解决方案相关推荐

  1. 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等

    1.引言 对于互联网,域名是访问的第一跳,而这一跳很多时候会"失足"(尤其是移动端网络),导致访问错误内容.失败连接等,让用户在互联网上畅游的爽快瞬间消失. 而对于这关键的第一跳, ...

  2. 【转载】全面了解移动端DNS域名劫持等杂症

    原文链接:http://www.52im.net/thread-2121-1-1.html 0 前言 之前在公司的项目中,引入了HttpDNS,但是有很多同事对HttpDNS的原理不是很了解,之前分享 ...

  3. 如何使用OpenDNS有效解决DNS域名劫持?

    如何使用OpenDNS解决DNS域名劫持?很多用户都有遇到过DNS域名被劫持的情况,遇到域名被劫持,最好的解决办法就是使用国外更为安全可靠的DNS服务器,这里小编推荐大家使用OpenDNS提供的DNS ...

  4. 网络安全:、dns被劫持怎么解决DNS域名劫持的几种解决方法

    dns的快慢与稳定与否,关系着浏览时的正常;更有甚者,dns的健康与否,更会直接影响各个拨号客户端的健康. 现在国内上网的用户,大多家用的都是用的网通或者电信的adsl,这中间还分各省地区的拨号服务器 ...

  5. Linux:设置/修改linux主机名+hosts映射+主机名解析机制分析+DNS域名劫持

    设置/修改主机名 查看主机名hostname,修改主机名(在vim编译器里修改),重启命令(reboot),操作如下: 结果如下: 设置hosts映射: 操作意义:ip地址很长,不好记忆,直接记忆主机 ...

  6. android 自定义dns解析器,Android中DNS解析

    当服务端IP变化,大量用户还是访问的以前的IP,连接不上服务器. 我们的客户端软件如何通过域名正确访问服务器?这里面主要涉及到DNS缓存的问题. 什么是DNS? DNS 是域名系统 (Domain N ...

  7. DNS域名劫持的几种解决方法

    现在国内上网的用户,大多家用的都是用的网通或者电信的adsl,这中间还分各省地区的拨号服务器,dns(Domain Name System)就成了上网时,很关键的一环,dns的快慢与稳定与否,关系着浏 ...

  8. 使用OpenDNS解决DNS域名劫持

    对于这次遇到的大规模域名劫持到百度网站的情况,有一个很简单的办法进行解决,就是使用国外更为安全可靠的DNS服务器进行域名解析,可以避免被本地电信或网通进行域名劫持. 我推荐大家使用OpenDNS提供的 ...

  9. linux dns劫持转发,linux的dns被劫持(解决方案)

    如何解决linux dns被劫持? 1.首先如何确定是否被劫持: 那么查询一个并不存在的域名 nslookup mmmmm.happy 如果返回了一个ip地址,说明dns被劫持了,假设此ip地址为:1 ...

最新文章

  1. Flutter 中 stateless 和 stateful widget 的区别[Flutter专题60]
  2. 开启win7 FTP 服务 无法登陆的原因
  3. 【Tools】Wireshark3.0安装教程详解
  4. 获取当前鼠标的位置以及组件的位置
  5. Redis连接池Lettuce Jedis 区别
  6. 面向对象 “上”
  7. 【转】编辑器与IDE
  8. 2020年最新中科院期刊分区表
  9. 本地已有项目上传到码云
  10. qq钱包php开发文档,QQ轻应用
  11. 怎么调用微信自带的收货地址和我的地址功能页面。
  12. S3C2440-裸机篇-06 | UART数据发送接收实验(扫描模式)
  13. 大白话讲解决策树【案例】:如何区分西方人和东方人
  14. three.js例子
  15. 使PC端网页宽度自适应手机屏幕大小
  16. Springboot毕设项目理财管理系统mnl7cjava+VUE+Mybatis+Maven+Mysql+sprnig)
  17. 实现电路阻抗匹配的两个方法
  18. 测试工程师简历编写指南
  19. 教师资格证幼儿园试卷结构
  20. 带有三条均线的Tick成交量指标

热门文章

  1. 零基础入门学Python(十二)—— 魔法方法(下)
  2. 中国人民银行面试题目(经典题目2)
  3. 固定资产条码管理解决方案
  4. 多御浏览器新出的手机版本有什么功能?
  5. Excel从身份证提取出生年月的几种方法
  6. P1395 会议 题解
  7. 查看本机mac地址/ ipconfig /all 的一点笔记
  8. android6.0在状态栏添加一键截屏
  9. 一起赚美元⑥ | 创立Discourse开源论坛软件每月赚取12万美元的故事
  10. 目标检测 YOLO系列算法