日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

腐蚀rust服务器命令_【使用 Rust 写 Parser】2. 解析Redis协议

發布時間:2025/3/8 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腐蚀rust服务器命令_【使用 Rust 写 Parser】2. 解析Redis协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系列所有文章

https://zhuanlan.zhihu.com/p/115017849?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/139387293?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/146455601?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/186217695?zhuanlan.zhihu.com

在基本熟悉 nom 之后, 這次我們準備用 nom 實現一個 redis 通信協議的解析器. 選擇 redis 是因為 redis 的通信協議易讀且比較簡單.

準備

如果你對 redis 通信協議不熟悉的話可以查閱 通信協議(protocol). 簡單來說 redis 通信協議分為統一請求協議(這里只討論新版請求協議)和回復協議, 請求協議可以方便地通過 Rust 內置的 format! 拼接構成, 而通信協議則使用 nom 解析. redis 協議非常簡單, 這里不再贅述.

首先我們需要一個 redis 服務器, 這里我在開發的機器上用 docker 啟動一個 redis 服務器:

docker run -d --name redis -p 6379:6379 redis redis-server --appendonly yes

測試下 redis 服務

telnet localhost 6379 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ping +PONG

出現 +PONG 說明服務器已正常運行

實現基本功能

首先創建項目

cargo new rcli && cd rcli

添加如下依賴

[dependencies] tokio = { version = "0.2", features = ["full"]} nom = "5" bytes = "0.5.4" structopt = "0.3.14"

structopt 可以幫助我們快速構建命令行工具輸入 redis 命令幫助測試, bytes 則可以幫助我們處理字節, tokio 依賴是上個測試代碼遺留的依賴, 剛好新代碼也需要 tcp 連接, 索性使用 tokio 處理 tcp 連接, nom 自然是用于解析回復.

首先我們需要創建 tcp 連接與 redis 通信, 并且寫入一些數據看看協議是否管用:

use bytes::{BufMut, BytesMut}; use std::error::Error; use tokio::net::TcpStream; use tokio::prelude::*;#[tokio::main] async fn main() -> Result<(), Box<dyn Error>> {let mut stream = TcpStream::connect("127.0.0.1:6379").await?;let mut buf = [0u8; 1024];let mut resp = BytesMut::with_capacity(1024);let (mut reader, mut writer) = stream.split();// 向服務器發送 PINGwriter.write(b"*1rn$4rnPINGrn").await?;let n = reader.read(&mut buf).await?;resp.put(&buf[0..n]);// 返回結果應該是 PONGprintln!("{:?}", resp);Ok(()) }

如上面代碼展示的, 我們創建一個 tcp 連接和一個緩沖 buf, 在成功連接后根據協議嘗試寫入 *1rn$4rnPINGrn, 預期結果是服務器返回 "+PONGrn".

現在我們可以創建 CLI 實現幾個常用的 redis 命令, 方便我們向服務器發送命令. 創建 commands.rs 文件, 記得在 main.rs 中導入它.

以 rpush 為例, rpush 命令用法為 RPUSH key value [value …]

使用 structopt 可以這樣定義一個枚舉(使用結構體也可以, 但因為將來有很多子命令, 所以枚舉更合適)

use structopt::StructOpt;#[derive(Debug, Clone, StructOpt)] pub enum Commands {/// push value to listRpush {/// redis keykey: String,/// valuevalues: Vec<String>,}, }

接著在 main.rs 中使用 Commands 解析命令行

use structopt::StructOpt; mod commands;#[tokio::main] async fn main() -> Result<(), Box<dyn Error>> {// 創建 tcp 連接, buf 等...let com = commands::Commands::from_args();// 發送命令 ... }

運行項目看下效果

cargo run -- helppush value to listUSAGE:rrdis-cli rpush <key> [values]...FLAGS:-h, --help Prints help information-V, --version Prints version informationARGS:<key> redis key<values>... value

接下來要把從命令行傳來的參數轉換為 redis 統一請求. redis 以 rn 為分隔符, redis 請求格式以 *argc 開頭, argc 是此次請求的參數個數, 每個參數先以 $<參數長度> 聲明參數長度, 接著 rn 分割符, 然后是參數數據, 若有多個參數則重復此步驟. 最后以 rn 結尾.

比如上面的 PING 轉換為 *1rn$4rnPINGrn, 而 GET 轉換為 *2rn$3rnGETrn$3rnkeyrn.

可以使用一個 builder 幫助我們轉換:

use bytes::{BufMut, BytesMut};#[derive(Debug, Clone)] struct CmdBuilder {args: Vec<String>, }impl CmdBuilder {fn new() -> Self {CmdBuilder { args: vec![] }}fn arg(mut self, arg: &str) -> Self {self.args.push(format!("${}", arg.len()));self.args.push(arg.to_string());self}fn add_arg(&mut self, arg: &str) {self.args.push(format!("${}", arg.len()));self.args.push(arg.to_string());}fn to_bytes(&self) -> BytesMut {let mut bytes = BytesMut::new();bytes.put(&format!("*{}rn", self.args.len() / 2).into_bytes()[..]);bytes.put(&self.args.join("rn").into_bytes()[..]);bytes.put(&b"rn"[..]);bytes} }

CmdBuilder 做的很簡單, 保存通過 arg 或 add_arg 傳入的參數, 在 to_bytes 方法中拼接這些參數為有效的請求.

例如可以通過如下方式構建一個 GET 命令

let cmd = CmdBuilder::new().arg("GET").arg("key").to_bytes()

接下來使用 CmdBuilder 為 Commands 實現 to_bytes 方法

impl Commands {pub fn to_bytes(&self) -> bytes::BytesMut {let cmd = match self {Commands::Rpush { key, values } => {let mut builder = CmdBuilder::new().arg("RPUSH").arg(key);values.iter().for_each(|v| builder.add_arg(v));builder.to_bytes()}};cmd} }

改寫 main 函數發送構建的請求

// ... 省略 let com = commands::Commands::from_args(); writer.write(&com.to_bytes()).await?; cargo run -- rpush list a b c d# redis 成功返回響應 :3rn

All is well, 對于其他命令可以通過相同方法實現, 可以在 rrdis-cli/src/commands.rs 看到完整實現.

解析回復

現在終于到 nom 出場了. 新建 reply.rs 文件, 并在 main.rs 導入. 首先導入需要使用的 nom 方法, 接著定義 Reply, 因為 redis 回復種類有限, 所以用一個枚舉是非常合適的.

use nom::branch::alt; use nom::bytes::complete::tag; use nom::bytes::complete::{take_while, take_while1, take_while_m_n}; use nom::combinator::map; use nom::multi::many_m_n; use nom::sequence::delimited; use nom::IResult;#[derive(Debug)] pub enum Reply {// 狀態回復或單行回復SingleLine(String),// 錯誤回復Err(String),// 整數回復Int(i64),// 批量回復Batch(Option<String>),// 多條批量回復MultiBatch(Option<Vec<Reply>>),// 回復中沒有, 這里是為了方便進行錯誤處理添加的BadReply(String), }

單行回復

協議中單行回復定義如下:

一個狀態回復(或者單行回復,single line reply)是一段以 "+" 開始、 "rn" 結尾的單行字符串。

所以解析思路是: 如果回復以"+"開頭, 則讀取余下字節存作為回復, 直到 "rn", 偽代碼如下

take_if("+"), take_util_new_line, take_if("rn")

nom 中的 tag 可以完美實現偽代碼中的 take_if 功能, 令人驚喜的是對于"消耗輸入直到不符合某種條件"這個常見解析模式, nom 提供了 take_while 函數, 所以我們的解析函數可以寫成:

fn parse_single_line(i: &str) -> IResult<&str, Reply> {let (i, _) = tag("+")(i)?;let (i, resp) = take_while(|c| c != 'r' && c != 'n')(i)?;let (i, _) = tag("rn")(i)?;Ok((i, Reply::SingleLine(resp.to_string()))) }

tag 和 take_while 讓解析函數的功能非常直觀地展現出來, 這讓它看著想偽代碼, 但它真的能運行!

在函數中只有 take_while 返回的結果是我們想要的, 但兩個 tag 又是不可或缺, 對于這一常見解析模式 nom 提供了 delimited 這個組合子函數, 這個組合子函數接受三個類似 tag("xx") 這樣的基本函數, 依次應用這三個函數, 如果成功, 則返回第二個函數解析的結果.

所以我們的函數可以這樣寫:

fn parse_single_line(i: &str) -> IResult<&str, Reply> {let (i, resp) = delimited(tag("+"),take_while(|c| c != 'r' && c != 'n'),tag("rn"),)(i)?;Ok((i, Reply::SingleLine(String::from(resp)))) }

錯誤回復

錯誤回復定義:

錯誤回復和狀態回復非常相似, 它們之間的唯一區別是, 錯誤回復的第一個字節是 "-" , 而狀態回復的第一個字節是 "+"

所以錯誤回復解析函數和上面的差不多:

fn parse_err(i: &str) -> IResult<&str, Reply> {let (i, resp) = delimited(tag("-"),// take_while1 與 take_while 類似, 但要求至少一個字符符合條件take_while1(|c| c != 'r' && c != 'n'),tag("rn"),)(i)?;Ok((i, Reply::Err(String::from(resp)))) }

整數回復

整數回復就是一個以 ":" 開頭, CRLF 結尾的字符串表示的整數,

整數回復結構與前兩種類似, 區別在于中間是整數, 需要將 take_while1 的返回值轉換為整數.

如果沒有進行類型轉換解析函數可以這樣實現:

fn parse_int(i: &str) -> IResult<&str, Reply> {let (i, int) = delimited(tag(":"),// 注意負數前綴take_while1(|c: char| c.is_digit(10) || c == '-'),tag("rn"),)(i)?;// ... 類型轉換Ok((i, Reply::Int(int))) }

注意到 nom 提供的基本解析工廠函數如 tag 創建的解析函數返回值都是 IResult, 它與 Result 類似, 可以應用 map 運算子, 不過這個 map 需使用 nom 提供的

map(take_while1(|c: char| c.is_digit(10) || c == '-'), |int: &str| int.parse::<i64>().unwrap())

通過 nom 的 map 函數可以把返回值從 IResult<&str, &str> 映射為 IResult<&str, i64>, 最后解析函數可以寫成

fn parse_int(i: &str) -> IResult<&str, Reply> {let (i, int) = delimited(tag(":"),map(take_while1(|c: char| c.is_digit(10) || c == '-'),|int: &str| int.parse::<i64>().unwrap(),),tag("rn"),)(i)?;Ok((i, Reply::Int(int))) }

批量回復

服務器發送的內容中: - 第一字節為 "$" 符號 - 接下來跟著的是表示實際回復長度的數字值 - 之后跟著一個 CRLF - 再后面跟著的是實際回復數據 - 最末尾是另一個 CRLF

同時批量回復還有特殊情況

如果被請求的值不存在, 那么批量回復會將特殊值 -1 用作回復的長度值, 這種回復稱為空批量回復(NULL Bulk Reply)

此時協議要求客戶端返回空對象, 對于 Rust 則是 None, 所以 BatchReply 才會被定義為 BatchReply<Option<String>>.

所以這個函數的解析可能稍微復雜點, 但方法與上面沒有太大差異, 除了新的 take_while_m_n, take_while_m_n 與 take_while 類似, 不同的是它可以指定消耗輸入最小數和最大數m, n.

如果是空回復則嘗試匹配 rn, 如果成功, 直接返回, 否則根據拿到的回復長度, 獲取那么多長度的字符, 接著應該碰到 rn.

fn parse_batch(i: &str) -> IResult<&str, Reply> {let (i, _) = tag("$")(i)?;let (i, len) = (take_while1(|c: char| c.is_digit(10) || c == '-'))(i)?;if len == "-1" {let (i, _) = tag("rn")(i)?;Ok((i, Reply::Batch(None)))} else {let len = len.parse::<usize>().unwrap();let (i, resp) = delimited(tag("rn"), take_while_m_n(len, len, |_| true), tag("rn"))(i)?;Ok((i, Reply::Batch(Some(String::from(resp)))))} }

多條批量回復

多條批量回復是由多個回復組成的數組, 數組中的每個元素都可以是任意類型的回復, 包括多條批量回復本身。 多條批量回復的第一個字節為 "*" , 后跟一個字符串表示的整數值, 這個值記錄了多條批量回復所包含的回復數量, 再后面是一個 CRLF

多條批量回復其實是對上面四種回復的嵌套, 但需要注意"空白多條批量回復"和"無內容多條批量回復"這兩種特殊情況.

空白多條回復為 "*0rn", 無內容多條批量回復為 "*-1rn", 在解析時需要對這兩種特殊情況進行處理. 在其他情況則可以應用 nom 提供的 alt 組合子服用之前的四個解析函數; alt 即"可選的", 它接受多個解析函數元組, 依次嘗試應用每個函數, 返回第一個成功解析結果或拋出錯誤.

同時對于重復應用某個解析函數 m 到 n 次這種模式, nom 提供了 many_m_n 組合子, 對于 fn parse_item(&str) -> IResult<&str, Reply> 這樣的函數, many_m_n(parse_item, 0, 12) 返回值為 IResult<&str, Vec<Reply>>.

理清邏輯后解析多條批量回復的解析函數雖然有些長但還是很清晰的:

fn parse_multi_batch(i: &str) -> IResult<&str, Reply> {let (i, count) = delimited(tag("*"),take_while1(|c: char| c.is_digit(10) || c == '-'),tag("rn"),)(i)?;if count == "-1" {let (i, _) = tag("rn")(i)?;Ok((i, Reply::MultiBatch(None)))} else {let count = count.parse::<usize>().unwrap();let (i, responses) = many_m_n(count,count,alt((parse_single_line, parse_err, parse_int, parse_batch)),)(i)?;// 做個嚴格檢查, 檢查解析到的個數與預期的是否一致if responses.len() != count {Ok((i,Reply::BadReply(format!("expect {} items, got {}", count, responses.len())),))} else {Ok((i, Reply::MultiBatch(Some(responses))))}} }

最后用 alt 做個"匯總"

fn parse(i: &str) -> IResult<&str, Reply> {alt((parse_single_line,parse_err,parse_int,parse_batch,parse_multi_batch,))(i) }

至此我們我們的解析函數到完成了, 為 Reply 實現 Display 特性后對 redis 返回的消息應用 parse 然后把解析結果打印出來即可驗證解析函數正確性. 完整代碼在

rrdis-cli/src/reply.rs?github.com

匯總

完整代碼可以在我的 rrdis-cli 查看. 不知道大家對 nom 的評價如何, 我覺得使用 nom 提供的基本函數和一系列組合子從最小元素出發, 搭積木似的構建出更復雜的解析函數, 即降低了開發難度, 熟悉之后代碼邏輯還挺清晰的.

整個 rrdis-cli 項目實現 set, get, incr, lrange, rpush 和 ping 這基本命令, 實現其他命令也是非常簡單; 并且實現了絕大部分(還有一些特殊錯誤情況沒處理)協議解析, 整個項目代碼量如下

tokei . -------------------------------------------------------------------------------Language Files Lines Code Comments Blanks -------------------------------------------------------------------------------Markdown 1 4 4 0 0Rust 3 332 284 20 28TOML 1 15 12 1 2 -------------------------------------------------------------------------------Total 5 351 300 21 30 -------------------------------------------------------------------------------

Rust 代碼只有 332 行, 挺簡潔的, 估計比我用 Python 實現都少.

下一篇使用 nom 寫什么還不確定, 隨緣更新吧~

怎么說也是萬字長文, 如果覺得文章可以, 請點個贊, 謝謝~

總結

以上是生活随笔為你收集整理的腐蚀rust服务器命令_【使用 Rust 写 Parser】2. 解析Redis协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

中文字幕视频三区 | 97精品欧美91久久久久久 | 国产99久久99热这里精品5 | aav在线 | 精品久久一级片 | 福利视频导航网址 | 五月婷婷狠狠 | 黄色三几片| 亚洲国产片 | 久久免费视频网 | 日本精品视频免费观看 | 日韩在线免费视频观看 | 在线免费av电影 | 国产成人精品一区二区三区在线观看 | 日本精品一区二区三区在线观看 | 国产精品在线看 | av先锋中文字幕 | 日韩中文字幕网站 | 久久视频一区 | 91九色蝌蚪视频网站 | 奇米影视四色8888 | 天天操天天综合网 | 国产亚洲精品美女久久 | 最新免费中文字幕 | 久久精品国产成人精品 | 国产精品黄色影片导航在线观看 | 在线观看一二三区 | 一本之道乱码区 | 黄色小网站在线观看 | 亚洲高清视频在线观看免费 | 国产中文字幕久久 | 色综合久久88色综合天天6 | 在线成人av | 九九综合九九 | 波多野结依在线观看 | 亚洲欧洲av在线 | 伊人五月天.com | 久久这里只有精品首页 | 午夜电影久久 | 毛片激情永久免费 | 中文字幕一区二区在线播放 | 五月天网站在线 | 天天干天天怕 | 91麻豆精品国产自产在线 | 97超碰精品| 婷婷丁香激情综合 | 91 中文字幕 | 精品少妇一区二区三区在线 | 亚洲91精品在线观看 | 国产精品视频线看 | 国产韩国日本高清视频 | 色综合久久久久久久 | 亚洲精品免费看 | 欧美久久久 | 久久精品99久久久久久 | 久久久资源网 | 亚洲精品黄 | www.av小说 | 天天·日日日干 | 超碰人人干人人 | 91夜夜夜| 久久成人午夜视频 | 色婷婷综合激情 | 国产在线视频一区 | 婷婷精品在线视频 | 激情视频一区二区三区 | 一级α片| 深爱婷婷久久综合 | 国产一区二区中文字幕 | 国产玖玖精品视频 | 国产精品成人一区 | 麻豆视频网址 | 亚洲精品永久免费视频 | 黄色91在线 | 欧美日韩一区久久 | 在线视频app | 亚洲视频在线免费看 | 日韩精品最新在线观看 | 在线中文字母电影观看 | 在线观看免费版高清版 | 在线国产激情视频 | 国产视频999| 国产精品午夜在线 | 亚洲视频在线视频 | 婷婷久月| 久久高清国产视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 欧美日韩国产三级 | 中文在线字幕免 | 亚洲国产中文字幕在线视频综合 | 中文字幕在线免费播放 | 亚洲欧洲精品久久 | 久久久九九 | 一级黄色片网站 | 麻豆视频免费在线观看 | 久久精品国产一区二区 | 国产一级久久 | 高清免费在线视频 | 国产精品美女久久久久久久 | 成人精品视频 | 欧美一级性生活片 | 精品福利在线视频 | 狠狠干夜夜操 | a电影免费看 | 99re热精品视频 | 久久论理| 国产精品久久麻豆 | 欧美日韩国产在线观看 | 91av蜜桃| 999久久国精品免费观看网站 | 国产 欧美 日产久久 | 黄色在线成人 | 久久免费的视频 | 综合精品在线 | 日韩一级成人av | 人人爱爱人人 | 色综合天天视频在线观看 | 日韩精品一区二区三区第95 | 久久九九久久精品 | 亚洲精品福利在线 | 精品在线亚洲视频 | 最近中文字幕免费视频 | 国产精品久久久免费 | 天天精品视频 | 黄色软件在线看 | 国产永久免费高清在线观看视频 | 一区二区三区中文字幕在线观看 | 国产成人精品综合久久久 | 国产98色在线 | 日韩 | www.五月婷婷 | 国产乱视频 | av在线播放免费 | 日本中文字幕观看 | 成人免费观看大片 | 97av视频在线观看 | 91九色网站 | 99九九热只有国产精品 | 超碰在线日韩 | 午夜久久福利视频 | av爱干 | 婷婷综合导航 | 久久久久免费网站 | 精品天堂av| 中文字幕亚洲五码 | 亚洲最大av网站 | 国产黄在线免费观看 | 成年人黄色免费网站 | 91精品久久久久久综合乱菊 | 欧美动漫一区二区三区 | 91.dizhi永久地址最新 | 国产黄色片久久 | 五月婷激情| 亚洲精品欧美成人 | 天堂资源在线观看视频 | 黄色a一级视频 | 久久久国产精品电影 | 久久99视频免费观看 | 久久久久久黄 | 久久人人爽人人爽人人片 | 干av在线 | 中国一级特黄毛片大片久久 | 成年人看片网站 | 91mv.cool在线观看 | 99在线观看| 五月天久久激情 | 国产精品岛国久久久久久久久红粉 | 中文字幕精品在线 | 亚洲国产午夜 | 欧美va天堂va视频va在线 | 欧美激情精品久久久久久变态 | 中文字幕一区二区三区视频 | 天天操夜夜爱 | 欧美日韩国产精品爽爽 | 色综合夜色一区 | 国产91在线观看 | 久久久亚洲网站 | 日韩欧美精品在线观看视频 | 亚洲视频 在线观看 | av高清影院| 五月天色网站 | 国产精品一码二码三码在线 | 狠狠综合久久av | 国产成人精品三级 | 伊人日日干 | 丰满少妇高潮在线观看 | 久久久麻豆 | 亚洲欧美日韩精品久久久 | 久久久久久高潮国产精品视 | 成人精品一区二区三区中文字幕 | 久久伊人婷婷 | 操操日 | 久久在线免费观看视频 | 日韩二区在线 | 91成人黄色| 国产成人综合在线观看 | 久久久这里有精品 | 精品一区二区综合 | 久久尤物电影视频在线观看 | 亚洲成人精品在线观看 | www.天堂av | 婷婷综合久久 | 亚洲另类人人澡 | 国产高清不卡在线 | av网站免费在线 | 欧美福利精品 | 久久精品国产免费看久久精品 | 天天爱天天插 | 国产精品久久片 | 中文字幕在线免费看 | 亚洲小视频在线观看 | 操夜夜操 | 18久久久久| 99久久精品无码一区二区毛片 | 五月婷婷中文网 | 欧美a级免费视频 | 国产流白浆高潮在线观看 | 国产黄免费 | 探花视频免费在线观看 | 中文字幕国产亚洲 | 久久在线观看视频 | 国产国语在线 | 激情五月婷婷综合网 | 一级黄色在线视频 | 国产精品手机在线 | 天天操天天添天天吹 | 有码视频在线观看 | 黄色成人影视 | 7777精品伊人久久久大香线蕉 | 国产亚洲精品久久久久久久久久久久 | 亚州精品在线视频 | 免费a一级 | 玖玖在线播放 | 久久人人爽人人爽人人片 | 国产aaa免费视频 | 国内精品福利视频 | 在线观看成人小视频 | 怡春院av| 亚洲成人高清在线 | 免费国产视频 | 91最新国产| 日韩免费观看一区二区 | japanesefreesexvideo高潮 | 狠狠狠色丁香婷婷综合久久五月 | 天天干天天射天天操 | av不卡在线看 | 免费在线观看a v | 91亚州 | 1024手机基地在线观看 | 日韩精品一区二区免费视频 | 欧美视频日韩 | 久久艹免费 | 国产在线观看午夜 | 久操伊人 | 亚洲一级性 | 国产一级二级三级在线观看 | 91精品国产99久久久久久红楼 | 99久久99久久综合 | 国产精品久久久久一区 | 精品在线观看一区二区 | 日本精品视频在线观看 | 精品中文字幕在线观看 | 婷婷丁香激情五月 | 91av精品 | 国产色道 | 精产嫩模国品一二三区 | 亚洲视频免费 | 99国内精品久久久久久久 | 国产剧情一区二区 | 中文字幕一区二区三区在线视频 | 日韩成人邪恶影片 | 国产精品中文字幕av | 日本狠狠色| 免费日p视频 | 在线网站黄 | 国产 一区二区三区 在线 | 国产91对白在线播 | 国产精品aⅴ | 欧美 日韩 国产 中文字幕 | 奇米网777| 亚洲黄色免费在线看 | 最新av免费在线 | 日韩欧美视频免费在线观看 | 亚洲毛片一区二区三区 | 成人在线播放免费观看 | 天堂av在线7 | 亚州av网站大全 | 日本中文字幕在线视频 | 久久超碰99| 2023亚洲精品国偷拍自产在线 | 欧美性成人 | 日韩中文字幕网站 | 日韩在线网址 | 日韩激情视频在线 | 丁香六月激情 | 日韩精品在线看 | 色综合久久五月天 | 色在线视频网 | www黄| 成人免费视频视频在线观看 免费 | 免费看的黄网站软件 | 在线观看视频免费大全 | 丁香婷婷深情五月亚洲 | 日本高清久久久 | 美女免费电影 | 欧美在线a视频 | 丁香九月婷婷 | 日批视频国产 | 欧美国产亚洲精品久久久8v | 精品国产乱码久久久久久1区2匹 | 成人午夜黄色 | 三上悠亚一区二区在线观看 | 国产中文视 | 国色天香永久免费 | 国产精品一区二区三区在线免费观看 | 国产亚洲精品久久 | 在线草| 高清有码中文字幕 | 丁香婷婷色月天 | 亚洲综合欧美精品电影 | 国产亚洲精品女人久久久久久 | 高清国产一区 | av黄色大片 | 国产黄色在线网站 | 涩av在线 | 精品亚洲男同gayvideo网站 | 91插插视频 | 久久免费视频7 | 国产原创在线观看 | 久久国际影院 | 99久精品视频 | 久久人人精品 | 国产美女被啪进深处喷白浆视频 | 中文字幕日韩精品有码视频 | 精品毛片一区二区免费看 | 一二区av| 国产伦理精品一区二区 | 91麻豆传媒| 国产精品久久久久久久午夜 | 久久婷婷一区二区三区 | 99精品久久久久久久久久综合 | 手机av在线不卡 | 亚洲精品视频偷拍 | 亚洲久草在线视频 | 在线a人片免费观看视频 | 婷婷av网站| 久久影视中文字幕 | 国产精品日韩久久久久 | 黄色av一区 | 日韩网站中文字幕 | 欧美xxxxx在线视频 | 国产成人精品一区二区三区在线 | 日韩手机在线 | 亚洲一级特黄 | 日本在线观看一区二区三区 | 成人免费91 | 久草在线99 | 日韩三级免费 | 国产又粗又猛又爽又黄的视频先 | 99免费看片 | 亚洲精品在线视频 | 97视频免费 | 五月婷婷视频 | 欧美日韩免费观看一区二区三区 | 中文字幕一区二区三区精华液 | 久久狠狠婷婷 | 天天干夜夜夜操天 | 五月婷婷在线观看视频 | 久久五月精品 | 香蕉精品视频在线观看 | 玖玖玖在线 | 日本久久久亚洲精品 | 久久免视频 | 国产精品中文字幕av | 国产成人专区 | 91精品国产成人www | 麻豆91精品 | 亚洲欧洲中文日韩久久av乱码 | 久久综合色播五月 | 日韩欧美精品一区 | 日本精油按摩3 | 欧美色婷 | 9在线观看免费高清完整 | 91麻豆精品久久久久久 | 97激情影院 | av在线免费在线观看 | 一区二区中文字幕在线播放 | 中文在线字幕免费观看 | 日韩精品一区二区三区高清免费 | 久久精品视频5 | 美女视频黄免费 | 天天爱天天操天天干 | 69精品在线| 五月天久久久久 | 亚洲天天摸日日摸天天欢 | 国产精品男女视频 | 欧美亚洲久久 | 综合亚洲视频 | 一级黄视频 | 免费激情网 | 免费看特级毛片 | 特片网久久 | 激情av综合 | 久久久久国 | 免费色婷婷 | aaa亚洲精品一二三区 | 日韩精品在线看 | 亚洲精品国偷拍自产在线观看 | 久久综合福利 | 日韩电影久久 | 国内精品久久天天躁人人爽 | www视频免费在线观看 | 成人av影视在线 | 亚洲国产精品人久久电影 | 免费观看特级毛片 | 国产精品综合久久久久 | 久久视频在线视频 | 久久久国产高清 | 欧美一区二区在线免费看 | 国产专区在线视频 | 午夜电影中文字幕 | 日韩av免费观看网站 | 亚洲永久精品国产 | 色爱成人网 | 91三级视频 | 激情综合网天天干 | 狠狠色婷婷丁香六月 | 欧美成年黄网站色视频 | 免费av观看| 欧美视频日韩视频 | 午夜精品久久久久久久99婷婷 | 丁香婷婷激情国产高清秒播 | 欧美在线一二 | 四虎成人精品永久免费av九九 | www日韩在线观看 | 中文字幕亚洲不卡 | 精品视频99| av丝袜制服| 亚洲影院国产 | 欧美日韩中文国产一区发布 | 99视频精品免费视频 | 激情电影影院 | 国内少妇自拍视频一区 | 91精品国产自产在线观看 | 99久久99热这里只有精品 | 视频在线一区二区三区 | 97福利社 | 日韩av一区二区在线播放 | 国产一区二区三区四区大秀 | 久久久久久久久久久久影院 | 日日狠狠 | 一区二区三区四区精品 | 精品亚洲成a人在线观看 | 国产精品国产三级在线专区 | 日本久久精品视频 | 亚洲国产网址 | 一级国产视频 | 在线观看深夜福利 | 国产一二区视频 | 国产又粗又猛又色又黄网站 | 精品久久久久免费极品大片 | 色网av| 激情网站免费观看 | 免费又黄又爽的视频 | 久久精品视频国产 | 亚洲片在线观看 | 中文字幕制服丝袜av久久 | 天天透天天插 | 又黄又爽又刺激的视频 | 久久影视中文字幕 | 精品视频资源站 | 日韩欧美精品一区二区三区经典 | 天天爽天天碰狠狠添 | 天天躁日日躁狠狠 | 热久久免费视频 | 黄色1级毛片 | 久久久久福利视频 | 久久久久亚洲精品成人网小说 | 中文字幕影片免费在线观看 | 国产在线视频一区二区三区 | 日本精品在线看 | 一区二区三区日韩视频在线观看 | 欧美在线观看视频免费 | 国产字幕在线播放 | 免费精品 | 在线观看麻豆av | 一级黄色在线免费观看 | 玖玖在线观看视频 | 国产精品xxxx18a99 | 91av视频在线播放 | 2019av在线视频 | 欧美久久九九 | 成人a级网站 | 成 人 黄 色视频免费播放 | 91天堂素人约啪 | 国产成人av免费在线观看 | 日韩精品久久一区二区 | 免费成人av在线看 | 91精品国产麻豆国产自产影视 | 99久久精品一区二区成人 | 精品免费观看视频 | 青青久草在线 | 99久久999久久久精玫瑰 | 丰满少妇对白在线偷拍 | 激情视频亚洲 | 91视频啪| 亚洲精品影视在线观看 | 国产视频日韩视频欧美视频 | 亚洲欧美少妇 | 国产精品一区二区久久精品爱涩 | 日本午夜在线观看 | 视频一区视频二区在线观看 | 成人黄色av网站 | 狠狠躁日日躁狂躁夜夜躁av | 国产精品嫩草55av | 中文字幕高清 | 久久久免费 | 久久这里只有精品9 | 999精品网 | 亚洲国产成人在线播放 | 国产一区二区三区免费视频 | 夜夜操网站 | 狠狠色丁香婷婷综合基地 | 一区二区在线电影 | 免费手机黄色网址 | 最新免费av在线 | 欧美日韩国产精品爽爽 | 日本久久精品视频 | 久久婷婷精品 | av高清一区二区三区 | 国产视频亚洲视频 | 成年人免费看片网站 | 性色xxxxhd| 日韩在线免费 | 美女视频黄网站 | 天天曰视频 | 在线蜜桃视频 | 国产不卡视频在线 | 99久久久久国产精品免费 | 国产精品成人国产乱 | 国产精品久久久久一区二区三区 | 日韩www在线 | www五月天婷婷 | 国产高清视频色在线www | 国内外成人免费在线视频 | 99视频在线精品免费观看2 | 欧美国产一区二区 | 五月激情在线 | 亚洲午夜久久久久久久久 | 99久热在线精品视频 | 精品久久久免费 | 久久毛片高清国产 | 国际精品网| 日韩精品一区在线播放 | 国产精品美女久久久久久久久 | 免费黄在线观看 | 三级黄色理论片 | 国产手机在线精品 | 国产传媒一区在线 | 超碰99在线 | 国产一区二区三区四区大秀 | 亚洲精品成人av在线 | 国产亚洲va综合人人澡精品 | 精品99在线视频 | 色久av| 精品国产日本 | 国产精品午夜在线观看 | 久久久久久久精 | 天天干天天干天天干天天干天天干天天干 | 在线免费黄色毛片 | av丝袜天堂 | 99久在线精品99re8热视频 | 日本久久免费视频 | 免费看成人a | 一区二区三区国产欧美 | 综合网欧美 | 日日夜夜精品视频 | 国产麻豆精品久久 | 亚洲色图 校园春色 | 国产精品18久久久久久久网站 | 免费亚洲视频 | 欧美在线视频一区二区三区 | 99色免费视频 | 国产做aⅴ在线视频播放 | 日本亚洲国产 | www视频在线观看 | 在线视频 影院 | 国产小视频免费观看 | 免费日韩一区 | 国产日产亚洲精华av | 天天狠狠操 | 麻豆视频免费在线观看 | 在线免费观看成人 | 国产精品网红直播 | 一区二区av| 日日夜夜综合网 | 美女黄视频免费 | 欧美久久久影院 | 免费高清在线视频一区· | 91在线欧美| 九九九九色 | 国产麻豆精品一区二区 | 婷婷亚洲综合五月天小说 | 99爱精品在线 | 天天操天天能 | 一区二区三区四区五区在线视频 | 亚洲成人网在线 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 国产亚洲精品综合一区91 | 亚洲三级黄色 | 久久狠狠一本精品综合网 | 国产精品免费久久 | 91av原创| 国偷自产中文字幕亚洲手机在线 | 亚洲在线视频网站 | 国产最新在线视频 | 丁香婷婷久久 | 91精品视频网站 | 99久久久成人国产精品 | 又黄又爽又无遮挡的视频 | 91视频成人免费 | 国产日韩欧美在线影视 | 亚洲波多野结衣 | 在线观看精品一区 | 久久一精品 | 美女免费网站 | 操操操天天操 | 国产精品一区二区吃奶在线观看 | 免费亚洲视频 | 久久精品99国产精品亚洲最刺激 | 国产精品久久久久久久久久久免费 | 亚洲 欧美日韩 国产 中文 | 中文字幕丝袜制服 | 成人av片免费观看app下载 | 成在人线av| 在线 视频 亚洲 | 在线va视频 | 69国产盗摄一区二区三区五区 | 亚洲精品97 | 天天干天天玩天天操 | 福利视频一区二区 | 日韩视频一二三区 | 天天操天天是 | 国产视 | 天天干天天天 | 免费看日韩片 | 视频成人永久免费视频 | 精品毛片一区二区免费看 | 欧美资源在线观看 | 久草9视频| 成年人在线| 中文字幕一区二区三区在线视频 | 婷婷成人综合 | 欧美日本在线视频 | 99精品免费观看 | 色婷婷综合久久久中文字幕 | 99精品视频在线免费观看 | 欧美 日韩 性| 天天做日日爱夜夜爽 | 久草在线视频首页 | 欧美一区二区日韩一区二区 | 干综合网| 色吧久久 | 国产日韩欧美在线一区 | 2024国产精品视频 | 欧美 日韩 国产 成人 在线 | 国产h片在线观看 | 精品久久久久国产 | 97精品一区二区三区 | 久久a v视频 | 中文字幕在线看视频 | 激情婷婷在线观看 | 国产一级片免费观看 | 国产高清视频免费最新在线 | 欧美日韩国产色综合一二三四 | 国产视频导航 | 国产成人精品一区二 | a在线观看国产 | 91成人在线视频观看 | 欧美日韩精品在线观看 | 欧美另类交人妖 | 色瓜| 在线只有精品 | 久久综合9988久久爱 | 天天操天天色综合 | 亚洲夜夜网 | 亚洲乱码国产乱码精品天美传媒 | 中文资源在线官网 | 欧美巨乳网 | 国产一线二线三线在线观看 | 91香蕉国产在线观看软件 | 91在线看黄| 九九在线国产视频 | 久久香蕉一区 | 久久成人午夜视频 | 精品国产福利在线 | 国产精品1000 | 国产精品久久久久久电影 | 丁香色婷 | 美女精品 | 国产精品三级视频 | 国产精品视频永久免费播放 | 亚洲综合色丁香婷婷六月图片 | 成人欧美一区二区三区黑人麻豆 | 久久久久国产精品免费免费搜索 | 久久久久久久国产精品 | 色婷婷在线播放 | 99久久网站 | 六月激情| 免费观看成人网 | 日韩高清毛片 | 亚洲一区久久 | 一区二区 不卡 | 成人av日韩| av在线短片| 成人四虎影院 | 91精品视频播放 | 狠狠搞,com | 四虎成人精品在永久免费 | 波多野结衣电影一区二区三区 | 日韩免费在线网站 | 91黄色在线看| 欧美一二三视频 | 精品一区二区免费视频 | 久久国产精品成人免费浪潮 | 99精品在线免费 | 国产美腿白丝袜足在线av | 狠狠干在线 | 国产黄| 婷婷丁香五| 国产高清亚洲 | 日韩高清不卡一区二区三区 | 亚洲黄色大片 | 丁香六月久久综合狠狠色 | 日韩欧美一区二区在线 | 四虎国产永久在线精品 | 又黄又刺激的视频 | 五月天婷婷狠狠 | 日日射av | 久草资源在线 | 成人啊 v | 国产一区久久 | 五月天婷婷在线视频 | 亚洲国产日韩在线 | 狠狠躁夜夜a产精品视频 | 日韩视频在线观看视频 | 色999五月色| 日韩视频在线不卡 | 18久久久| 99热精品久久| 在线视频手机国产 | 成人久久网 | 免费的成人av | 五月天六月婷婷 | 久久久人人人 | 特黄特黄的视频 | 久草91视频 | 久久免费黄色大片 | 最近中文字幕高清字幕在线视频 | 日韩精品在线一区 | 国产系列在线观看 | 免费热情视频 | 国产精品男女视频 | a天堂一码二码专区 | 国产亚洲精品久久久久久移动网络 | 96av麻豆蜜桃一区二区 | 激情五月在线观看 | 国产日韩中文在线 | 日韩字幕 | 中文字幕在线视频一区二区 | 天天综合操 | 黄色在线免费观看网址 | 国产中文字幕大全 | 国内精品视频一区二区三区八戒 | av片在线观看免费 | 超碰人人干人人 | 久久国产精品久久国产精品 | 久久这里只精品 | 午夜视频在线观看欧美 | 久久黄色免费 | 91黄色成人 | 午夜av在线免费 | 成人av片免费看 | 精品国产乱子伦一区二区 | 国产精品久久久久影院日本 | 丁香婷婷激情国产高清秒播 | 成人免费在线看片 | 区一区二区三在线观看 | av电影免费在线播放 | 亚洲天堂社区 | 国产精品视频免费看 | 日韩字幕在线观看 | 干狠狠 | 国产精品美女999 | 九九热视频在线播放 | 中国一级片在线 | 欧美性黄网官网 | 国产成人精品久久亚洲高清不卡 | 中文有码在线视频 | 999在线观看视频 | 亚洲一区二区视频在线 | 天天操天天操天天操天天操天天操天天操 | 伊人av综合 | 国产永久网站 | 国产免费一区二区三区最新6 | 亚洲国产免费看 | 国产一级大片在线观看 | 日韩xxx视频 | 亚洲一区视频免费观看 | 在线一级片 | 久久黄色美女 | 久久只精品99品免费久23小说 | av在线播放网址 | 在线观看韩国av | 日韩成人中文字幕 | 久久成年人 | 国产中文字幕视频在线观看 | 色吊丝av中文字幕 | 欧美一区二区三区在线看 | 91久久久久久国产精品 | 久久观看免费视频 | 久久久亚洲国产精品麻豆综合天堂 | 99热官网 | 国产精品久久精品 | 国产老太婆免费交性大片 | 国产原创中文在线 | 日韩首页 | 91在线porny国产在线看 | 成人国产精品久久久 | 91av视频| 免费一级特黄毛大片 | 三级黄色大片在线观看 | 精品乱码一区二区三四区 | 丁香九月激情综合 | 在线观看黄色大片 | 中文字幕亚洲五码 | 国内少妇自拍视频一区 | 国产亚洲精品久久久久秋 | 伊人婷婷激情 | 欧美性超爽 | 日韩av免费一区二区 | 香蕉影视在线观看 | 精品成人网 | 精品亚洲视频在线观看 | 色综合久久久久久久 | 婷婷开心久久网 | 国产成人久久久久 | 探花视频在线版播放免费观看 | 九九三级毛片 | 婷婷色综合网 | 日韩精品综合在线 | 日韩大片在线观看 | 黄色资源在线 | 日韩一区二区三区高清在线观看 | 中文字幕日韩精品有码视频 | 国内精品国产三级国产aⅴ久 | 久久精品久久精品 | 黄色毛片大全 | 国产日产精品一区二区三区四区的观看方式 | 亚洲一区二区麻豆 | 9草在线 | 国产精品久久久久久久久久 | 亚洲黄在线观看 | 久久久999免费视频 日韩网站在线 | 亚洲国产中文在线 | 午夜久久福利视频 | 国产黄a三级三级三级三级三级 | 天天草天天干 | 国产专区免费 | 在线中文字幕观看 | 日韩伦理片hd | 国产伦精品一区二区三区四区视频 | 久久久久久久久久毛片 | 亚洲一区在线看 | www.夜夜骑.com | 免费成人结看片 | 久久久国产毛片 | 国产99一区| 九九亚洲精品 | 99免费在线观看视频 | 黄色免费看片网站 | 久久精品成人 | 永久精品视频 | 亚洲午夜久久久久 | 国产手机在线 | 麻豆国产电影 | 美女精品久久久 | 日韩毛片在线播放 | 欧美 日韩 成人 | 韩国av电影在线观看 | 国产精品久久久久久吹潮天美传媒 | 国产精品久久久久久久久久久久午夜 | 一区二区三区高清在线观看 | 天天天天天天干 | 久久久久久久网站 | 干综合网 | 日本三级香港三级人妇99 | 一区二区三区四区五区六区 | 国产一级片网站 | 91大神视频网站 | 天天爱av导航 | 91视频国产高清 | 久久精品导航 | 在线成人短视频 | 九九九热精品免费视频观看 | 色在线高清 | 免费美女av | 国产成人精品久久久 | avwww在线观看 | 久草在线在线精品观看 | 麻豆精品视频在线 | 最近中文字幕视频完整版 | 欧美色图30p| 美女久久久久久久 | 国产一区二区不卡在线 | 国产区精品区 | 97人人模人人爽人人喊网 | 亚洲第一香蕉视频 | 日韩理论 | 精品国偷自产在线 | 欧美午夜视频在线 | 亚洲精品999 | 日韩免费一区二区在线观看 | 99re久久资源最新地址 | 久草在线视频在线观看 | 久久国产网 | 欧美一二三区在线观看 | 国产免费一区二区三区最新6 | 91视频com| 免费看黄的视频 | 精品 激情| 天天干天天干天天 | 日韩精品中文字幕在线不卡尤物 | 色资源网在线观看 | 97色狠狠| 亚洲码国产日韩欧美高潮在线播放 | 欧美小视频在线观看 | 99精品视频精品精品视频 | 在线观看韩国av | 欧美日韩中文国产 | 日本最新一区二区三区 | 91精品网站在线观看 | 免费视频区| 手机av在线免费观看 | 久久在线一区 | 日韩在线免费小视频 | 麻豆国产电影 | 免费在线一区二区 | 三级a毛片 | 操操日日 | 99久久激情 | 在线一区二区三区 | www.天天射.com | 四虎影视成人 | 天天爱天天色 | 一区二区三区 亚洲 | 97视频在线免费播放 | 五月天激情电影 | 午夜色影院| 欧美午夜精品久久久久 | 免费不卡中文字幕视频 | 精品一二三区 | 五月婷婷综合在线观看 | 在线你懂的视频 | av一级久久 | 久久久婷 | 久影院 | 91麻豆精品91久久久久同性 | 久久福利在线 | 久久亚洲精品国产亚洲老地址 | 91 中文字幕| 久久亚洲美女 | 精品久久影院 | 欧美日韩久久一区 | 亚洲成人999| 天堂麻豆 | 92中文资源在线 | 欧美一区二区精品在线 | www.eeuss影院av撸 | 91九色自拍 | 天天想夜夜操 | 九草在线观看 | 九九久久久久久久久激情 | 99九九99九九九视频精品 | 美国av片在线观看 | 亚洲一区二区三区精品在线观看 | 久久久久久美女 | 久久精品视频在线免费观看 | www.久久91 | 日日爱影视| 激情综合色播五月 | 成人影片在线免费观看 | 天天爱天天爽 | 久久另类小说 | 国产爽妇网 | 伊人av综合 | 国产精品18毛片一区二区 | 最新免费av在线 | 天堂麻豆 |