1. 程式人生 > >為什麽Google不返回我的搜索結果(無狀態TCP連接重置)

為什麽Google不返回我的搜索結果(無狀態TCP連接重置)

計算 分別是 http協議 證書 idt 請求 成本 set 域名劫持

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

為什麽Google不返回我的搜索結果(無狀態TCP連接重置)