为什么Google不返回我的搜索结果(无状态TCP连接重置)

1、Great Firewall

它的存在会对境外涉及敏感内容的网站、IP地址、关键词、网址等进行过滤

结果就是:国内网络用户无法访问某些国外网站,国外网络用户也无法访问某些国内网站,其中有可以分成2类

  • 永久性无法访问
  • 暂时性无法访问

2、主要技术

  • 域名劫持
  • 特定IP地址封锁
  • 特定IP地址端口封锁
  • 无状态TCP连接重置
  • 特定TLS证书阻断
  • 明文HTTP协议关键字过滤阻断
  • 对破网软件的反制

本文主要介绍无状态TCP连接重置

3、DNS小测试

引入:客户端如何获得Baidu, Bing, Google服务器的IP地址?

打开浏览器,输入网址http://baidu.com/,从wireshark抓包工具抓到以下数据包:

174号数据包源IP地址为172.18.237.245为本机IP地址,通过查询,发现174号和175号数据包的目的地址202.192.18.1和202.192.18.2为DNS服务器地址,结果如下:

178号数据包为本地DNS服务器发回的数据包,它告诉客户端baidu.com的IP地址为111.13.100.91,

而180号数据包则发回一个ICMP数据包表示目的地址不可达。

打开浏览器,输入网址http://bing.com/,从wireshark抓包工具抓到以下数据包:

可以发现326号数据包为DNS请求数据包,它向本地DNS服务器请求bing.com的IP地址,而327号数据包则是本地DNS服务器发回的响应数据包,它告诉客户端bing.com的IP地址为204.79.197.200。

打开浏览器,输入网址http://google.com/,从wireshark抓包工具抓到以下数据包:

可以发现195号数据包为DNS请求数据包,它向本地DNS服务器请求google.com的IP地址,而196号数据包则是本地DNS服务器发回的响应数据包,它告诉客户端google.com的IP地址为216.58.200.238。

通过以上测试,可以发现:客户端是通过发送域名给DNS服务器来获得网站服务器的IP地址的。

4、TCP连接的过程

接下来研究一下客户端实现Baidu, Bing, Google服务器的TCP连接的过程

在连接baidu.com的过程中捕获以下分组:

观察181、184、185号数据包,它们两端的端口号是分别是20564→80、80→20564、20564→80,发送的报文刚好符合TCP连接的三次握手,具体过程为:

(1)、客户端进程向服务器发送SYN报文段(SYN=1的报文段)请求建立连接;

(2)、服务器收到请求后,如果同意建立连接,就向客户端发送确认报文;

(3)、客户端接收到服务器的确认后,再次向服务器发送确认报文;

(4)、服务器接收到客户端的确认后,TCP连接建立,双方可以相互发送数据。

而连接bing.com和google.com的过程与此相同,捕获的数据包如下:

TCP三次握手对应328、332、333号数据包

TCP三次握手对应449、454、455号数据包

5、无状态TCP连接重置

什么技术导致Google不返回搜索结果?

GFW监控特定IP地址的所有数据包,若发现匹配的黑名单动作(例如 TLS加密连接的握手),其会直接在TCP连接握手的第二步即SYN-ACK之后伪装成对方向连接两端的计算机发送RST包(RESET)重置连接,使用户无法正常连接服务器。这种方法和特定IP地址端口封锁时直接丢弃数据包不一样,因为是直接切断双方连接因此封锁成本很低,故对于Google的多项(强制)加密服务例如Google文件、Google网上论坛、Google+和Google个人资料等的TLS加密连接都是采取这种方法予以封锁

6、可能发出人造RST包的IP地址及其所属ISP

发出去的数据包ttl=64,Google返回值为50

ttl=53的Reset包?

64-53=11跳左右

而跟踪google.com的结果如下:

第11跳地址为 223.119.30.130

理论上发出的人造RST包来自这或之前的节点,该节点可以监视所有出口的流量!

7 、那有可能使Google返回搜索结果吗?

^-^

END

原文地址:https://www.cnblogs.com/chuanzi/p/10424991.html

时间: 2024-10-15 00:42:30

为什么Google不返回我的搜索结果(无状态TCP连接重置)的相关文章

EditText把返回键变成搜索

在xml文件中的EditText中添加 android:imeOptions="actionSearch" 属性 代码中这样写 et_main_search.setOnKeyListener(new OnKeyListener() {//输入完后按键盘上的搜索键[回车键改为了搜索键] public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_ENTER){//修改回车

Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭

AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个对话框也能关闭. 怎样才能实现一个类似在windows系统上的对话框,必须点对话框上的按钮后,才能关闭这个对话框. 下面是具体代码: AlertDialog.Builder builder = new Builder(this);  builder.setMessage(msg);  builder

Springboot 构建http服务,返回的http行是'HTTP/1.1 200' 无状态码描述 客户端解析错误

----------------------------------------- *** 响应的数据格式 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Accept-Ranges: bytes ETag: W/"27-1432777730225" Last-Modified: Thu, 28 May 2015 01:48:50 GMT Content-Type: text/html Content-Length: 27 Date: Thu, 28

C#控制台基础 返回类型为void的无参数委托与匿名方法

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 //返回类型为void的无参数委托 10 public delegate void MyFirst(); 11 class Program 12 { 13

Android总结 - Activity任务和返回栈、保存Activity的状态

任务和返回栈 一个应用程序当中通常都会包含很多个Activity,每个Activity都应该设计成为一个具有特定的功能,并且可以让用户进行操作的组件.另外,Activity之间还应该是可以相互启动的.比如,一个邮件应用中可能会包含一个用于展示邮件列表的Activity,而当用户点击了其中某一封邮件的时候,就会打开另外一个Activity来显示该封邮件的具体内容. 除此之外,一个Activity甚至还可以去启动其它应用程序当中的Activity.打个比方,如果你的应用希望去发送一封邮件,你就可以定

Google和Baidu常用的搜索技巧--转

原文链接:http://mp.weixin.qq.com/s?__biz=MjM5NTY0MTY1OQ==&mid=2654509772&idx=1&sn=754454e3740070236fa7b05fb474010b&chksm=bd395a988a4ed38e436eade5d7ac7bdafa8aa4062b5ea1cc0cb28cfeb18b228a992ae518f65c&scene=0#wechat_redirect 学计算机的,在学习的过程中,肯定会

Google 和 Baidu 常用的搜索技巧

Google 常用的搜索技巧 1. 精确搜索:双引号 精确搜索,就是在你要搜索的词上,加上双引号,这个Google搜索引擎,就会完全的匹配你所要的词 2. 站内搜索:site 这是一个比较常用的搜索方法,site 搜索,就是在站内进行搜索,语法是:site:http://stackoverflow.com/ 中 site:后面加上你要搜索的网站地址.一般程序猿解决问题,用site:http://stackoverflow.com/,大部分解决不了的问题,都会有答案了. 再举个比较贴近生活的例子,

Android中AlertDialog对话框禁止按[返回键]或[搜索键]

alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH) { return true; } else { return false; // 默认返回 false } } })

cxf返回的报文,命名空间无前缀

cxf框架做的服务端接收请求并响应. <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"> <soap:Body xmlns="http://www.example.org/stock"> <GetStockPriceResponse> <Price>34.5&