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

如何使用DNS構建無成本的區塊鏈數據庫

運維 數據庫運維
區塊鏈不僅是一個流行詞。它也不限于加密貨幣和比特幣。憑借其創造透明度和公平性的能力,這項技術正在革新各個領域。應用范圍從跟蹤系統到保護數據,再到執行在線投票系統。

[[387427]]

本文轉載自微信公眾號「區塊鏈研究實驗室」,作者鏈三豐。轉載本文請聯系區塊鏈研究實驗室公眾號。   

區塊鏈不僅是一個流行詞。它也不限于加密貨幣和比特幣。憑借其創造透明度和公平性的能力,這項技術正在革新各個領域。應用范圍從跟蹤系統到保護數據,再到執行在線投票系統。它可以幫助實施反洗錢跟蹤系統,或者簡單地跟蹤您在商店購買的產品的來源。

就像信息科學中經常發生的那樣,許多區塊鏈平臺管理著所有的復雜性,使我們可以像保存一個簡單的數據庫一樣簡單地保存數據。

在本文中,我想實現一個區塊鏈數據庫,以了解此類解決方案的關鍵要素。而且,為了使其更具挑戰性,我將在不使用任何數據庫或服務器的情況下做到這一點。

該解決方案可以輕松地使您擁有可以驗證并安全存儲的不可變數據。

這篇文章的結構如下:

  • 什么是區塊鏈數據庫及其使用方式
  • 如何僅使用DNS服務來實現區塊鏈

什么是區塊鏈數據庫以及如何使用

像往常一樣,我們可以從Wikipedia定義開始:

“A blockchain,[ ...],是一個越來越多的記錄,稱為塊,正在使用鏈接加密。每個塊都包含前一個塊的加密哈希,即時間戳[..]。通過設計,區塊鏈可以抵抗其數據的修改。這是因為一旦記錄,任何給定塊中的數據都不能追溯更改,而無需更改所有后續塊。

“對于用作分布式總賬,一個blockchain通常由管理對等網絡的網絡共同地粘附到協議用于節點間通信和驗證新塊”。

換句話說,區塊鏈的主要特征是:

  • 通過將一條記錄連接到上一條記錄來存儲數據
  • 做到這一點,因此您不能在不使所有數據順序不一致的情況下更改一條記錄
  • 將數據存儲在分布式數據庫中

那么,如何創建呢?

我想的是,一個節點的鏈或多或少是一個鏈表,其中每個塊都有一個不可變的哈希。完成此操作后,您只需要一個安全的分布式數據庫即可存儲數據。什么是古老的分布式數據庫?好吧,每個人都有一個分布式數據庫,沒人知道!我說的是DNS。是的,它是分布式的,它存儲數據。每個人都有一個DNS服務。我意識到這不是預期的用途,但讓我們一起玩吧。

該協議的工作流程是受信任的機構將數據寫入DNS。每個記錄都有一個唯一的鍵,該鍵是內容的哈希值。這意味著,通過更改數據,您將更改ID,并且指向該ID的所有子代都將不一致。此外,DNS協議是分布式的,因此許多服務器之間共享數據的許多副本,這意味著您的一個DNS將脫機,而另一個將繼續為數據提供服務。還請考慮DNS被廣泛緩存,這使您的通信性能高(使用不可變數據緩存永遠不會成為問題)。

該系統使用所有公司都已經擁有的DNS作為存儲,因此無需任何額外費用。DNS本身是一個分布式數據庫。

現在我們已經定義了存儲數據的位置,我們只需要了解如何存儲數據即可。下一步是定義一個通信協議,使所有各方都可以扮演自己的角色。下圖顯示了流程。

DNS區塊鏈工作流程。

在上圖中,我們有:

  • 在DNS上發布的推力實體。它是寫作的關鍵-其他人可以寫記錄,但是它們是無法理解的。
  • 一個消費者,即推力生產者和讀取數據
  • 數據,其 可以是任何JSON數據。您可以選擇將其公開或不公開。

如何實施

現在我們知道該怎么做,并且已經有了啟動該工具的工具,我們只需要使用源代碼即可。

為了使用DNS實現區塊鏈,我們必須面對一些重要問題:

  • DNS限制-DNS并非旨在存儲大數據。我們想使用TXT記錄,但是它們只有254個字符。如果我們要存儲一個大的JSON對象,這是一個很大的限制。
  • 安全性-即使我們想保持數據公開,DNS使用的UDP協議也存在問題。它沒有經過加密,并且沒有像HTTPS協議中那樣可以推動授權的證書機制。
  • 數據是按設計公開的—這可能是一個問題。

所有這些方面都有一個解決方案,并且您將看到,它很容易實現。實際上,通過使用加密技術和獨創性,我們將為上述所有問題找到一個明智的解決方案。

讓我們看看它是如何工作的。

創建沙盒環境

第一步是創建一個我們想玩的沙盒環境。我們需要啟動該工作的是帶有API系統的本地DNS服務器。我們通過創建一個托管該文件的docker-compose文件來實現這一目標。我使用了一個Visual Studio項目,在其中創建了一個我們將用于驗證數據的Web應用程序,一個將成為我們核心的庫以及一個測試項目。結果如下:

DNS區塊鏈項目

通過運行docker-compose up,所有啟動并準備好進行測試。對于DNS部分,我使用了非常輕巧且具有HTTP API可用的DNS。它使用以下配置運行:

  1. version: '3.4' 
  2. services: 
  3.   blockchaindns.web: 
  4.     image: ${DOCKER_REGISTRY-}blockchaindnsweb 
  5.     build: 
  6.       context: . 
  7.       dockerfile: BlockChainDNS.Web/Dockerfile 
  8.   dns: 
  9.     image: tgpfeiffer/shaman-dns   
  10.     command: shaman --server --token xxx --api-listen 0.0.0.0:1632 --dns-listen 0.0.0.0:53 -l trace --insecure   
  11.     ports: 
  12.       - 1632:1632 
  13.       - 53:53/udp 

這里xxx是您要用于身份驗證的令牌,并且DNS已配置為接受來自所有主機的請求(0.0.0.0:port)。

使用運行它之后docker-compose up,您可以使用控制臺對其進行測試:

  1. #create a record in Shaman DNS 
  2. curl --location --request POST 'localhost:1632/records' \ 
  3. --header 'Content-Type: application/json' \ 
  4. --data-raw '{ 
  5.   "domain""test.myfakedomain.it."
  6.   "records": [ 
  7.     { 
  8.       "ttl": 60, 
  9.       "class""IN"
  10.       "type""A"
  11.       "address""127.0.0.1" 
  12.     } 
  13.   ] 
  14. }' 
  15. #test the record 
  16. nslookup test.myfakedomain.it 127.0.0.1 
  17. #output 
  18. # Server:  UnKnown 
  19. # Address:  127.0.0.1 
  20. # Response from server: 
  21. # Nome:    test.myfakedomain.it 
  22. # Address:  127.0.0.1 

現在我們有了一個可以正常工作的本地DNS,我們可以創建一個可以通過API管理DNS記錄的客戶端。

DNS客戶端

第二步是包裝要在應用程序中使用的DNS客戶端功能。我想在這里做的是將來有能力更改DNS服務,因此我創建了一個接口和一個類實現。以下代碼片段顯示了該界面:

  1. public interface IDNSClient 
  2.   Task<DNSEntry> GetRecord(string host, string zone); 
  3.   Task<bool> AddRecord(DNSEntry entry); 
  4.   Action Init { get; set; } 

如您所見,客戶端實現執行HTTP調用來存儲記錄。您可以在本文末尾的GitHub項目中找到完整的類實現。我們僅為薩滿實施了本地提供商,但很容易對其進行擴展以支持大多數現代托管提供商上的任何商業DNS。

區塊鏈服務

現在我們已經有了執行部分,是時候實現業務邏輯了。所有工作都在客戶端完成,客戶端將計算要存儲的數據并調用DNS客戶端方法以保留記錄。服務層由兩部分組成:

  • BlockChainNode:節點的表示形式
  • BlockChainService:實現邏輯的服務

讓我們詳細了解這些類如何工作。

區塊鏈節點

這是帶有JObject屬性的簡單類,用戶可以在其中存儲任何數據。它計算密鑰哈希數據。數據包含歷史記錄,該歷史記錄是到父項的鏈接。僅更改數據的字節將更改密鑰,這將導致以下節點不一致。以下代碼顯示了該類最重要的部分。

  1. public class BlockChainNode 
  2.     { 
  3.  
  4.         public BlockChainNode() 
  5.         { 
  6.  
  7.             this.History.CollectionChanged += History_CollectionChanged; 
  8.         } 
  9.  
  10.         private void History_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
  11.         { 
  12.             this.Data["_history"] = JArray.FromObject(this.History); 
  13.         } 
  14.  
  15.  
  16.         private JObject _data = new JObject(); 
  17.         public JObject Data 
  18.         { 
  19.             get { return _data; } 
  20.             set { _data = value; History_CollectionChanged(nullnull); } 
  21.         } 
  22.  
  23.  
  24.  
  25.         public string Hash { get 
  26.             { 
  27.                 return GetHash(this.ToBase64()); 
  28.             } 
  29.         }  
  30.  
  31.  
  32.  
  33.         public ObservableCollection<string> History { get; set; } = new ObservableCollection<string>();//First to last 
  34.  
  35.         public string ToBase64() 
  36.         { 
  37.             var content = UnicodeEncoding.Unicode.GetBytes(Data.ToString(Formatting.None)); 
  38.  
  39.             return Convert.ToBase64String(content); 
  40.         } 
  41.  
  42.  
  43.         public static string GetHash(string text) 
  44.         { 
  45.             using (var md5 = MD5.Create()) 
  46.             { 
  47.                 return Base32.ToBase32String(md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(text))).ToLower();                 
  48.             } 
  49.         } 
  50.     } 

該代碼最相關的部分是:

  • 數據對象:用戶可以在其中存儲數據的JSON對象
  • 歷史記錄:與數據同步的可觀察列表(“歷史記錄”中的任何更改都會更改_history節點,反之亦然。)
  • 哈希:根據數據的文本表示形式的MD5計算得出的哈希。結果以Base32算法編碼-類似于Base 64,但僅使用四個字節且僅包含小寫字符。這是因為DNS不區分大小寫,并且使用廣泛使用的Base64編碼產生了不一致的數據。

現在我們有了模型,我們必須繼續下一步:由服務實現的業務邏輯。

區塊鏈服務

區塊鏈服務實現用于保存,讀取和驗證記錄的方法。困難的部分是要解決DNS服務器記錄長度的255個字符的限制。解決方案是在Base64中對內容進行編碼,然后使用命名約定將其拆分成塊保存在不同的記錄中。密鑰用作URL的一部分。因此,對于該項目mykey.domain.dom,我們將有0.mykey.domain.dom,1.mykey.domain.dom等下一段代碼顯示了節能方法。

  1. private int WriteDNSFragmentedText(string baseUrl, string value, int size
  2.     var tokens = Tokenize(value, size).ToList(); 
  3.     int i = 0; 
  4.     foreach (var token in tokens) 
  5.     { 
  6.         WriteDNSRecord($"{i}.{baseUrl}""TXT", token); 
  7.         i++; 
  8.     } 
  9.     return i ; 
  10.  
  11. private void WriteDNSRecord(string domain, string type, string value) 
  12.     this.client.AddRecord(new DNSEntry() 
  13.     { 
  14.         Domain = domain, 
  15.         Type = type, 
  16.         Value = value 
  17.     }); 

從上一個調用的片段中可以看到WriteDNSFragmentedText,輸入文本被拆分,數據被保存在許多DNS條目中。

讀取數據是相反的。我嘗試獲取子記錄0,1,2,依此類推,直到有數據為止。一旦我收集了所有Base64塊,過程就是將它們連接,解碼并獲取純JSON。

  1. private string ReadDNSFragmentedText(string domain) 
  2.     List<string> fragments = new List<string>(); 
  3.  
  4.     for (int i = 0; i < 1000; i++)  
  5.     { 
  6.         var fragmentUrl = $"{i}.{domain}"
  7.  
  8.         var result = ReadDNSTxtResult(fragmentUrl); 
  9.         if (result == null) break;// otherwise parent domain value will be added 
  10.         fragments.Add(result); 
  11.     } 
  12.  
  13.     return string.Join("", fragments); 
  14.  
  15. private string ReadDNSTxtResult(string fragmentUrl) 
  16.     if (!fragmentUrl.EndsWith(".")) 
  17.     { 
  18.         fragmentUrl = fragmentUrl + "."
  19.     } 
  20.     var result = lookup.QueryAsync(fragmentUrl, QueryType.TXT).Result; 
  21.     if (result != null && !result.HasError && result.Answers?.Count > 0 ) 
  22.     { 
  23.         var resultDomain = result.Answers.FirstOrDefault().DomainName.Value; 
  24.         if (resultDomain == fragmentUrl) 
  25.         { 
  26.           return result.Answers.TxtRecords().FirstOrDefault()?.EscapedText.FirstOrDefault(); 
  27.         } 
  28.     } 
  29.     return null

客戶端可以輕松地驗證所獲取的數據是否生成密鑰并且是否有效,因為客戶端可以獲取數據,哈希并比較結果。此外,客戶端可以遞歸驗證以檢查所有父節點是否都是真實的。這就是驗證過程所要做的。它由下一部分代碼表示:

  1. public List<string> Validate(JObject data, string keyint db, string domain, byte[] privateKey, string expectedKey = null
  2.     var errors = new List<string>(); 
  3.     //ValidateBase: Coherence betweeen data and values
  4.     var computed = this.Get(key, db, domain, privateKey); 
  5.  
  6.     if (key != computed.Hash) 
  7.     { 
  8.         errors.Add("Key mismatch"); 
  9.     } 
  10.  
  11.     ValidateHierarchy(key,db,domain,privateKey, ref errors); 
  12.     return errors; 
  13.  
  14. private List<string> ValidateHierarchy(string  key,   int db, string domain, byte[] privateKey, ref List<string> errors) 
  15.     var computed = this.Get(key, db, domain, privateKey); 
  16.     if (computed == nullreturn new List<string>(); 
  17.  
  18.     if (computed.History.Count > 0) 
  19.     { 
  20.         var hierarchy = ValidateHierarchy(computed.History.Last(), db, domain, privateKey, ref errors); 
  21.         if (hierarchy.Count != computed.History.Count-1) 
  22.         { 
  23.             errors.Add($"{computed.Hash}: history count not match with lookup"); 
  24.         } 
  25.         else 
  26.         { 
  27.             for (int i = 0; i< hierarchy.Count; i++) 
  28.             { 
  29.                 if (hierarchy[i] != computed.History[i]) 
  30.                 { 
  31.                     errors.Add($"{computed.Hash}: history do not match at {computed.History[i]}"); 
  32.                 } 
  33.             } 
  34.         } 
  35.  
  36.     } 
  37.  
  38.     return computed.History.ToList(); 

如您在上一個片段中看到的那樣,將驗證記錄,然后下載所有層次結構并檢查數據一致性。

現在我們了解了如何從DNS寫入和讀取數據,下一步是如何確保它們的安全。

密碼學和密鑰

我們的系統可以向DNS讀取和寫入數據,現在該注意安全了。我們假設寫給我們的DNS的人是受信任的,但是我們不能確保惡意的DNS服務器不會給我們偽造數據或有人不會讀取它(請記住,DNS數據是公共的)。

我在這里所做的就是對協議進行了以下改進:使用非對稱算法對存儲的數據進行加密存儲。這樣可以確保只有數據生產者才能生成消費者可以理解的數據。任何人都可以創建偽造的DNS服務器,但是他們將無法對待您偽造數據。而且,數據現在已加密,沒有人可以讀取。

非對稱算法是完美的,因為它只允許一定數量的讀者理解消息,但是只有消息源才能產生消息。為此,客戶端生成一對密鑰。公鑰用于加密數據,因此生產者可以安全地保護它。與使用者共享用于解密的私鑰。可以手動共享它,例如通過電子郵件將其發送到加密的存檔中,或者發布在HTTPS網站上,證書可以在該網站上向用戶展示權限。

順便說一下,這個概念很簡單:現在數據已加密,沒有人可以代表我們寫入數據。但是還有另一個問題。對稱算法只處理少量數據(1024-4096字節),但我們必須處理巨大的JSON有效負載。我們有兩種方法:

  • 將完整的消息分成小字節塊,并一一加密/解密它們。
  • 創建一個對稱密鑰,使用生成的密鑰對數據加密,然后使用非對稱對對生成的密鑰進行加密。這樣,每個記錄都具有用于加密數據的不同對稱密鑰。該密鑰是公開共享的,但只有擁有私有密鑰的人才能使用。

考慮到對所有字節塊進行編碼的計算量,我使用了第二種解決方案。這將我們帶到下一個有效負載:

  1.    "data":"json object encrypted with the symm key"
  2.    "key":"symm key encripted with the aymm alghorithm" 

在上面的代碼段中,我們可以看到存儲在JSON有效負載中的加密數據和解密密鑰。讀取器將使用私鑰解密對稱密鑰,然后將其用于解密數據。

代碼中的更改是最小的:所需的只是包裝\展開數據的附加步驟。

在下一個代碼段中,我顯示了完成數據生成的步驟:

  1. #generate a one time password 
  2. var password = SHA512.Create().ComputeHash(Guid.NewGuid().ToByteArray()); 
  3. #encrypt the password 
  4. var decriptkey = this.cryptoService.EncodeKey(password, publicKey); 
  5. #encrypt data with the password 
  6.  var dataEnrypted = this.cryptoService.EncryptData(dataToEncode, password); 
  7. #json object is stored with decriptkey and dataEnrypted 

在下一個代碼段中,我們具有閱讀過程:

  1. var decriptKeyEncoded = .. from json 
  2. var dataEncrypted = ... from json    
  3. var decriptKey = this.cryptoService.DecodeKey(decriptKeyEncoded, privateKey);  
  4.  
  5. var decodedData = this.cryptoService.DecodeData(dataEncrypted, decriptKey); 
  6. #decodedData is the plain data. 

既然我們已經完成了有關區塊鏈實現的說明,那么我們就擁有了將數據存儲在DNS區塊鏈中的所有詳細信息。

結論

即使將DNS服務器用作數據庫看起來似乎很聰明,但事實并非如此。DNS并非旨在以這種方式存儲數據。

如果我們必須處理安全的不可變數據,則解決方案是使用標準的區塊鏈平臺,我的意思是需要使用一個真正的區塊鏈系統。

無論如何,嘗試實現無服務器的區塊鏈非常有趣,我希望它教會了我們區塊鏈平臺背后的原理。

責任編輯:武曉燕 來源: 區塊鏈研究實驗室
相關推薦

2021-04-16 20:43:18

Go區塊鏈編程

2018-05-03 20:55:47

區塊鏈分布式數據庫

2018-05-30 10:31:10

2022-01-10 10:56:37

區塊鏈技術比特幣

2021-03-16 21:39:47

區塊鏈DEMOGo

2021-12-22 23:28:04

區塊鏈人工智能技術

2021-03-12 19:17:38

區塊鏈GoPython

2021-03-17 20:29:36

區塊鏈DEMOPython

2022-03-08 14:31:37

區塊鏈汽車技術

2018-09-27 16:15:10

區塊鏈數據庫

2019-03-14 09:30:35

區塊鏈數據庫存儲

2021-04-09 20:04:34

區塊鏈Go加密

2021-09-23 22:40:10

區塊鏈比特幣技術

2018-02-10 19:12:14

區塊鏈數據庫解決方案

2018-04-18 17:08:45

2018-03-27 09:52:30

區塊鏈數字貨幣比特幣

2021-10-26 08:56:35

區塊鏈數據庫分類賬

2017-06-28 08:14:57

數據庫區塊鏈比特幣

2024-08-01 13:12:57

2021-05-10 10:04:15

區塊鏈公共部門數據管理
點贊
收藏

51CTO技術棧公眾號

欧美精品一区二区三区一线天视频| 久久高清免费| 疯狂做受xxxx高潮欧美日本| 国产福利91精品一区二区三区| 69av一区二区三区| 欧美日韩dvd| av网站免费大全| 黄色亚洲在线| 亚洲免费影视第一页| 午夜激情av在线| 日本三级韩国三级欧美三级| 99re视频精品| 国产日本欧美一区| 久久综合综合久久| 精品视频亚洲| 欧美mv日韩mv国产| 欧美va天堂在线| 日韩一区二区三区免费看| 一二三四视频社区在线| 在线看免费av| 99久久国产综合精品女不卡| 91欧美激情另类亚洲| 国产69精品久久久久久久久久| 日韩理论电影大全| 日韩av一区在线观看| 精品国产乱码久久久久久1区二区 91网址在线观看精品 | 9色在线观看| 99久久国产综合精品女不卡| 91久久久久久国产精品| 无码一区二区三区| 欧美亚洲免费| 国内精品国产三级国产在线专| 国精产品一区一区| 精品大片一区二区| 亚洲欧美精品一区| 三级男人添奶爽爽爽视频| 91国内精品| 欧美一区二区免费视频| 夜夜夜夜夜夜操| av免费在线一区| 欧美日韩国产专区| 日本国产在线播放| 久草在线中文最新视频| 亚洲国产另类精品专区| 成人国产在线看| 污视频在线看网站| 亚洲资源中文字幕| av在线com| 麻豆蜜桃在线| 亚洲曰韩产成在线| 4444亚洲人成无码网在线观看| 日本福利在线| 国产精品免费丝袜| 亚洲国产精品综合| 91电影在线播放| 国产精品美女久久久久久久久久久 | 日本韩国精品一区二区| 91在线观看免费视频| 精品国产综合久久| 日本福利在线观看| 国产午夜精品一区二区三区四区| 欧美成人一区二区在线| 国产专区在线| 国产精品久久夜| 国产系列第一页| 自由的xxxx在线视频| 一区二区三区四区亚洲| 成人在线播放网址| 密臀av在线播放| 色狠狠一区二区| 中文字幕国内自拍| 成人免费观看49www在线观看| 制服丝袜中文字幕一区| 国产伦精品一区二区三区妓女下载 | 五月天色婷婷丁香| 欧美 日韩 国产精品免费观看| 欧美国产日韩一区二区三区| 日本熟妇毛耸耸xxxxxx| 久久婷婷麻豆| 成人欧美一区二区三区在线 | 一区二区欧美亚洲| 国产又粗又猛又爽又黄的视频四季| 97精品在线| 欧美激情三级免费| 毛片视频网站在线观看| 免费的国产精品| 91一区二区三区| 三级视频在线| 中文字幕在线视频一区| 欧美一级片免费播放| 中文字幕在线直播| 69精品人人人人| 偷拍女澡堂一区二区三区| 久久国产亚洲| 欧美精品在线播放| 亚洲欧美一二三区| 国产精品一区免费视频| 玖玖玖精品中文字幕| 免费观看成人高潮| 午夜视频在线观看一区| 亚洲 欧美 另类人妖| 国产丝袜一区| 中文字幕亚洲在线| 日韩av女优在线观看| 久久精品国产精品亚洲红杏| 国产欧美日韩一区二区三区| 在线免费观看黄色网址| 欧美日韩日本国产| 992kp免费看片| 神马电影久久| 欧美国产日韩一区二区三区| 中文字幕在线观看第二页| 不卡的av网站| 日韩不卡视频一区二区| 亚洲成人av观看| 亚洲电影av在线| www色aa色aawww| 久久午夜激情| 免费在线成人av电影| 色操视频在线| 欧美日韩国产大片| 亚洲综合色一区| 日韩视频久久| av成人在线电影| 免费a级毛片在线播放| 色88888久久久久久影院按摩 | 红杏aⅴ成人免费视频| 久久精品99久久久香蕉| 中文字幕乱伦视频| 26uuu另类欧美亚洲曰本| 国产美女永久无遮挡| 成人51免费| 色诱女教师一区二区三区| 精品人妻一区二区三区免费看 | 国产精品中出一区二区三区| 超碰在线caoporn| 欧美久久久久久久久中文字幕| 蜜桃传媒一区二区亚洲| 久久久久在线| 免费亚洲一区二区| 在线观看的黄色| 亚洲精品中文字幕av| 亚洲一区欧美在线| 99久久久无码国产精品| 九色自拍视频在线观看| 国内精品国产成人国产三级粉色| 欧美国产日本在线| 亚洲高清在线观看视频| 亚洲高清中文字幕| 中文字幕人妻一区| 18成人免费观看视频| 国产精品手机视频| 美女av在线免费看| 精品伊人久久97| 一级黄色大片视频| 国产亚洲短视频| 日韩一区二区三区不卡视频| 久久免费av| 国产精品欧美日韩久久| 无遮挡动作视频在线观看免费入口| 欧美三级电影在线看| 小嫩苞一区二区三区| 国产精品99久久久久久似苏梦涵| 中国女人做爰视频| 国偷自产av一区二区三区| 海角国产乱辈乱精品视频| 人妻无码中文字幕| 欧美日韩一区二区三区| 国产av自拍一区| 九色|91porny| 中文字幕人妻熟女人妻洋洋| 牛牛精品成人免费视频| 国产激情综合五月久久| 日本在线视频网| 欧美大片在线观看一区二区| 中国一级免费毛片| а√天堂8资源中文在线| 成人免费视频一区二区| av片中文字幕| 91日韩欧美| 国产精品久久一区二区三区| 自拍偷拍亚洲视频| 色黄久久久久久| 亚洲精品成人区在线观看| 色婷婷国产精品综合在线观看| 日韩欧美视频免费观看| 丰满放荡岳乱妇91ww| 日韩av播放器| 综合日韩在线| 欧美自拍资源在线| 麻豆国产一区| 国产不卡视频在线| jizz性欧美10| 亚洲一级片在线看| 国产夫妻性生活视频| 色婷婷av一区| 久久久久久久久久久久国产| 久久蜜桃一区二区| 成人做爰69片免费| 日韩av在线播放中文字幕| 成人午夜免费在线视频| av伊人久久| 国产精品午夜av在线| 午夜精品久久久久久毛片| 91精品国产高清| 在线播放蜜桃麻豆| 伊人久久久久久久久久久| 开心激情综合网| 欧美精选午夜久久久乱码6080| 亚洲欧美自拍视频| 亚洲综合视频在线观看| 国产大屁股喷水视频在线观看| 99精品一区二区三区| 午夜xxxxx| 日韩电影在线看| 国产九九九九九| 欧美日本免费| 在线观看成人一级片| 精品久久91| 欧美日韩精品一区| 激情视频极品美女日韩| 成人91视频| 欧美专区视频| 成人欧美一区二区三区在线| 日本h片久久| 日韩美女写真福利在线观看| 国产精品13p| 欧美激情在线观看| sm国产在线调教视频| 久久精品久久久久电影| 91欧美在线视频| 夜夜躁日日躁狠狠久久88av | 一区二区三区黄色| 欧美精品少妇| 亚洲欧洲自拍偷拍| 青青青免费视频在线2| 亚洲激情自拍图| 五月色婷婷综合| 亚洲国产小视频| 色一情一乱一乱一区91av| 日韩欧美久久一区| 亚洲国产精品18久久久久久| 日韩视频中午一区| 亚洲精品第五页| 欧美xxxxx牲另类人与| 亚洲精品视频91| 精品国产乱子伦一区| 亚洲av无码专区在线| 欧美精品一区二区三区在线播放 | 伊是香蕉大人久久| 国产69久久| 色偷偷av一区二区三区乱| 在线观看a视频| 精品国偷自产在线视频| 国内精品久久久久久野外| 另类美女黄大片| 牛牛在线精品视频| 97色在线观看| 一区二区精品伦理...| 国产成人精品网站| 五月天色综合| 国产精品12| 日韩理论电影中文字幕| 欧美最大成人综合网| 日韩欧美午夜| 成年丰满熟妇午夜免费视频| 欧美涩涩网站| 国产91在线免费| 日韩不卡在线观看日韩不卡视频| 国内外成人免费在线视频| 国产一区二区不卡在线| 精品视频站长推荐| 久久久www成人免费毛片麻豆| 日韩欧美视频免费观看| 亚洲高清一区二区三区| 无码任你躁久久久久久久| 51精品国自产在线| 秋霞网一区二区| 国产一区二区三区在线观看视频| 久操视频在线观看| 久久免费在线观看| 精品视频一区二区三区四区五区| 成人午夜在线视频一区| 欧美精品密入口播放| 亚洲精品人成| 红桃视频国产精品| 成人免费毛片播放| 国产69精品一区二区亚洲孕妇| 国产精品无码永久免费不卡| 国产精品成人在线观看| 日韩av片在线播放| 欧美高清激情brazzers| 欧美日韩影视| 欧美日本在线视频中文字字幕| 乡村艳史在线观看| 亚洲一区美女视频在线观看免费| 丝袜久久网站| 国产盗摄视频在线观看| 狂野欧美一区| 在线观看免费视频黄| 国产精品欧美一级免费| 久久久精品福利| 日韩视频中午一区| 日韩理伦片在线| 17婷婷久久www| 亚洲精品观看| 亚洲精品日韩精品| 乱码第一页成人| 日本中文字幕精品| 国产精品国产三级国产普通话99 | 三级在线观看视频| 亚洲一区二区免费| 不卡在线一区| 大陆极品少妇内射aaaaa| 国产一级精品在线| 2019男人天堂| 欧美日韩亚洲视频| 亚洲av无码片一区二区三区 | 中文字幕一区久| 国产精品一区二区三区免费观看| 97久久视频| www.涩涩涩| 久久人人爽爽爽人久久久| 中文字幕一区二区三区手机版 | 欧美午夜电影在线观看| 污污的视频免费| 国产喷白浆一区二区三区| 国产一级18片视频| 亚洲精品suv精品一区二区| 肉肉视频在线观看| 5g影院天天爽成人免费下载| 欧美xxav| av免费一区二区| 中文字幕不卡在线观看| 黄色av网站免费| 亚洲人在线视频| 免费观看一级欧美片| 精品欧美国产| 亚洲三级免费| 右手影院亚洲欧美| 色诱亚洲精品久久久久久| 黄色在线网站| 国产精品久久av| 色欧美自拍视频| 人人爽人人爽av| 一区二区三区在线观看视频| 亚洲国产精品一| 久久久久亚洲精品国产| 精品三级在线观看视频| 日韩精品一区二区三区久久| 久久综合久久综合亚洲| 波多野结衣家庭主妇| 色天天综合狠狠色| 国产高清日韩| 日韩av在线播放不卡| www日韩大片| 波多野结衣在线观看视频| 亚洲一级黄色av| 91麻豆精品| 国产亚洲黄色片| 久久这里都是精品| 人妻中文字幕一区二区三区| 久久精品欧美视频| 日本一区二区三区播放| 国产素人在线观看| 国产午夜精品福利| 国产精品久久久久久免费播放| 久久国产精品首页| 欧美韩一区二区| 性刺激的欧美三级视频| 亚洲精选在线视频| 午夜视频免费在线| 国产美女精彩久久| 韩国精品一区二区三区| 无码熟妇人妻av| 欧美精品在欧美一区二区少妇| 国产嫩草在线视频| 日本成人黄色| 国产一区二区精品久久| 亚洲欧美综合另类| 色妞久久福利网| 加勒比视频一区| 热久久精品国产| 中文字幕欧美一| 天天操天天插天天射| 午夜美女久久久久爽久久| 成人久久综合| 欧美一级片黄色| 欧美色视频在线| av日韩国产| 日韩高清国产一区在线观看| 国产jizzjizz一区二区| 亚洲视频 欧美视频| 久久国产精彩视频| 首页亚洲中字| 老熟女高潮一区二区三区| 欧美丝袜一区二区| 婷婷丁香在线| 欧美三级华人主播| 99在线精品视频|