精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HTTP 代理原理及實現(一)

網絡 網絡管理
Web 代理是一種存在于網絡中間的實體,提供各式各樣的功能。現代網絡系統中,Web 代理無處不在。我之前有關 HTTP 的博文中,多次提到了代理對 HTTP 請求及響應的影響。今天這篇文章,我打算談談 HTTP 代理本身的一些原理,以及如何用 Node.js 快速實現代理。

Web 代理是一種存在于網絡中間的實體,提供各式各樣的功能?,F代網絡系統中,Web 代理無處不在。我之前有關 HTTP 的博文中,多次提到了代理對 HTTP 請求及響應的影響。今天這篇文章,我打算談談 HTTP 代理本身的一些原理,以及如何用 Node.js 快速實現代理。

HTTP 代理存在兩種形式,分別簡單介紹如下:

***種是 RFC 7230 - HTTP/1.1: Message Syntax and Routing(即修訂后的 RFC 2616,HTTP/1.1 協議的***部分)描述的普通代理。這種代理扮演的是「中間人」角色,對于連接到它的客戶端來說,它是服務端;對于要連接的服務端來說,它是客戶端。它就負責在兩端之間來回傳送 HTTP 報文。

第二種是 Tunneling TCP based protocols through Web proxy servers(通過 Web 代理服務器用隧道方式傳輸基于 TCP 的協議)描述的隧道代理。它通過 HTTP 協議正文部分(Body)完成通訊,以 HTTP 的方式實現任意基于 TCP 的應用層協議代理。這種代理使用 HTTP 的 CONNECT 方法建立連接,但 CONNECT 最開始并不是 RFC 2616 - HTTP/1.1 的一部分,直到 2014 年發布的 HTTP/1.1 修訂版中,才增加了對 CONNECT 及隧道代理的描述,詳見 RFC 7231 - HTTP/1.1: Semantics and Content。實際上這種代理早就被廣泛實現。

本文描述的***種代理,對應《HTTP 權威指南》一書中第六章「代理」;第二種代理,對應第八章「集成點:網關、隧道及中繼」中的 8.5 小節「隧道」。

普通代理

***種 Web 代理原理特別簡單:

HTTP 客戶端向代理發送請求報文,代理服務器需要正確地處理請求和連接(例如正確處理 Connection: keep-alive),同時向服務器發送請求,并將收到的響應轉發給客戶端。

下面這張圖片來自于《HTTP 權威指南》,直觀地展示了上述行為:

 [[157909]]

假如我通過代理訪問 A 網站,對于 A 來說,它會把代理當做客戶端,完全察覺不到真正客戶端的存在,這實現了隱藏客戶端 IP 的目的。當然代理也可以修改 HTTP 請求頭部,通過 X-Forwarded-IP 這樣的自定義頭部告訴服務端真正的客戶端 IP。但服務器無法驗證這個自定義頭部真的是由代理添加,還是客戶端修改了請求頭,所以從 HTTP 頭部字段獲取 IP 時,需要格外小心。

給瀏覽器顯式的指定代理,需要手動修改瀏覽器或操作系統相關設置,或者指定 PAC(Proxy Auto-Configuration,自動配置代理)文件自動設置,還有些瀏覽器支持 WPAD(Web Proxy Autodiscovery Protocol,Web 代理自動發現協議)。顯式指定瀏覽器代理這種方式一般稱之為正向代理,瀏覽器啟用正向代理后,會對 HTTP 請求報文做一些修改,來規避老舊代理服務器的一些問題。

還有一種情況是訪問 A 網站時,實際上訪問的是代理,代理收到請求報文后,再向真正提供服務的服務器發起請求,并將響應轉發給瀏覽器。這種情況一般被稱之為反向代理,它可以用來隱藏服務器 IP 及端口。一般使用反向代理后,需要通過修改 DNS 讓域名解析到代理服務器 IP,這時瀏覽器無法察覺到真正服務器的存在,當然也就不需要修改配置了。反向代理是 Web 系統最為常見的一種部署方式,例如本博客就是使用 Nginx 的proxy_pass 功能將瀏覽器請求轉發到背后的 Node.js 服務。

了解完***種代理的基本原理后,我們用 Node.js 實現一下它。只包含核心邏輯的代碼如下:

  1. var http = require('http'); 
  2. var net = require('net'); 
  3. var url = require('url'); 
  4.  
  5. function request(cReq, cRes) { 
  6.     var u = url.parse(cReq.url); 
  7.  
  8.     var options = { 
  9.         hostname : u.hostname,  
  10.         port     : u.port || 80, 
  11.         path     : u.path,        
  12.         method     : cReq.method, 
  13.         headers     : cReq.headers 
  14.     }; 
  15.  
  16.     var pReq = http.request(options, function(pRes) { 
  17.         cRes.writeHead(pRes.statusCode, pRes.headers); 
  18.         pRes.pipe(cRes); 
  19.     }).on('error'function(e) { 
  20.         cRes.end(); 
  21.     }); 
  22.  
  23.     cReq.pipe(pReq); 
  24.  
  25. http.createServer().on('request', request).listen(8888, '0.0.0.0'); 

以上代碼運行后,會在本地 8888 端口開啟 HTTP 代理服務,這個服務從請求報文中解析出請求 URL 和其他必要參數,新建到服務端的請求,并把代理收到的請求轉發給新建的請求,***再把服務端響應返回給瀏覽器。修改瀏覽器的 HTTP 代理為 127.0.0.1:8888 后再訪問 HTTP 網站,代理可以正常工作。

但是,使用我們這個代理服務后,HTTPS 網站完全無法訪問,這是為什么呢?答案很簡單,這個代理提供的是 HTTP 服務,根本沒辦法承載 HTTPS 服務。那么是否把這個代理改為 HTTPS 就可以了呢?顯然也不可以,因為這種代理的本質是中間人,而 HTTPS 網站的證書認證機制是中間人劫持的克星。普通的 HTTPS 服務中,服務端不驗證客戶端的證書,中間人可以作為客戶端與服務端成功完成 TLS 握手;但是中間人沒有證書私鑰,無論如何也無法偽造成服務端跟客戶端建立 TLS 連接。當然如果你擁有證書私鑰,代理證書對應的 HTTPS 網站當然就沒問題了。

HTTP 抓包神器 Fiddler 的工作原理也是在本地開啟 HTTP 代理服務,通過讓瀏覽器流量走這個代理,從而實現顯示和修改 HTTP 包的功能。如果要讓 Fiddler 解密 HTTPS 包的內容,需要先將它自帶的根證書導入到系統受信任的根證書列表中。一旦完成這一步,瀏覽器就會信任 Fiddler 后續的「偽造證書」,從而在瀏覽器和 Fiddler、Fiddler 和服務端之間都能成功建立 TLS 連接。而對于 Fiddler 這個節點來說,兩端的 TLS 流量都是可以解密的。

如果我們不導入根證書,Fiddler 的 HTTP 代理還能代理 HTTPS 流量么?實踐證明,不導入根證書,Fiddler 只是無法解密 HTTPS 流量,HTTPS 網站還是可以正常訪問。這是如何做到的,這些 HTTPS 流量是否安全呢?這些問題將在下一節揭曉。

隧道代理

第二種 Web 代理的原理也很簡單:

HTTP 客戶端通過 CONNECT 方法請求隧道代理創建一條到達任意目的服務器和端口的 TCP 連接,并對客戶端和服務器之間的后繼數據進行盲轉發。

下面這張圖片同樣來自于《HTTP 權威指南》,直觀地展示了上述行為:

 [[157910]]

假如我通過代理訪問 A 網站,瀏覽器首先通過 CONNECT 請求,讓代理創建一條到 A 網站的 TCP 連接;一旦 TCP 連接建好,代理無腦轉發后續流量即可。所以這種代理,理論上適用于任意基于 TCP 的應用層協議,HTTPS 網站使用的 TLS 協議當然也可以。這也是這種代理為什么被稱為隧道的原因。對于 HTTPS 來說,客戶端透過代理直接跟服務端進行 TLS 握手協商密鑰,所以依然是安全的,下圖中的抓包信息顯示了這種場景:

 [[157911]]

可以看到,瀏覽器與代理進行 TCP 握手之后,發起了 CONNECT 請求,報文起始行如下:

  1. CONNECT imququ.com:443 HTTP/1.1 

對于 CONNECT 請求來說,只是用來讓代理創建 TCP 連接,所以只需要提供服務器域名及端口即可,并不需要具體的資源路徑。代理收到這樣的請求后,需要與服務端建立 TCP 連接,并響應給瀏覽器這樣一個 HTTP 報文:

  1. HTTP/1.1 200 Connection Established 

瀏覽器收到了這個響應報文,就可以認為到服務端的 TCP 連接已經打通,后續直接往這個 TCP 連接寫協議數據即可。通過 Wireshark 的 Follow TCP Steam 功能,可以清楚地看到瀏覽器和代理之間的數據傳遞:

 [[157912]]

可以看到,瀏覽器建立到服務端 TCP 連接產生的 HTTP 往返,完全是明文,這也是為什么 CONNECT 請求只需要提供域名和端口:如果發送了完整 URL、Cookie 等信息,會被中間人一覽無余,降低了 HTTPS 的安全性。HTTP 代理承載的 HTTPS 流量,應用數據要等到 TLS 握手成功之后通過 Application Data 協議傳輸,中間節點無法得知用于流量加密的 master-secret,無法解密數據。而 CONNECT 暴露的域名和端口,對于普通的 HTTPS 請求來說,中間人一樣可以拿到(IP 和端口很容易拿到,請求的域名可以通過 DNS Query 或者 TLS Client Hello 中的 Server Name Indication 拿到),所以這種方式并沒有增加不安全性。

#p#

了解完原理后,再用 Node.js 實現一個支持 CONNECT 的代理也很簡單。核心代碼如下:

  1. JSvar http = require('http'); 
  2.  
  3. var net = require('net'); 
  4.  
  5. var url = require('url'); 
  6.  
  7. function connect(cReq, cSock) { 
  8.  
  9. var u = url.parse('http://' + cReq.url); 
  10.  
  11. var pSock = net.connect(u.port, u.hostname, function() { 
  12.  
  13. cSock.write('HTTP/1.1 200 Connection Established\r\n\r\n'); 
  14.  
  15. pSock.pipe(cSock); 
  16.  
  17. }).on('error'function(e) { 
  18.  
  19. cSock.end(); 
  20.  
  21. }); 
  22.  
  23. cSock.pipe(pSock); 
  24.  
  25.  
  26. http.createServer().on('connect', connect).listen(8888, '0.0.0.0'); 

以上代碼運行后,會在本地 8888 端口開啟 HTTP 代理服務,這個服務從 CONNECT 請求報文中解析出域名和端口,創建到服務端的 TCP 連接,并和 CONNECT 請求中的 TCP 連接串起來,***再響應一個 Connection Established 響應。修改瀏覽器的 HTTP 代理為 127.0.0.1:8888 后再訪問 HTTPS 網站,代理可以正常工作。

***,將兩種代理的實現代碼合二為一,就可以得到全功能的 Proxy 程序了,全部代碼在 50 行以內(當然異常什么的基本沒考慮,這是我博客代碼的一貫風格):

  1. JSvar http = require('http'); 
  2.  
  3. var net = require('net'); 
  4.  
  5. var url = require('url'); 
  6.  
  7. function request(cReq, cRes) { 
  8.  
  9. var u = url.parse(cReq.url); 
  10.  
  11. var options = { 
  12.  
  13. hostname : u.hostname, 
  14.  
  15. port : u.port || 80, 
  16.  
  17. path : u.path, 
  18.  
  19. method : cReq.method, 
  20.  
  21. headers : cReq.headers 
  22.  
  23. }; 
  24.  
  25. var pReq = http.request(options, function(pRes) { 
  26.  
  27. cRes.writeHead(pRes.statusCode, pRes.headers); 
  28.  
  29. pRes.pipe(cRes); 
  30.  
  31. }).on('error'function(e) { 
  32.  
  33. cRes.end(); 
  34.  
  35. }); 
  36.  
  37. cReq.pipe(pReq); 
  38.  
  39.  
  40. function connect(cReq, cSock) { 
  41.  
  42. var u = url.parse('http://' + cReq.url); 
  43.  
  44. var pSock = net.connect(u.port, u.hostname, function() { 
  45.  
  46. cSock.write('HTTP/1.1 200 Connection Established\r\n\r\n'); 
  47.  
  48. pSock.pipe(cSock); 
  49.  
  50. }).on('error'function(e) { 
  51.  
  52. cSock.end(); 
  53.  
  54. }); 
  55.  
  56. cSock.pipe(pSock); 
  57.  
  58.  
  59. http.createServer() 
  60.  
  61. .on('request', request) 
  62.  
  63. .on('connect', connect) 
  64.  
  65. .listen(8888, '0.0.0.0'); 

需要注意的是,大部分瀏覽器顯式配置了代理之后,只會讓 HTTPS 網站走隧道代理,這是因為建立隧道需要耗費一次往返,能不用就盡量不用。但這并不代表 HTTP 請求不能走隧道代理,我們用 Node.js 寫段程序驗證下(先運行前面的代理服務):

  1. JSvar http = require('http'); 
  2.  
  3. var options = { 
  4.  
  5. hostname : '127.0.0.1'
  6.  
  7. port : 8888, 
  8.  
  9. path : 'imququ.com:80'
  10.  
  11. method : 'CONNECT' 
  12.  
  13. }; 
  14.  
  15. var req = http.request(options); 
  16.  
  17. req.on('connect'function(res, socket) { 
  18.  
  19. socket.write('GET / HTTP/1.1\r\n' + 
  20.  
  21. 'Host: imququ.com\r\n' + 
  22.  
  23. 'Connection: Close\r\n' + 
  24.  
  25. '\r\n'); 
  26.  
  27. socket.on('data'function(chunk) { 
  28.  
  29. console.log(chunk.toString()); 
  30.  
  31. }); 
  32.  
  33. socket.on('end'function() { 
  34.  
  35. console.log('socket end.'); 
  36.  
  37. }); 
  38.  
  39. }); 
  40.  
  41. req.end(); 

這段代碼運行完,結果如下:

  1. HTTP/1.1 301 Moved Permanently 
  2. Server: nginx 
  3. Date: Thu, 19 Nov 2015 15:57:47 GMT 
  4. Content-Type: text/html 
  5. Content-Length: 178 
  6. Connection: close 
  7. Location: https://imququ.com/ 
  8.  
  9. <html> 
  10. <head><title>301 Moved Permanently</title></head> 
  11. <body bgcolor="white"
  12. <center><h1>301 Moved Permanently</h1></center> 
  13. <hr><center>nginx</center> 
  14. </body> 
  15. </html> 
  16.  
  17. socket end. 

可以看到,通過 CONNECT 讓代理打開到目標服務器的 TCP 連接,用來承載 HTTP 流量也是完全沒問題的。

***,HTTP 的認證機制可以跟代理配合使用,使得必須輸入正確的用戶名和密碼才能使用代理,這部分內容比較簡單,這里略過。在本文第二部分,我打算談談如何把今天實現的代理改造為 HTTPS 代理,也就是如何讓瀏覽器與代理之間的流量走 HTTPS 安全機制。

責任編輯:何妍 來源: Jerry Qu的小站
相關推薦

2015-12-02 15:29:32

HTTP網絡協議代理原理

2021-07-20 10:30:46

Golanghttp語言

2024-04-26 09:04:13

2020-07-10 09:04:55

HTTPS瀏覽器網絡協議

2025-10-27 01:22:00

HTTP接口API

2014-10-22 09:36:41

TCPIP

2024-01-08 08:36:29

HTTPGo代理服務器

2009-06-04 10:41:52

Struts工作原理

2020-05-15 08:10:14

HTTP3應用協議

2015-03-17 09:44:08

2021-12-14 09:00:42

Swift HTTP 代理服務器

2018-11-30 09:03:55

HTTP緩存Web

2013-07-09 14:36:24

2021-06-10 08:29:15

Rollup工具前端

2022-03-17 08:55:43

本地線程變量共享全局變量

2023-12-18 09:39:13

PreactHooks狀態管理

2025-05-27 01:00:00

2010-07-12 17:00:14

SNMP代理

2024-09-12 10:06:21

點贊
收藏

51CTO技術棧公眾號

国产91色在线观看| 国产伦精品一区二区三区四区免费| 大又大又粗又硬又爽少妇毛片 | 日韩成人在线视频网站| 国产精彩视频一区二区| 婷婷国产在线| 久久亚洲风情| 日韩一区二区精品视频| 亚洲视频在线不卡| 91色在线看| 91麻豆.com| 国产精品美女主播| 国产精品免费在线视频| 精品网站在线| 亚洲欧美在线视频观看| 97人人澡人人爽| 久草国产精品视频| 午夜精品福利影院| 欧美三级日韩在线| 996这里只有精品| 丁香婷婷在线观看| 国产精品99久久不卡二区| 97在线精品国自产拍中文| 亚洲熟妇无码av| 成人免费观看49www在线观看| 亚洲综合精品久久| 日韩免费一区二区三区| www.五月激情| 久久久久久久波多野高潮日日| 久久国内精品一国内精品| 成人啪啪18免费游戏链接| 中文字幕高清在线播放| 国产精品国产三级国产普通话三级| 91亚洲永久免费精品| 成人精品免费在线观看| 日韩有码中文字幕在线| 欧美精品在线一区二区三区| 欧美一级欧美一级| 香蕉视频免费在线播放| 91啪九色porn原创视频在线观看| 成人黄色免费片| 91video| 我不卡神马影院| 国产视频亚洲视频| 1314成人网| 精品国模一区二区三区| 性感美女久久精品| 欧美性大战久久久久| 亚洲av无码国产综合专区| 六月丁香综合在线视频| 欧美一级淫片aaaaaaa视频| 久久久久久久久久网站| 日本精品黄色| 亚洲欧美中文日韩v在线观看| 亚洲成a人片在线www| 伊人久久一区| 91国产精品成人| 国产资源在线视频| 91cn在线观看| 国产精品欧美久久久久无广告| 欧美精品免费观看二区| 天天av天天翘| 粉嫩av一区二区三区粉嫩| 亚洲伊人久久综合| 国产99免费视频| 免费在线日韩av| 久久久久久久久久婷婷| 真实国产乱子伦对白在线| 999久久久免费精品国产| 尤物yw午夜国产精品视频| 熟女俱乐部一区二区视频在线| 欧美18免费视频| 亚洲国产精品电影在线观看| 师生出轨h灌满了1v1| 91视频亚洲| 欧美精品欧美精品系列| 亚洲美女爱爱视频| a一区二区三区亚洲| 欧美男同性恋视频网站| 五月天激情视频在线观看| 另类中文字幕国产精品| 色欧美片视频在线观看在线视频| 国产精品99久久免费黑人人妻| 午夜影视一区二区三区| 欧美日韩在线观看视频| 国产日产欧美视频| 欧美一区国产| 欧美日韩一区三区| www.污污视频| 视频一区国产| 精品国产污网站| yy1111111| 午夜精品影视国产一区在线麻豆| 亚洲片在线观看| 怡红院一区二区三区| 久久伦理在线| 久久影视电视剧免费网站| 男女免费视频网站| 一本色道久久| 国产精品成人一区二区三区吃奶| 亚洲午夜精品久久久| 国产在线不卡一区| 国产成人精品免费视频大全最热| 污污网站在线免费观看| 久久影视一区二区| 欧美一区二区三区电影在线观看| 色综合久久影院| 亚洲国产欧美另类丝袜| 逼特逼视频在线| 天堂综合在线播放| 亚洲成人国产精品| 久久美女免费视频| 欧美在线网站| 青青在线视频一区二区三区| 最好看的日本字幕mv视频大全| 国产毛片精品视频| 久久综合入口| 2020国产在线视频| 日韩欧美在线免费| 久久久久无码精品| 国产一区三区在线播放| 日韩亚洲欧美中文在线| 在线免费观看毛片| 老司机免费视频一区二区| 成人在线观看av| 成人在线观看一区| 午夜精品视频一区| 57pao国产成永久免费视频| 国产精品高潮呻吟久久久久| 中文字幕一区二区三区电影| 精品午夜福利视频| 极品美女销魂一区二区三区| 久久久久久亚洲精品不卡4k岛国| 午夜视频成人| 色老头久久综合| 国产伦精品一区二区三区88av| 国产伦一区二区三区| 九色91av视频| 中文字幕观看视频| 99久久久精品| 9色视频在线观看| 91p九色成人| 日韩精品一区二区视频| 久久久久久久久艹| 久久99精品久久久久婷婷| 欧美连裤袜在线视频| 欧美hdxxx| 6080午夜不卡| 妖精视频在线观看免费 | 大片在线观看网站免费收看| 97成人超碰| 亚洲男人天堂2023| 日韩欧美高清在线观看| 成人丝袜18视频在线观看| 国产麻豆电影在线观看| 亚洲国产一区二区久久| 在线视频中文亚洲| 精品久久久久久久久久久国产字幕| 99久久国产综合精品麻豆| 欧美xxxx吸乳| 欧美日韩黄网站| 美女999久久久精品视频| 在线观看国产小视频| 91精品国产麻豆国产在线观看| 蜜臀精品一区二区三区在线观看| 91麻豆国产语对白在线观看| 香蕉视频免费看| 偷拍日韩校园综合在线| 99riav国产精品视频| 欧美日韩一区自拍| 动漫一区二区在线| 暖暖在线中文免费日本| 精品成人a区在线观看| 国产一级做a爱免费视频| 高潮精品一区videoshd| 久久亚洲国产成人精品无码区| 精品视频在线播放一区二区三区| 精品国产一区二区三区久久狼黑人 | 91视频九色网站| caoporn免费在线视频| 日韩一区二区三区观看| 成人免费视频入口| 日本午夜一本久久久综合| 天堂资源在线亚洲视频| 欧美黄色a视频| 精品国产一区二区三区在线观看 | 国产福利久久精品| 最爽无遮挡行房视频在线| 日韩欧美www| 国产成人无码精品| 国产亚洲欧美中文| www欧美激情| 亚洲天堂免费| 高清国语自产拍免费一区二区三区| 男人添女人下部高潮视频在线观看| 精品av综合导航| 久久精品国产亚洲av无码娇色 | 国精产品一品二品国精品69xx| 亚洲成av人影院在线观看网| 毛片网站免费观看| 久久成人综合网| 宅男噜噜99国产精品观看免费| 久久亚洲精精品中文字幕| 午夜精品三级视频福利| 国产大片在线免费观看| 91精品在线观看入口| 日韩欧美国产亚洲| 国产精品视频在线看| 日本一区二区三区在线免费观看| 欧美va天堂| 欧美精品一区二区三区四区五区 | 97超碰人人看人人| 456亚洲精品成人影院| 美女少妇精品视频| 黄色毛片在线看| 91精品国产综合久久福利| 欧美成人aaaaⅴ片在线看| 国产欧美日韩综合| 国模大尺度视频| 日一区二区三区| 日韩精品综合在线| 日韩精品免费一区二区在线观看 | 国产午夜精品一区在线观看 | 99久久精品免费看国产一区二区三区| 成人免费无遮挡| 欧美日韩国产成人在线观看| 日本免费一区视频| 欧美精品在线观看一区二区| 西西44rtwww国产精品| 亚洲女同女同女同女同女同69| 亚洲一区二区观看| 国产成人精品免费| 午夜激情av在线| 国产日韩欧美| 日本一本草久p| 欧美亚洲国产一区| 国内精品国语自产拍在线观看| 95精品视频| 国产精品欧美久久久| 老司机深夜福利在线观看| 欧美xxxx做受欧美| 日本免费在线视频| 亚洲欧美精品一区二区| 秋霞av鲁丝片一区二区| 欧美一区二区在线不卡| 综合久久中文字幕| 黑人极品videos精品欧美裸| 久久久无码精品亚洲国产| 国产精品对白交换视频| 国产肥白大熟妇bbbb视频| 97久久久精品综合88久久| 日本wwwwwww| 国产成人自拍网| 欧美午夜精品理论片| 麻豆精品新av中文字幕| 国产精品无码一本二本三本色| 国产精品久久久久久久免费软件| a级黄色片免费| 亚洲综合小说| 91免费视频黄| 欧美二区不卡| 成人一区二区av| 中文字幕免费一区二区三区| 亚洲国产精品一区在线观看不卡 | 国产视频亚洲| 5月婷婷6月丁香| 亚洲激情欧美| 久久精品视频16| 国产亚洲一级| 欧美日韩在线视频一区二区三区| 一区二区毛片| 777久久久精品一区二区三区| 欧美成人日韩| 800av在线免费观看| 在线欧美日韩| 黄色免费视频大全| 视频在线观看一区二区三区| 日韩av在线综合| 日本美女一区二区三区| 女人扒开屁股爽桶30分钟| 久久深夜福利| 最新中文字幕2018| 久久91精品久久久久久秒播| 欧美午夜精品理论片| 国产一区高清在线| 香蕉久久久久久av成人| 99免费精品视频| 美女100%无挡| 国产精品丝袜黑色高跟| 色欲一区二区三区精品a片| 亚洲一区二区三区小说| 欧美日韩综合在线观看| 欧美中文字幕亚洲一区二区va在线| 波多野结衣av无码| 91精品国产一区二区三区蜜臀| 免费看日韩av| 国产视频亚洲视频| 老司机午夜在线| 欧美精品18videos性欧美| 亚洲天堂av影院| 国产精品日韩精品| 欧美大片91| 欧美激情论坛| 我不卡影院28| 日韩视频第二页| 国产真实乱偷精品视频免| 一级片黄色免费| 久久蜜臀中文字幕| www.99re7| 亚洲一区二区黄色| 中国女人真人一级毛片| 欧美mv日韩mv国产| 国产网站在线播放| 欧美激情国产高清| 欧美韩国亚洲| 97国产超碰| 日韩1区在线| 午夜精品久久久久久久无码| 美女性感视频久久| 偷拍夫妻性生活| 亚洲国产精品视频| 国产女人高潮的av毛片| 中文字幕欧美视频在线| 伊人久久在线| 久99久视频| 狠狠色丁香久久综合频道| av在线免费看片| 中文一区二区完整视频在线观看| 国产精品第5页| 日韩精品在线观看网站| 国精一区二区三区| 99视频免费观看蜜桃视频| 国产大片一区| 91亚洲免费视频| 中文一区在线播放| 波多野结衣一本一道| 精品亚洲永久免费精品| 成人观看网址| 极品校花啪啪激情久久| 影院欧美亚洲| 性久久久久久久久久久| 亚洲国产视频在线| 国产91免费在线观看| 欧美黄色片免费观看| caoporn成人免费视频在线| 美女黄色免费看| www.性欧美| 国产成人精品一区二三区| 亚洲裸体xxxx| 韩国女主播一区二区| 亚洲a∨一区二区三区| 老色鬼精品视频在线观看播放| www.99re6| 日韩一区二区三区视频| 免费毛片在线看片免费丝瓜视频| 成人午夜电影免费在线观看| 91久久午夜| 性欧美精品中出| 欧美绝品在线观看成人午夜影视| 国产1区在线| 国产精品一区二区三区在线| 9国产精品视频| 日韩中文字幕有码| 欧美日韩国产在线播放网站| 国产在线更新| 国产精品国产精品国产专区不卡| 国产日韩1区| 国产探花视频在线| 日韩亚洲电影在线| 国模私拍一区二区国模曼安| 清纯唯美一区二区三区| 久久99精品一区二区三区| 免费毛片在线播放免费| 日韩高清不卡av| 成人免费黄色| 久久久久久久久网| 久久在线观看免费| 国产原创中文av| 午夜精品在线视频| 成人情趣视频网站| 欧美人与性动交α欧美精品| 欧美日韩激情视频8区| 日本中文字幕电影在线免费观看| 亚洲xxx大片| 国产精品资源| 小早川怜子一区二区的演员表| 亚洲成av人影院在线观看| 午夜精品成人av| 亚洲av首页在线| 91老师片黄在线观看| 91精品视频免费在线观看| 性色av一区二区三区免费 | 99久久亚洲一区二区三区青草| 成人一级免费视频| 欧美日韩福利在线观看| 成人在线视频免费观看| 亚洲欧美日韩偷拍| 欧美久久一二三四区| 精品众筹模特私拍视频| 婷婷精品国产一区二区三区日韩 |