久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Linux虛擬串口調(diào)試:破解特殊字節(jié)與二進(jìn)制安全陷阱

Linux虛擬串口調(diào)試:破解特殊字節(jié)與二進(jìn)制安全陷阱 干了這么多年Linux下的串口調(diào)試我越來(lái)越覺得一個(gè)反直覺的現(xiàn)象很有意思真正把人折磨到崩潰的往往不是波特率沒對(duì)上、數(shù)據(jù)位配錯(cuò)這種明面上的參數(shù)問題而是數(shù)據(jù)流里某個(gè)不起眼的“特殊字節(jié)”。它可能只是一個(gè)普通的0x00、0x11、0x13平時(shí)安安靜靜躺在緩沖區(qū)里但一旦被終端驅(qū)動(dòng)、庫(kù)函數(shù)或者業(yè)務(wù)邏輯以特殊方式解釋輕則數(shù)據(jù)截?cái)嘀貏t整個(gè)協(xié)議狀態(tài)機(jī)錯(cuò)亂表現(xiàn)還極其隱蔽。這篇文章圍繞虛擬串口的搭建、調(diào)試和自動(dòng)化測(cè)試展開重點(diǎn)拆解那些“特殊字節(jié)”到底特殊在哪里以及我在研發(fā)調(diào)試、測(cè)試模擬、硬件聯(lián)調(diào)三個(gè)場(chǎng)景里踩過(guò)的坑和沉淀下來(lái)的排查鏈路。無(wú)論你是單片機(jī)工程師、嵌入式Linux開發(fā)者還是做自動(dòng)化測(cè)試的QA只要手里有串口協(xié)議要調(diào)這篇文章應(yīng)該能幫你少走不少?gòu)澛贰?. 虛擬串口解決的真實(shí)問題從設(shè)備不足到異常場(chǎng)景構(gòu)造1.1 物理串口在開發(fā)調(diào)試中的天然瓶頸做嵌入式或者物聯(lián)網(wǎng)開發(fā)的人對(duì)這套流程應(yīng)該不陌生拿到一塊開發(fā)板先用USB轉(zhuǎn)串口線接到電腦打開終端工具波特率設(shè)好開始看日志。單個(gè)設(shè)備這么調(diào)沒問題但一旦進(jìn)入多設(shè)備并發(fā)調(diào)試物理串口的瓶頸立刻暴露出來(lái)。電腦上的串口資源是有限的臺(tái)式機(jī)可能只有一兩個(gè)板載串口筆記本基本只能靠USB轉(zhuǎn)串口擴(kuò)展插多了USB Hub供電還不穩(wěn)定。更要命的是物理串口調(diào)試沒法方便地構(gòu)造異常場(chǎng)景你要模擬設(shè)備突然斷開、模擬某段數(shù)據(jù)丟失、模擬對(duì)端發(fā)來(lái)一個(gè)帶控制字符的幀靠硬件設(shè)備很難穩(wěn)定復(fù)現(xiàn)。虛擬串口恰恰解決了這兩個(gè)痛點(diǎn)。它用軟件在系統(tǒng)里模擬出一對(duì)相互連接的串口設(shè)備你可以在開發(fā)機(jī)上無(wú)限創(chuàng)建這樣的串口對(duì)一頭接被測(cè)程序一頭接測(cè)試腳本把數(shù)據(jù)鏈路徹底從硬件中解放出來(lái)。1.2 虛擬串口為什么能做到“以假亂真”很多人第一次接觸虛擬串口時(shí)都會(huì)問這玩意兒和真實(shí)的串口芯片有什么區(qū)別軟件模擬的東西時(shí)序上會(huì)不會(huì)差很多要回答這個(gè)問題得先理解Linux里串口通信的抽象模型。對(duì)應(yīng)用程序來(lái)說(shuō)串口就是一個(gè)字符設(shè)備文件你在/dev/ttyS0或者/dev/ttyUSB0上做open/read/write驅(qū)動(dòng)負(fù)責(zé)把數(shù)據(jù)搬運(yùn)到硬件FIFO再由UART芯片完成電平轉(zhuǎn)換和收發(fā)。應(yīng)用層并不關(guān)心電平怎么跳變、起始位停止位怎么對(duì)齊它只關(guān)心read能讀到什么、write寫出去什么。虛擬串口正是利用了這個(gè)抽象層。它最常見的實(shí)現(xiàn)方式是基于內(nèi)核的偽終端pty機(jī)制通過(guò)軟件在內(nèi)存里模擬出一對(duì)互相連接的終端設(shè)備。一端寫入的數(shù)據(jù)立刻可以從另一端讀出來(lái)效果就像一根虛擬的串口線把兩個(gè)程序連在一起。因?yàn)檎麄€(gè)數(shù)據(jù)通路都在內(nèi)存里沒有物理硬件的參與所以時(shí)序的一致性反而比某些劣質(zhì)USB轉(zhuǎn)串口芯片更穩(wěn)定。但這也就引出了一個(gè)關(guān)鍵認(rèn)知虛擬串口模擬的是“串口這個(gè)軟件抽象”不是模擬“UART芯片的電氣行為”。如果你把虛擬串口當(dāng)成物理串口的完整替代品去驗(yàn)證電平信號(hào)、驗(yàn)證硬件流控的物理表現(xiàn)那它做不到。但如果你只是想驗(yàn)證協(xié)議棧、數(shù)據(jù)幀解析、超時(shí)重傳邏輯虛擬串口完全夠用而且比物理串口更好用。我個(gè)人的實(shí)踐體會(huì)是虛擬串口在研發(fā)調(diào)試階段的價(jià)值遠(yuǎn)不止“替代物理串口”這么簡(jiǎn)單。它真正讓人上癮的能力是你可以人為地往數(shù)據(jù)鏈路里注入各種邊界數(shù)據(jù)而這些操作在物理串口上基本不可控。1.3 虛擬串口適合誰(shuí)、不適合誰(shuí)先說(shuō)不適合的場(chǎng)景如果你要驗(yàn)證UART驅(qū)動(dòng)的DMA搬運(yùn)邏輯、要測(cè)量中斷延遲對(duì)收發(fā)時(shí)序的影響、要確認(rèn)RS485方向切換的硬件行為虛擬串口幫不了你這些必須上真實(shí)硬件。再說(shuō)適合的場(chǎng)景協(xié)議棧開發(fā)、上位機(jī)解析邏輯調(diào)試、固件通信模塊聯(lián)調(diào)、自動(dòng)化回歸測(cè)試、多設(shè)備并發(fā)數(shù)據(jù)鏈路驗(yàn)證。這些場(chǎng)景的共同特征是你關(guān)心的是“字節(jié)級(jí)的數(shù)據(jù)內(nèi)容”和“邏輯層的時(shí)序配合”而不是“電氣層的信號(hào)細(xì)節(jié)”。一句話總結(jié)物理串口驗(yàn)證硬件虛擬串口驗(yàn)證邏輯。把這兩個(gè)場(chǎng)景分清楚你在后續(xù)調(diào)試中就不會(huì)被“虛擬串口到底靠不靠譜”這種問題反復(fù)糾纏。2. 那個(gè)“特殊字節(jié)”二進(jìn)制安全與控制字符的真相2.1 不是每個(gè)字節(jié)都生而平等標(biāo)題里那個(gè)“特殊的字節(jié)”是我在這篇文章里最想展開的點(diǎn)。串口協(xié)議本質(zhì)上是個(gè)字節(jié)流協(xié)議它不區(qū)分“數(shù)據(jù)字節(jié)”和“控制字節(jié)”——對(duì)UART芯片來(lái)說(shuō)0x00和0x41沒有任何區(qū)別都是一樣的電平翻轉(zhuǎn)。但對(duì)上層的終端驅(qū)動(dòng)、庫(kù)函數(shù)和業(yè)務(wù)代碼來(lái)說(shuō)某些字節(jié)攜帶了特殊語(yǔ)義處理不當(dāng)就會(huì)出問題。最常見的幾個(gè)特殊字節(jié)有這些字節(jié)特殊含義踩坑場(chǎng)景0x00空字節(jié)C字符串終止符用字符串函數(shù)處理二進(jìn)制幀數(shù)據(jù)被截?cái)?x0A換行符LF終端驅(qū)動(dòng)開啟換行轉(zhuǎn)換數(shù)據(jù)被篡改0x0D回車符CR與0x0A配合時(shí)可能被轉(zhuǎn)換成單個(gè)換行0x11XON字符軟件流控開啟時(shí)被解釋為“恢復(fù)發(fā)送”0x13XOFF字符軟件流控開啟時(shí)被解釋為“暫停發(fā)送”0x1AEOF標(biāo)記某些協(xié)議和庫(kù)把它當(dāng)作文件結(jié)束符這里面的關(guān)鍵在于同樣是0x00在文本協(xié)議里它是正常的數(shù)據(jù)內(nèi)容但在以字符串為核心處理邏輯的代碼里它就成了“到此為止”的哨兵。我見過(guò)太多人在串口調(diào)試上栽跟頭根源不是在協(xié)議設(shè)計(jì)上而是在語(yǔ)言和庫(kù)的字符串處理機(jī)制上。2.2 termios標(biāo)志位虛擬串口調(diào)試的頭號(hào)陷阱很多人以為虛擬串口是純軟件模擬不存在物理硬件的參數(shù)設(shè)置問題所以直接打開設(shè)備就開始讀寫然后發(fā)現(xiàn)收上來(lái)的數(shù)據(jù)和發(fā)出去的對(duì)不上。排查半天問題往往出在termios的默認(rèn)配置上。Linux的串口驅(qū)動(dòng)遵循POSIX終端接口規(guī)范設(shè)備打開后會(huì)套用一套默認(rèn)的終端行為。這套默認(rèn)行為對(duì)“人機(jī)交互終端”是合理的但對(duì)“數(shù)據(jù)通信串口”就是災(zāi)難。比如默認(rèn)模式下收到0x0D會(huì)被轉(zhuǎn)換成0x0AICRNL標(biāo)志輸出時(shí)0x0A會(huì)被轉(zhuǎn)換成0x0D 0x0AOPOST標(biāo)志收到CtrlC、CtrlZ這類信號(hào)字符會(huì)直接觸發(fā)中斷或者掛起ISIG標(biāo)志收到字節(jié)還會(huì)回顯到發(fā)送端ECHO標(biāo)志。這些默認(rèn)行為在交互式終端里是貼心功能在串口數(shù)據(jù)通信里就是數(shù)據(jù)篡改器。你在虛擬串口一端寫入0x0A另一端讀到的可能變成了0x0D 0x0A你在二進(jìn)制幀里帶了個(gè)0x13對(duì)方平臺(tái)如果開了軟件流控直接就把你的數(shù)據(jù)吞了。所以虛擬串口調(diào)試的第一個(gè)規(guī)范動(dòng)作就是把串口設(shè)為raw模式。用stty命令可以快速搞定stty -F /dev/pts/3 raw -echo -ixon -ixoff這里面的關(guān)鍵參數(shù)拆開看raw關(guān)閉所有輸入輸出轉(zhuǎn)換數(shù)據(jù)原樣透?jìng)?echo關(guān)閉回顯防止數(shù)據(jù)被彈回發(fā)送端-ixon關(guān)閉軟件流控的輸入解釋0x11/0x13不再被當(dāng)作XON/XOFF-ixoff關(guān)閉軟件流控的輸出控制避免系統(tǒng)自動(dòng)發(fā)送流控字符如果用Python或者其他語(yǔ)言寫調(diào)試工具也需要在打開串口后顯式設(shè)置termios。Python的serial庫(kù)或者直接操作termios模塊都能做到。我在項(xiàng)目里一般直接用termios.tcsetattr把c_iflag、c_oflag、c_lflag全部清零c_cflag只保留波特率和數(shù)據(jù)位設(shè)置效果等同于raw模式。2.3 特殊字節(jié)的經(jīng)典翻車實(shí)錄這里分享一個(gè)我實(shí)際處理過(guò)的案例。某項(xiàng)目需要用虛擬串口模擬一臺(tái)溫控設(shè)備協(xié)議約定設(shè)備上電后先發(fā)送幀頭0xAA 0x55然后跟著16字節(jié)的狀態(tài)數(shù)據(jù)最后是2字節(jié)CRC校驗(yàn)。上位機(jī)用某圖形化串口庫(kù)按幀讀取邏輯上看起來(lái)沒有毛病——先讀兩個(gè)字節(jié)校驗(yàn)幀頭再按長(zhǎng)度讀數(shù)據(jù)然后校驗(yàn)CRC。但實(shí)際跑起來(lái)偶發(fā)出現(xiàn)幀錯(cuò)位往往讀到幀頭后下一個(gè)字節(jié)根本對(duì)不上數(shù)據(jù)解析始終飄忽不定。整個(gè)團(tuán)隊(duì)排查了一個(gè)下午從波特率配置到數(shù)據(jù)位校驗(yàn)全查了一遍沒問題。最后我用xxd把虛擬串口上實(shí)際的字節(jié)流dump出來(lái)才發(fā)現(xiàn)問題狀態(tài)數(shù)據(jù)里偶爾會(huì)出現(xiàn)0x11和0x13這兩個(gè)字節(jié)而庫(kù)內(nèi)部默認(rèn)開啟了軟件流控直接把這倆字節(jié)當(dāng)成XON/XOFF控制符吞掉了。也就是說(shuō)發(fā)送端確實(shí)發(fā)出了16字節(jié)數(shù)據(jù)但接收端只收到了15字節(jié)幀結(jié)構(gòu)自然全亂了。這個(gè)案例的教訓(xùn)是凡是處理二進(jìn)制串口協(xié)議必須使用二進(jìn)制安全的讀寫方式顯式關(guān)閉一切終端轉(zhuǎn)換和流控解釋。圖形化串口工具自帶的“智能處理”在多數(shù)時(shí)候不是幫你而是在坑你。2.4 怎么做一個(gè)可靠的特殊字節(jié)探測(cè)器在虛擬串口調(diào)試中我強(qiáng)烈建議養(yǎng)成一個(gè)習(xí)慣所有數(shù)據(jù)鏈路先做一次“回環(huán)字節(jié)掃描”。方法很簡(jiǎn)單寫一個(gè)腳本把0x00到0xFF共256個(gè)字節(jié)依次發(fā)出接收端原樣回傳發(fā)送端逐一比對(duì)。只要有一個(gè)字節(jié)對(duì)不上就說(shuō)明中間某個(gè)環(huán)節(jié)在做隱式轉(zhuǎn)換。這個(gè)256字節(jié)掃描我每次搭建新的虛擬串口鏈路都會(huì)跑一遍耗時(shí)不到一秒但能排除掉絕大部分“工具自帶智能處理”導(dǎo)致的問題。跑完掃描再聯(lián)調(diào)協(xié)議出現(xiàn)數(shù)據(jù)異常時(shí)你就可以放心地把矛頭對(duì)準(zhǔn)業(yè)務(wù)邏輯而不是懷疑鏈路本身。3. 從零搭建虛擬串口鏈路工具選型與參數(shù)細(xì)節(jié)3.1 socatLinux下最順手的虛擬串口創(chuàng)建工具Linux下創(chuàng)建虛擬串口對(duì)最常見也是最靠譜的工具是socat。它是一個(gè)萬(wàn)能的數(shù)據(jù)通道工具可以在兩個(gè)端點(diǎn)之間建立雙向數(shù)據(jù)鏈路而端點(diǎn)可以是pty、TCP端口、文件、設(shè)備節(jié)點(diǎn)等任何東西。創(chuàng)建虛擬串口對(duì)的命令非常簡(jiǎn)單socat -d -d pty,raw,echo0 pty,raw,echo0執(zhí)行后socat會(huì)輸出兩個(gè)設(shè)備節(jié)點(diǎn)類似這樣2024/xx/xx 10:00:00 socat[12345] N PTY is /dev/pts/3 2024/xx/xx 10:00:00 socat[12345] N PTY is /dev/pts/4這時(shí)候/dev/pts/3和/dev/pts/4就是一對(duì)虛擬串口任何一端寫入的數(shù)據(jù)都能從另一端讀到。我在實(shí)際使用時(shí)通常會(huì)加上linkname參數(shù)給設(shè)備節(jié)點(diǎn)指定一個(gè)固定的符號(hào)鏈接避免每次啟動(dòng)socat設(shè)備編號(hào)都變化socat -d -d pty,raw,echo0,link/tmp/vcom0 pty,raw,echo0,link/tmp/vcom1這樣不管底層的/pts/N怎么變/tmp/vcom0和/tmp/vcom1始終指向正確的節(jié)點(diǎn)調(diào)試腳本不用跟著改路徑。這里有三個(gè)細(xì)節(jié)值得展開第一raw模式必須顯式指定。不帶raw參數(shù)的socat pty節(jié)點(diǎn)會(huì)套用終端默認(rèn)行為回車換行轉(zhuǎn)換、信號(hào)字符解釋全開著調(diào)試二進(jìn)制協(xié)議必掛。加上raw之后數(shù)據(jù)在pty兩端透?jìng)鞑粨诫s任何轉(zhuǎn)換邏輯。第二echo0必須顯式指定。默認(rèn)情況下pty是帶回顯的你從一端寫入的數(shù)據(jù)除了從另一端讀出來(lái)還會(huì)原樣彈回發(fā)送端。如果你在調(diào)試腳本里先write再read極大概率讀到的是自己剛發(fā)出去的數(shù)據(jù)而不是對(duì)端真正的響應(yīng)。這個(gè)坑非常隱蔽因?yàn)閱慰词瞻l(fā)數(shù)據(jù)好像都正常但邏輯對(duì)不上。第三不要用socat的-d -d就把日志打印全開。-d -d是輸出錯(cuò)誤和警告信息如果要調(diào)試socat本身的數(shù)據(jù)流轉(zhuǎn)需要加-d -d -d甚至更多但日志太詳細(xì)會(huì)影響性能。實(shí)際調(diào)試中很少需要查看socat內(nèi)部日志直接抓業(yè)務(wù)側(cè)數(shù)據(jù)就夠了。3.2 兼容方案沒有socat的環(huán)境怎么辦有些嵌入式開發(fā)環(huán)境或者精簡(jiǎn)版Linux系統(tǒng)里沒有socat也沒有包管理器可以方便地裝。這時(shí)候可以用Python的內(nèi)置庫(kù)寫一個(gè)最小虛擬串口對(duì)核心思路是借助pty模塊打開偽終端再用select做雙向轉(zhuǎn)發(fā)。import os import pty import select def bridge(master_fd, slave_fd): while True: rlist, _, _ select.select([master_fd, slave_fd], [], []) for fd in rlist: data os.read(fd, 1024) target slave_fd if fd master_fd else master_fd os.write(target, data) if __name__ __main__: master1, slave1 pty.openpty() master2, slave2 pty.openpty() print(fvcom0: {os.ttyname(slave1)}) print(fvcom1: {os.ttyname(slave2)}) bridge(master1, master2)這個(gè)腳本只有三十行左右核心邏輯就是select監(jiān)聽兩個(gè)master端一端有數(shù)據(jù)就寫到另一端。因?yàn)閜ty的另一端是slave節(jié)點(diǎn)對(duì)應(yīng)用層來(lái)說(shuō)就是個(gè)串口設(shè)備文件行為和不帶raw配置的socat類似需要在業(yè)務(wù)代碼里顯式設(shè)置termios為raw模式。這個(gè)方案雖然簡(jiǎn)陋但在資源受限的環(huán)境里救過(guò)我好幾次。如果對(duì)延遲有要求可以把select換成epoll但絕大多數(shù)場(chǎng)景select足夠。3.3 數(shù)據(jù)連通性驗(yàn)證別急著上業(yè)務(wù)協(xié)議虛擬串口對(duì)創(chuàng)建好之后我建議先做一個(gè)最小化的數(shù)據(jù)連通性測(cè)試再上業(yè)務(wù)協(xié)議。測(cè)試方法很簡(jiǎn)單一端寫入一段帶有明顯邊界的數(shù)據(jù)另一端讀取并對(duì)比。echo hello-vcom /tmp/vcom0 cat /tmp/vcom1這里有個(gè)細(xì)節(jié)cat會(huì)一直等待輸入直到遇到EOF而在pty上EOF的觸發(fā)條件是兩端都關(guān)閉。所以上面的命令可能會(huì)卡住不要以為是鏈路問題按CtrlC退出即可。正確的做法是讀取固定長(zhǎng)度或者用超時(shí)控制。我自己更習(xí)慣用Python腳本做連通性驗(yàn)證因?yàn)榭梢跃_控制讀寫長(zhǎng)度import os fd0 os.open(/tmp/vcom0, os.O_RDWR) fd1 os.open(/tmp/vcom1, os.O_RDWR) os.write(fd0, bping) data os.read(fd1, 4) print(data) os.write(fd1, bpong) data os.read(fd0, 4) print(data)如果這一步能正確打出ping和pong說(shuō)明鏈路通了。接下來(lái)再做前面提到的256字節(jié)掃描確認(rèn)沒有隱式轉(zhuǎn)換然后才是協(xié)議聯(lián)調(diào)。把鏈路驗(yàn)證和協(xié)議驗(yàn)證分開排查問題時(shí)能省一半時(shí)間。4. 研發(fā)調(diào)試場(chǎng)景用虛擬串口把數(shù)據(jù)鏈路徹底“透明化”4.1 讓字節(jié)流“可視化”的三件套虛擬串口調(diào)試最舒服的一點(diǎn)是你可以同時(shí)在鏈路的任何一個(gè)環(huán)節(jié)插入觀測(cè)點(diǎn)。物理串口調(diào)試時(shí)想抓報(bào)文得外接一個(gè)邏輯分析儀或者用帶嗅探功能的串口工具虛擬串口完全不需要這些用命令行三件套就能完成90%的排障工作socat建鏈路、stty看參數(shù)、xxd看字節(jié)。看參數(shù)用stty -a就能把當(dāng)前串口的所有termios標(biāo)志全部列出來(lái)stty -F /tmp/vcom0 -a我每次遇到“收發(fā)數(shù)據(jù)對(duì)不上”的第一反應(yīng)就是跑這個(gè)命令看c_iflag、c_oflag、c_lflag、c_cflag四組標(biāo)志。只要看到ixon、icrnl、opost、echo這些標(biāo)志處于開啟狀態(tài)而業(yè)務(wù)又是二進(jìn)制協(xié)議那基本已經(jīng)定位到問題了——數(shù)據(jù)在終端層被動(dòng)了手腳。抓字節(jié)流用xxd可以清晰地看到每個(gè)字節(jié)的十六進(jìn)制值和ASCII解釋xxd /tmp/vcom0這條命令會(huì)把從虛擬串口讀到的數(shù)據(jù)逐字節(jié)dump出來(lái)左邊是十六進(jìn)制偏移中間是十六進(jìn)制字節(jié)右邊是ASCII字符。遇到0x11、0x13這種控制字符ASCII欄會(huì)顯示成不可打印字符的占位符一眼就能看出來(lái)。如果只想看純十六進(jìn)制不帶ASCII可以用xxd -p輸出全部是十六進(jìn)制字符串適合直接灌進(jìn)腳本做對(duì)比。也可以配合head -c指定讀取長(zhǎng)度一次只抓固定字節(jié)數(shù)。4.2 一次典型的數(shù)據(jù)幀錯(cuò)位排查鏈路我在虛擬串口調(diào)試中攢了一個(gè)典型的排查鏈路每次遇到“數(shù)據(jù)看起來(lái)對(duì)但解析不對(duì)”的問題都按這個(gè)順序走一遍。第一步確認(rèn)鏈路干凈。跑256字節(jié)掃描確認(rèn)虛擬串口兩端是原始透?jìng)髋懦齮ermios轉(zhuǎn)換的干擾。第二步抓發(fā)送端原始報(bào)文。在被測(cè)程序發(fā)送數(shù)據(jù)前加打印或者直接在虛擬串口一端用xxd抓包記錄下寫入鏈路的確切字節(jié)序列。第三步抓接收端實(shí)際報(bào)文。在接收程序解析前用xxd抓包記錄下從鏈路讀到的確切字節(jié)序列。第四步逐字節(jié)對(duì)比兩個(gè)序列找到第一個(gè)分叉點(diǎn)。分叉點(diǎn)前面的數(shù)據(jù)一般是正常的分叉點(diǎn)之后的差異往往就是問題所在。這個(gè)流程說(shuō)起來(lái)簡(jiǎn)單但執(zhí)行中有個(gè)容易忽略的細(xì)節(jié)發(fā)送端和接收端的抓包必須用同一臺(tái)虛擬串口的兩端而不是在某一端同時(shí)讀寫。很多人喜歡在一端開xxd另一端跑業(yè)務(wù)程序結(jié)果看到的是回顯和自己的數(shù)據(jù)混在一起越看越糊涂。正確的做法是xxd掛在接收端一側(cè)業(yè)務(wù)程序在發(fā)送端一側(cè)或者反過(guò)來(lái)。我之前那個(gè)溫控設(shè)備的案例就是用這個(gè)流程定位到0x11字節(jié)被軟件流控吞掉的。第二條開始發(fā)出去的16字節(jié)數(shù)據(jù)里有一個(gè)0x11接收端只讀到15字節(jié)幀長(zhǎng)校驗(yàn)直接失敗。定位到分叉點(diǎn)后再去查庫(kù)的流控配置問題立刻水落石出。4.3 為什么我堅(jiān)持用os.read/os.write而不是按行讀很多人在Linux下寫串口程序習(xí)慣用C語(yǔ)言的fread/fwrite或者Python的readline這是一個(gè)非常危險(xiǎn)的慣性。串口是字節(jié)流協(xié)議它沒有“行”的概念所謂換行符0x0A只是協(xié)議里可能出現(xiàn)的普通字節(jié)。如果你用readline去讀遇到0x0A就返回一個(gè)完整的二進(jìn)制幀可能被攔腰截?cái)?。我在虛擬串口調(diào)試工具里一律使用os.read和os.write配合顯式長(zhǎng)度控制。讀取時(shí)先明確自己期望多少個(gè)字節(jié)最多加一個(gè)超時(shí)保護(hù)絕不用流式讀行。os.read按字節(jié)數(shù)讀取超時(shí)用select控制寫出去的數(shù)據(jù)再逐字節(jié)比對(duì)返回結(jié)果這套組合在二進(jìn)制協(xié)議調(diào)試中是目前最可靠的做法。舉個(gè)例子溫控設(shè)備狀態(tài)幀是2字節(jié)幀頭16字節(jié)數(shù)據(jù)2字節(jié)CRC共20字節(jié)讀取邏輯就該是import os import select def read_exact(fd, count, timeout1.0): chunks [] remaining count while remaining 0: rlist, _, _ select.select([fd], [], [], timeout) if not rlist: raise TimeoutError(fread timeout, got {len(chunks)} bytes) data os.read(fd, remaining) if not data: raise EOFError(device closed) chunks.append(data) remaining - len(data) return b.join(chunks)這個(gè)函數(shù)每次從緩沖區(qū)讀取指定數(shù)量的字節(jié)讀不滿就一直循環(huán)直到湊夠或者超時(shí)。它能保證上層拿到的永遠(yuǎn)是完整的一幀不會(huì)被readline的“行”邏輯打斷。4.4 用虛擬串口模擬“愛發(fā)不發(fā)”的對(duì)端設(shè)備研發(fā)調(diào)試中有一個(gè)高頻需求模擬一個(gè)行為不可控的對(duì)端設(shè)備比如隨機(jī)延遲響應(yīng)、偶爾丟掉一幀、某段時(shí)間持續(xù)快速發(fā)數(shù)據(jù)。物理串口很難穩(wěn)定模擬這種行為虛擬串口則可以通過(guò)用戶態(tài)腳本輕松實(shí)現(xiàn)。我最常用的是在Python腳本里加一個(gè)while循環(huán)用random模塊控制發(fā)送節(jié)奏和內(nèi)容import os import random import time fd os.open(/tmp/vcom1, os.O_RDWR) while True: frame build_frame(random.randint(0, 100)) os.write(fd, frame) time.sleep(random.uniform(0.01, 0.5)) if random.random() 0.05: time.sleep(random.uniform(0.5, 1.0))這個(gè)腳本模擬了一個(gè)“時(shí)快時(shí)慢、偶爾停擺”的對(duì)端設(shè)備。被測(cè)程序如果在這種鏈路上還能穩(wěn)定解析、超時(shí)重傳邏輯正常那基本可以放心面對(duì)真實(shí)環(huán)境的不確定性。要注意的是虛擬串口模擬的不是真正的物理抖動(dòng)而是協(xié)議層面的時(shí)序不確定性。如果你的目標(biāo)是要測(cè)量物理層的時(shí)鐘精度或者信號(hào)毛刺這個(gè)方案不適用。但對(duì)絕大多業(yè)務(wù)邏輯驗(yàn)證來(lái)說(shuō)用戶態(tài)加延遲插入抖動(dòng)已經(jīng)足夠還原真實(shí)世界的“惡意”。5. 自動(dòng)化測(cè)試設(shè)計(jì)把虛擬串口變成可回歸的數(shù)據(jù)回放機(jī)5.1 虛擬串口和自動(dòng)化測(cè)試的三個(gè)契合點(diǎn)自動(dòng)化測(cè)試最講究的就是三個(gè)詞穩(wěn)定、可重復(fù)、可重置。物理串口在這三個(gè)方面都有天然短板設(shè)備不穩(wěn)定、異常場(chǎng)景不可控、測(cè)試結(jié)束后狀態(tài)難以恢復(fù)。虛擬串口則把這三點(diǎn)都變成了優(yōu)勢(shì)。穩(wěn)定方面虛擬串口的數(shù)據(jù)通路完全在內(nèi)存里沒有物理接觸不良的問題測(cè)試時(shí)不會(huì)出現(xiàn)“昨天能跑今天不能跑”的玄學(xué)??芍貜?fù)方面虛擬串口創(chuàng)建一對(duì)設(shè)備節(jié)點(diǎn)后每次執(zhí)行測(cè)試腳本用的都是同一個(gè)路徑數(shù)據(jù)內(nèi)容完全可控任何一次的收發(fā)序列都可以精確回放??芍刂梅矫鏈y(cè)試結(jié)束后直接刪掉pty設(shè)備對(duì)重新創(chuàng)建狀態(tài)干凈得就像剛開機(jī)。5.2 數(shù)據(jù)回放機(jī)讓協(xié)議驗(yàn)證變成流水線操作自動(dòng)化測(cè)試?yán)镂伊?xí)慣把被測(cè)試程序當(dāng)成一個(gè)“黑盒”虛擬串口一頭插進(jìn)黑盒的串口入口另一頭接一個(gè)數(shù)據(jù)回放機(jī)?;胤艡C(jī)預(yù)先準(zhǔn)備好一組十六進(jìn)制報(bào)文按測(cè)試用例的時(shí)序要求依次發(fā)送同時(shí)記錄被測(cè)試程序的應(yīng)答最后和預(yù)期結(jié)果對(duì)比。寫回放機(jī)時(shí)有一個(gè)關(guān)鍵設(shè)計(jì)報(bào)文不能硬編碼在腳本里應(yīng)該放在可配置的數(shù)據(jù)文件中用一行一個(gè)幀的方式維護(hù)。這樣協(xié)議有更新時(shí)只需要改數(shù)據(jù)文件不用改測(cè)試邏輯。十六進(jìn)制報(bào)文用空格分隔十六進(jìn)制字節(jié)注釋用#開頭加載時(shí)跳過(guò)空行和注釋行解析成bytes類型?;胤艡C(jī)腳本的核心邏輯大致是這樣import os import time def load_frames(path): frames [] with open(path, r) as f: for line in f: line line.strip() if not line or line.startswith(#): continue frames.append(bytes.fromhex(line)) return frames def replay(fd, frames, interval0.05): for frame in frames: os.write(fd, frame) time.sleep(interval)這個(gè)回放機(jī)可以和pytest組織起來(lái)每個(gè)測(cè)試用例加載不同的報(bào)文文件驗(yàn)證不同場(chǎng)景。比如一個(gè)異常場(chǎng)景的用例報(bào)文文件里放幾個(gè)帶錯(cuò)誤CRC的幀驗(yàn)證被測(cè)程序的檢錯(cuò)邏輯一個(gè)邊界場(chǎng)景的用例報(bào)文里塞滿0x00、0xFF、0x11、0x13這些特殊字節(jié)驗(yàn)證協(xié)議的狀態(tài)機(jī)不會(huì)被特殊字節(jié)干擾。這里我強(qiáng)烈建議每個(gè)自動(dòng)化測(cè)試用例在開始前和結(jié)束后都重新創(chuàng)建虛擬串口對(duì)。測(cè)試開始前重新創(chuàng)建保證鏈路狀態(tài)干凈測(cè)試結(jié)束后重新創(chuàng)建清理可能殘留的緩沖數(shù)據(jù)。如果復(fù)用同一個(gè)設(shè)備節(jié)點(diǎn)跑多個(gè)用例很容易出現(xiàn)上一個(gè)用例的殘留數(shù)據(jù)混進(jìn)下一個(gè)用例的輸入流里浪費(fèi)一整天排查時(shí)間。5.3 回環(huán)探針每個(gè)自動(dòng)化用例里的“健康檢查”除了業(yè)務(wù)報(bào)文回放我還會(huì)在每個(gè)自動(dòng)化用例里加一個(gè)“回環(huán)探針”。原理很簡(jiǎn)單發(fā)送端周期性寫入一個(gè)帶隨機(jī)數(shù)和時(shí)間戳的探針報(bào)文接收端必須原樣回傳并在回傳內(nèi)容后附加一個(gè)校驗(yàn)和。發(fā)送端收到回傳后對(duì)比內(nèi)容和校驗(yàn)和如果對(duì)不上立刻判定鏈路異常。這段邏輯用代碼寫出來(lái)大概是import os import random import time import hashlib def send_probe(fd, timeout0.5): nonce random.randbytes(4) timestamp int(time.time()).to_bytes(4, little) payload nonce timestamp checksum hashlib.md5(payload).digest()[:2] probe payload checksum os.write(fd, probe) expect probe rlist, _, _ select.select([fd], [], [], timeout) if not rlist: return False response os.read(fd, len(probe)) return response expect這個(gè)探針特別適合在長(zhǎng)時(shí)間壓測(cè)場(chǎng)景里使用。如果你在跑一個(gè)8小時(shí)的穩(wěn)定性測(cè)試中間鏈路偶爾抖動(dòng)導(dǎo)致一幀數(shù)據(jù)丟失業(yè)務(wù)層可能不會(huì)立即報(bào)錯(cuò)但探針一旦發(fā)現(xiàn)回傳對(duì)不上就能立刻定位到“鏈路在某個(gè)時(shí)刻出了問題”而不是等到測(cè)試結(jié)束才從結(jié)果反推。5.4 模擬時(shí)延與丟包用用戶態(tài)隊(duì)列制造“弱網(wǎng)環(huán)境”自動(dòng)化測(cè)試的進(jìn)階需求是模擬不同的網(wǎng)絡(luò)質(zhì)量。雖然虛擬串口是純內(nèi)存鏈路時(shí)延幾乎可以忽略但可以通過(guò)用戶態(tài)隊(duì)列人為注入延遲、抖動(dòng)和丟包。具體做法是在兩個(gè)pty節(jié)點(diǎn)之間加一個(gè)代理層代理層從一端讀取數(shù)據(jù)后不立即轉(zhuǎn)發(fā)而是先放入一個(gè)隊(duì)列按預(yù)設(shè)的時(shí)延參數(shù)延遲發(fā)送需要模擬丟包時(shí)代理層按概率直接丟棄隊(duì)列中的數(shù)據(jù)。import os import random import threading import time import queue def delayed_forward(src, dst, delay0.1, loss_rate0.0): while True: data os.read(src, 1024) if random.random() loss_rate: continue time.sleep(delay) os.write(dst, data)這個(gè)方案的精度雖然不如內(nèi)核態(tài)的網(wǎng)絡(luò)模擬工具那么高但對(duì)絕大多數(shù)業(yè)務(wù)驗(yàn)證已經(jīng)足夠。比如測(cè)試超時(shí)重傳邏輯時(shí)設(shè)置delay大于被測(cè)程序的超時(shí)閾值就能穩(wěn)定觸發(fā)超時(shí)設(shè)置loss_rate為5%就能驗(yàn)證偶發(fā)丟包下的協(xié)議健壯性。如果你確實(shí)需要精確到毫秒級(jí)別的時(shí)延控制可以用實(shí)時(shí)線程加高精度計(jì)時(shí)器但說(shuō)實(shí)話串口業(yè)務(wù)邏輯里很少有對(duì)時(shí)延如此敏感的場(chǎng)景。用戶態(tài)隊(duì)列配合sleep勝在簡(jiǎn)單、可控、可復(fù)現(xiàn)。5.5 自動(dòng)化用例組織的最小骨架一個(gè)用pytest組織的虛擬串口測(cè)試用例我通常會(huì)分成五步準(zhǔn)備鏈路、啟動(dòng)被測(cè)程序、運(yùn)行回放機(jī)、采集應(yīng)答、斷言結(jié)果。每一步有獨(dú)立的函數(shù)方便復(fù)用和排查。用例開始前的fixture負(fù)責(zé)創(chuàng)建虛擬串口對(duì)并設(shè)置raw模式用例結(jié)束后的fixture負(fù)責(zé)刪除設(shè)備節(jié)點(diǎn)。被測(cè)程序如果有獨(dú)立的啟動(dòng)參數(shù)配置也放在fixture里統(tǒng)一管理。import os import pty import pytest pytest.fixture def vcom_pair(): master1, slave1 pty.openpty() master2, slave2 pty.openpty() path1 os.ttyname(slave1) path2 os.ttyname(slave2) yield path1, path2, master1, master2 os.close(master1) os.close(master2)這個(gè)fixture不依賴socat直接用Python的pty模塊打開測(cè)試環(huán)境更可控。如果你在pytest外面還開著socat占用了同一批ptmx設(shè)備可能會(huì)出現(xiàn)設(shè)備節(jié)點(diǎn)沖突所以自動(dòng)化測(cè)試環(huán)境里我一般不跑手動(dòng)socat調(diào)試全部交給測(cè)試框架統(tǒng)一管理。測(cè)試運(yùn)行后如果斷言失敗xxd抓下來(lái)的現(xiàn)場(chǎng)報(bào)文會(huì)自動(dòng)保留在測(cè)試日志目錄里方便回溯。這一步很關(guān)鍵沒有現(xiàn)場(chǎng)報(bào)文遠(yuǎn)程排障基本是瞎猜。6. 硬件聯(lián)調(diào)場(chǎng)景虛擬串口和真實(shí)設(shè)備之間的橋梁6.1 串口服務(wù)器與TCP映射讓遠(yuǎn)程設(shè)備“變成”本地串口硬件聯(lián)調(diào)階段一種常見需求是把一臺(tái)遠(yuǎn)程設(shè)備通過(guò)TCP網(wǎng)絡(luò)映射成開發(fā)機(jī)上的本地虛擬串口。這樣開發(fā)機(jī)上的串口調(diào)試程序不需要任何網(wǎng)絡(luò)代碼改動(dòng)直接讀寫虛擬串口節(jié)點(diǎn)就能和遠(yuǎn)程設(shè)備通信。socat在這類場(chǎng)景里是最順手的工具。把pty節(jié)點(diǎn)和TCP端口對(duì)接起來(lái)socat pty,raw,echo0,link/tmp/vcom_remote tcp-listen:9000,reuseaddr這條命令創(chuàng)建了一個(gè)虛擬串口/tmp/vcom_remote同時(shí)對(duì)TCP 9000端口進(jìn)行監(jiān)聽。遠(yuǎn)端設(shè)備通過(guò)TCP連接到9000端口后雙向數(shù)據(jù)就在虛擬串口和TCP連接之間流轉(zhuǎn)。上位機(jī)程序完全感知不到底層是TCP網(wǎng)絡(luò)它看到的只是一個(gè)普通的串口設(shè)備節(jié)點(diǎn)。如果是開發(fā)機(jī)主動(dòng)連接遠(yuǎn)程的串口服務(wù)器用connect方向socat pty,raw,echo0,link/tmp/vcom_remote tcp:192.168.x.x:9000這種方式最大的價(jià)值在于你可以把遠(yuǎn)程設(shè)備的調(diào)試體驗(yàn)做得和本地設(shè)備一模一樣。協(xié)議分析工具、自動(dòng)化測(cè)試框架、日志采集腳本全都復(fù)用同一套針對(duì)串口的工具鏈不需要為網(wǎng)絡(luò)通信單獨(dú)開發(fā)一套。6.2 固件側(cè)聯(lián)調(diào)時(shí)的“半虛擬串口”技巧硬件聯(lián)調(diào)還有一個(gè)高頻場(chǎng)景固件已經(jīng)跑在真實(shí)板子上但上位機(jī)軟件還沒寫完。這時(shí)候虛擬串口可以作為“半路中轉(zhuǎn)站”記錄下固件發(fā)出的每一幀數(shù)據(jù)供上位機(jī)開發(fā)人員離線解析。操作方法是把真實(shí)串口設(shè)備的節(jié)點(diǎn)映射到一個(gè)虛擬串口對(duì)的一端另一端跑一個(gè)抓包腳本socat /dev/ttyUSB0,raw,echo0 pty,raw,echo0,link/tmp/vcom_sniffer然后把xxd掛在/tmp/vcom_sniffer上所有經(jīng)過(guò)真實(shí)串口的數(shù)據(jù)都會(huì)同時(shí)被虛擬串口的另一端收到。這樣一來(lái)固件的真實(shí)行為被完整記錄下來(lái)不需要修改任何固件代碼也不需要額外的硬件抓包工具。這個(gè)方法在排查“固件和上位機(jī)對(duì)協(xié)議字段理解不一致”時(shí)特別好用。上位機(jī)開發(fā)人員可以直接拿著抓包文件做離線分析把每個(gè)字節(jié)的偏移、取值、含義一一定位再和自己實(shí)現(xiàn)的解析邏輯對(duì)比效率比兩邊同時(shí)改代碼挨個(gè)對(duì)拍快得多。6.3 聯(lián)調(diào)中的狀態(tài)重置一個(gè)容易被忽視的細(xì)節(jié)硬件聯(lián)調(diào)時(shí)真實(shí)設(shè)備和虛擬串口之間的連接經(jīng)常需要反復(fù)斷開重連。socat進(jìn)程如果異常退出虛擬串口節(jié)點(diǎn)會(huì)留在系統(tǒng)里但對(duì)應(yīng)的pty狀態(tài)可能已經(jīng)殘缺。這時(shí)候再次啟動(dòng)新的socat可能會(huì)出現(xiàn)“設(shè)備節(jié)點(diǎn)存在但讀寫無(wú)響應(yīng)”的情況。我養(yǎng)成的習(xí)慣是每次重連前先清理遺留的符號(hào)鏈接和設(shè)備節(jié)點(diǎn)rm -f /tmp/vcom_remote另外用socat對(duì)接真實(shí)硬件時(shí)盡量不要在真實(shí)串口和pty之間再加額外的代理層。每一層代理都會(huì)引入一次額外的緩沖和調(diào)度延遲對(duì)時(shí)序敏感的業(yè)務(wù)影響不小。如果必須加代理至少要在代理層把數(shù)據(jù)改成逐字節(jié)透?jìng)鞑灰鋈魏未虬徒獍?. 一些值得長(zhǎng)期堅(jiān)持的調(diào)試習(xí)慣寫到這里想再分享幾個(gè)我踩過(guò)不少坑之后形成的習(xí)慣每一個(gè)都對(duì)應(yīng)過(guò)至少一次深夜加班。第一凡是串口協(xié)議一律按二進(jìn)制處理。哪怕你的協(xié)議文檔里全是ASCII字符串也要用二進(jìn)制模式打開設(shè)備、用顯式長(zhǎng)度讀寫、用十六進(jìn)制對(duì)比報(bào)文。因?yàn)槟阌肋h(yuǎn)不知道哪個(gè)版本的對(duì)端設(shè)備會(huì)突然在幀里塞一個(gè)0x00把一切“優(yōu)雅”的字符串解析瞬間擊穿。第二串口調(diào)試工具選命令行三件套。我見過(guò)不少圖形化串口工具界面花里胡哨功能一堆但內(nèi)置的自動(dòng)換行、奇偶校驗(yàn)、時(shí)間戳疊加很容易破壞二進(jìn)制數(shù)據(jù)的完整性。socat、stty、xxd這三個(gè)工具足夠解決98%的串口調(diào)試需求剩下2%用Python腳本補(bǔ)。第三每次鏈路變化后都要重跑256字節(jié)掃描。不管是因?yàn)閾Q了一臺(tái)機(jī)器、換了一個(gè)socat版本還是新增了一個(gè)代理層只要鏈路組件有變動(dòng)就重新掃一遍0x00到0xFF的回環(huán)。這一步十幾秒就能做完但能幫你區(qū)分“鏈路壞了”和“業(yè)務(wù)壞了”這兩個(gè)永遠(yuǎn)糾纏不清的問題。第四把“特殊字節(jié)”當(dāng)成協(xié)議設(shè)計(jì)的第一公民。設(shè)計(jì)協(xié)議幀時(shí)如果你的幀頭、長(zhǎng)度字段或者轉(zhuǎn)義字符恰好是0x11、0x13、0x00這類攜帶控制語(yǔ)義的字節(jié)你必須顯式定義轉(zhuǎn)義規(guī)則或者幀邊界機(jī)制而不是碰運(yùn)氣指望鏈路不做解釋。真實(shí)環(huán)境里遇到一個(gè)開了軟件流控的終端設(shè)備你就知道這些字節(jié)有多危險(xiǎn)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中文字幕久久婷婷丁香五月天| 无遮挡猛进视频免费无限观看| 蜜桃在线观看一区二区三区| 91快色色色色色| 凹凸精品熟女在线观看| 国产尤物在线三区| 亚洲 综合 第一页| 麻豆精品三区视频| 九九九九88| 福利色色| 国产精品一区二区手机看片| 99久久久| 欧美午夜视频| 超碰免费在线| 美女午夜福利免费视频| 91啪啪| 搡老熟女国产1000部| 大香蕉伊人色偷偷在线| 天天看,天天做| 国产99久久99热这里只有精品15 | 日韩精品一区二区三区色欲| 囯戸精品高潮呻吟旡码| AAAA级日本片免费视频| 亚洲图片小说欧洲| 99少妇| 亚洲做性| 91丝袜在线播放| 日日夜夜骑| 欧美丝袜美女电影一二三四区| 国产精品网站免费| 97超碰超欧美。| 久久超碰大香蕉| 高清不卡视频| 午夜久久一区二区无码中出| 新视频sss国产| 鸥美精品一区二区久久婷婷| 国产AV天美| 野狼激情网| 色97| 中文字幕在线观看网页| 职场同事知名国产国产精品久久欧美日韩| 男女一进一出视频久久| 成人av毛片在线观看| 99在线精品视频| 精精品人妻一区二区三区| 传媒在线观看一区二区三区| 九九九九97| 久久精品视| 亚洲日本大香蕉1| 亚洲中文字母在线播放| 美女黄色一级A视频| 成功精品影院| 国产视频一区二区在线观看| 综合网欧| 欧美亚洲在线| 少妇久久久久久| 3PAV乱伦视频| 8x福利精品第一福利视频导航| 搡老熟女免费视频| 亚洲色欲天天人妻无码系列专区| 丝袜美腿诱惑亚洲欧美视频在线观看| 吻戏激情性巴克| 天天操女人| 日日骚 av| 九九九九一区| 天天草天天日| 五月天伊人| 日韩少妇丰满亚洲| 久久久久久久久久久精| 白嫩少妇| 日韩一级片在线看| 国产和美国毛片| 91天堂| 中文字幕日韩精品久久| 色欧美天天| 日本999精品视频| 国产和美国毛片| 啪啪啪男女亚洲中文字幕99| 欧美高清无码免费视频高清版| 丰满人妻一区二区三区大胸懂色| 小草三级久久观看| 久久黄黄黄| 中文一区二区三区影院| 99久久精品无码一区二区| 国产少妇与亚洲av| 超碰在线1234区| 国产精品久久| 91超碰人人操| 超碰久久精品| 性爱综合一区二区| 91超碰碰在线| 精品亚洲成人免费在线| 无码91| AV男人天堂网| 亚洲天堂一区二区久久| 看黑人AV不卡| 97天天| 亚洲Av无码成人精品国产| 日本免费不卡二区| 97AV在线观看| 亚洲天堂色图| 91w欧美| 亚洲综合小说另类图欧美视频激情小说色五月天 | 99久久精品欧美国产| 欧美成人一区二区三区在线播放 | 翔田千里A片一区二区| 久久高清欧美国产| 玖色av| 超碰成人最新最好看| 国产美女91视频| 欧差乱伦二三| 嗯嗯嗯嗯啊啊啊好紧好大| 青青草原成人| 天天插天天操| 久久久97| 亚洲精品一区二区免费在线观看| 国产一区二区a毛片| 偷拍欧美激情| 国产操伦| 呦女网站| 亚洲熟妇白浆无码AV| 一级人妻性爱视频| 97久久精品国产| 无码人妻一区二区三区色欲aⅴ | 日本孕妇一区二区视频操逼免费看 | 天堂日本亚洲欧美| 日本孕妇一区二区视频操逼免费看| 婷婷六月色| 九热中文字幕| 五月天春色激情网| 国内毛片无遮挡国产| 97大色网| 无色无码| 亚洲91网| 四虎免费看黄| 精品毛片久久久精品毛片| 日本999精品| 人妻熟女av国产网站| 九九九国产精品| 五月天开心网| 人人么人人操| 91精品婷婷国产综合久久竹菊| 久久综合国产精品国产| 久久精品日韩专区免费观看| 9l视频自拍9l九色成人| 麻豆天美国美国产| 日韩极品无码B| 精久久久91| 午夜一区二区三区国产| 性欧美第一页| 不卡人妻少妇精品毛片一区23区视频| 老子午夜伦不卡影院| 91影视亚洲| 久久久久久欧美精品se一二三四| 国产精品国产精品国产| 色网1| 影音先锋中文字幕日本好一区二区| 蜜臀va69| a人欧美综合天堂麻豆| 日韩视频啪啪| 97超碰人人操人人操| 久久久久9999妇女| 五月丁香久久| 91在线超高颜值国产| 欧美日韩狠狠爱| 久久精品亚洲东京热色播| 中文字幕久热视频在线| 欧美96精品在线| 超碰天天久久79| 一区在线观看中文字幕| 日小BB小视频| 综合色好色| 国产成人精品午夜福利| 国产不卡中文字幕免费avi| 大香蕉一线视频| 欧美亚洲自拍另类人妻| 精品人妻中文字幕高清| 亚洲欧美日韩不卡人妻| 大茄子熟女AV导航| 人人澡人人澡人人| 神马久久啊啊| 欧美色图片91| 亚洲 欧美 91| 91狠狠色丁香婷婷综合久久精品| 久久久国产三级黄色片| 97任你吞精| 成年人网站在线免费观看| 亚洲图片 欧美电影| 欧美熟女妇同| 亚洲精品国产av天美传媒| 久久麻豆一区二区| 人妻嗯啊啊在线播放| 日韩av在线播放不卡| 91精品无码久久久久久久| 怡春院久久| 久操| 狠狠激情综合狠狠操中文字幕| 超碰日韩人妻| 国产精品白丝在线播放 | 久久久免费一级黄片| AV乱伦国产| 亚洲欧美另类图片| 欧美福利视频啊啊啊啊| 13小男生GAY自慰脱裤子| 夜夜高潮夜夜爽夜夜爱爱一区| 中文字幕伊人| 欧美极品色| 很狠操| 97久久天天综合色天天综合色电影| 亚洲综合有玛| 国产精品久久久久999| 91老熟女老女人国产老太| laoshunv91| 久久国99999| 欧美精品双插| 色九九九综合| 狠狠97| 亚洲双插| www.av家庭乱伦| 无码137片内射在线影院| 日本中文熟女视频| 九月丁香婷婷色| 丰满岳乱妇一区二区三区| 中国一级操逼视频| 亚欧国产无码精品在线| 丁香五月天堂网| 欧美夜夜狠| 亚洲熟妇乱女区二区三区| 亚洲限制级| 嗯嗯啊啊的视频| 综合网亚洲1| 久久精品成人| а√天堂资源官网在线资源| 日韩无码三级影院| 日韩午夜啪啪视频| 美女在线H91| 欧美玖玖爱免费玖玖| 九九久久国产精品怡红院| 蜜臀99精品国产高清在线观看| 97欧美综合网| 亚洲精品三区在线观看| 日本中文字幕在线电影| 99热精品国产| 97在线免费看视频| 欧美一区二区三区另类精品| 无码国产精品午夜不卡(| 97天天爽| 国产91专区| 欧美激情精品| 可以在线观看的黄色网址| 久久久夜夜嗨免费视频| 开心六月色| 久久偷偷色综合蜜桃| 亚洲欧美洲综合| 26uuu性物| 五月激情综合网| 美女诱惑在线一区| 精品少妇999| 中文字幕日韩人妻视频一区二区三区 | 德国一二三不卡| 欧美性综合| 97视频在线| 日本精品高清一二区一本到| 99re69| 久久系列| WWW黄片COM| 精品久久久久黄少妇| 一区二区三区看视频| 性爱免费视频成人| 91撸色网 玖玖网 欧美| 探花视频免费观看国产专区| 国产高潮AA片免费看| 综合网欧| 看免费一级在线播放毛片| 99热亚洲| 青青草国产欧美非洲黑人| 亚洲第一无码播放立川理惠| 品亲网欧美品亲网| 99这里只有精品国产| 亚码激情| 97超碰超碰| 婷婷激情啪啪| 久久久555| 91人人臊| 自拍第一页| 奇米四色影视777久久久| 伊人成人情色综合| 26uuu久久| 91亚洲不卡一区| 天天综合网~91| 日韩无码专区| 欧美综合色图网| 丰满人妻av一区二区三区| 国产后入清纯| 2020国产精品| 久久精品国产亚洲粉嫩| 中日无幕一二三四区| 亚洲资源站| 一二区在线观看视频| 一本一道人妻久久一区二区三区| 欧美经典一区二区三区| 国产a级精品| 清纯唯美综合| 男人天堂2012| 人妻乱仑一区二区三区| 九九九九九精品视频| 91女神在线视频| 老熟女搡BBBB搡BBBB视频| 国产性爱欧美性爱在线| 成人五月香网在线| 牛牛久久国产精品视频一二三| 91人妻超碰| 九九热九九热| 97人肏| 后入合集| A级片一区| 超碰欧美| 99热伊人| 91这里只有精品| 蜜桃久久精品一区二区三区| 香蕉色网| 美女天天干| 久久99午夜精品一区人妻| 亚洲色图久久成人| 加勒比东京热五月天天堂网| 9Ⅰ超碰| 亚洲电影中字一区二区| 日韩成人大片一区二区| 啊啊啊用力在线观看| 四虎在线播放| 久久久亚洲Av| 一区二区日韩欧美久久| 91在线超高颜值国产| 少妇淫妇久久久久久久| 综合av影片| 天天躁夜夜躁狠狠躁AV| 精品综合久久久久久五月天| 九九综合久久| 丰满翘臀美女影院视频| 9999久久久| 日韩卡一卡二卡三在线| 蜜桃久久久久久| juliaann丝袜| 在线观看亚洲成人精品| 热热色色综合| 野狼激情网| 亚州欧美综合| 久久香蕉综合一本到3atv| 色九月婷婷| 日韩 国产 欧美自拍| 一本大道青青| 亚州熟妇精品| 亚洲情色婷婷五月天| 五月综合婷婷久久网站| 黄片免费视频2019| 亚洲欧美另类激情小说| 天天色综合影视网| 91欧美丨精品丨入口| 亚洲 中文 女同| 成人丁香五月| 国产视频一区二区免费| 人人爱人人操人人性| 国产高清自拍视频| 天天干天天操天天操夜夜操天天操 | 国产操逼逼网| AA级电影三区| 69XX一中文字幕人妻91| 久久产精品一区二区三区电影| 思思热影视| 国产精品成人AV片免费看网站| 神马麻豆福利院| 中文字幕一区二区三区四五区| 裸体美女久久久| 欧美日韩资源在线| 91成人在线| 亚洲中文字幕乱码无码一区二区| 中文字幕日产av人| 亚洲AV小说| 综合五月天| 亚洲一区中文字幕一区| 日本在线不卡v二区| 熟女五十路一区二区三| A级毛片在线看免费| 亚洲无线观看久久| 国产精品不卡一区二区电影| AVE乱伦| 大香蕉一级黄色片久久| 中文字幕丰满子伦无码专区在线视频最新| 日韩成人大片在线观看| 6080YYY午夜理论片在线观看| 欧美性xxxxx狂欢| 亚洲日韩国产精品| 久久久久久久强迫| 久久性爱视频免费看| 国产一级高清免费观看| 久久久久久国产无码精品| 在线免费观看日韩一区| 欧美日韩性爱操大逼| 欧美系列在线一区二区| HEYZO高无码国产精品227| 伊人五月天| 亚洲人成网www| 天天综合AV| 双插在线| 新怡红院| 中文AV制服乱伦| 亚洲高清无码在线桃色| 熟女少妇视频| 69精品| 国产亚洲深夜激情| 黄色性爱网网| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 久久直播国产| 欧美亚性天堂| 熟女一区二区三区| 欧美色九九| 激情熟女12P| 操高情无码| 99视频只有精品| 大香蕉伊人在线成人AV在线观看| 少好三P| 九九九精品色乱九九九| 呦女网站| 欧美爆乳精品一区二区| 综合欧美日本三级| 亚洲日韩熟女人妻高清在线| 欧美92| 91精品女厕偷拍视频| 综合色啪| 91成人久久| 丰满人妻区一区二区三| 国产av美女被艹的乱叫| 亚洲综合图色在线| 国产97视频| 激情网色| 精品一区二区三区四区女| 99热精品在线观看| 99性爱在线观看| 精品99999久久久久久| 丰满欧美放荡少妇在线| AV天堂国产| www.91色综合| 91天天综合在线观看| 51久久夜色精品国产麻豆| 99这里有精品视频| 狠狠激情综合狠狠操中文字幕| 九九久久久久久爱| 操一对老熟妇爽上天视频| 欧美性爱综合,免费| 狠狠操天天干| 久久黄人人爽视频| 妺妺跟我一起洗澡没忍住| AV高清一区| 女沟厕偷窥piss小便| 天天插天天插| 亚洲国产97| 五月天色色色| 91第一页| 五月天激情网站| 欧美亚州综合网图片| 人人爱人人操人人性| 91性| 日本在线视频导航| 伊人网一本| 激情干在线| 神马九九九| 在线强奷到舒服的无码视频| www久久精品| 欧美日韩性爱无码| 蜜臀久久精品久久久久视频| 口爆吞精在线观看| 亚洲一区制服诱惑| 在线精品福利免费播放| 国产91丝袜 在线播放| 五月丁香色色网| 欧美丝袜亚洲| 欧美色图天堂在线| 一起草三级AV电影在线观看| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧美性爱网97| 青青伊人这里只有精品| 熟女五十路一区二区三| 亚洲情色 无码专区| 日本在线播放不卡一区| juliaann丝袜| 中文字幕精品丝袜| 中文字幕交换人妻| 97伊人超碰| 欧美日韩超碰在线| 大学生口爆吞精| 久久精品电影| 亚洲中文字幕噜噜噜久久久| 国产亚洲色婷婷久久99精品91 - 百度| 欧美日韩另类在线播放| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产久久av| 久久精品成人| 欧美综合97www| 国产对白刺激视频| 国产熟女无套内射| 91网18| 国产1769在线| 我要去看2个日本美女.com曹逼| 国产乱码精品久久久久久| 中文自拍欧美影视| 秋霞色色影院| 97网站在线观看| 日本三级日本三级三级人妇四虎| av在线免费一区二区| 麻豆尤物视频网| 一级人妻性爱视频| 97精品一区二区视频在线观看| 旡码电影特区| 国产 丝袜 欧美中文 另类| 91天天| 欧美人妻一区二区| 国产专区路线| 亚洲男人天堂2019| 免费A V在线播放| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 欧美夜夜狠| 九九综合久久中文字幕| 欧美日韩资源| 天天大干大香蕉| 超碰午夜在线| h在线看免费版在线看| 香蕉热人人精品| 中文字幕三四区| 日本在线15p| 欧美91精彩| 在现视频女上位好爽| 亚洲AV成人无码一区二区三区在线观看| 人妻少妇久久| 综合网久久| 日韩三级久久久| 精品国产精品一区二区| 亚洲 日韩 丝袜 熟女 变态| 免费看黄片现成| 国产成人在线观看网址| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 欧美在线伊人色| 中文字幕在线观看视频www| 偷拍亚洲熟女视频播放| 日韩三级在线观看网站| 韩国一级做a久久久久| 男人天堂新在线| 欧日韩一二三f区| rivers-china.com| 国产精品午夜精品| 欧洲一区二区三区四区在线观看| av强奸乱轮| 亚洲无码超碰免费| 国产一区二区在线播放量| 青春草莓视频在线观看网址| 欧美在线播放| 伊人久久综合影院精品久久久| 丰满人妻一区二区三区色-百度| 好涩综合| 亚州男人天堂| 97精品| 男女日B国产| 亚洲欧美国产中文视频| 黄色大片免费在线| 国产精品熟女九色九色蜜臀| 国产精品嫩草久久久久| 午夜精品探花| 五月丁香激情综合| 熟女啪啪视频| 熟妇高潮一区二| 久久九精品| 国产精品69久久久久久久| 玖色av| 欧美色院| 欧美亚洲第一页| 加勒比在线视频一区二区三区| 综合久久六月久久婷婷| 人人透人人操| 久久综合18p| 国产熟女二区| 色欧美在线| 亚洲欧美综合| 欧美日韩国产三级黄色| 欧美黄色大香蕉一区二区| 99无码| 九九英色视频| 久久久精品九| 亚洲无码com| 亚欧性爱无码| 综合熟女| 青青欧洲黑| 99re视频在线播放青草| 日韩字幕一区| 久热网| PMv在线观看| 自拍偷拍 日韩无码| 大香交伊人网| 韩国国产欧美情侣视频在线| 色97干| 久久久久亚洲AV无码专区少妇| 日韩精品一区的| 黄色二级片网站| 啊啊啊啊,啊啊好多水 | 欧美美女啪啪视频| 久久9999| 成人无遮挡毛片免费看| 99色视频| 视频在线中文字幕| 亚洲国产精品V?在线播放| 欧美亚洲日本激情在线| 超碰在线人妻不卡| 欧美一级二级三级| 国产高清MV操逼视频| 免费看美国人人爽,人人操| 美女网站黄页| 日韩免费看在线黄色片| 亚洲情色第一页| 东京热毛片调教| 高清成年美女黄网站免费大全 | 在线看污网站| 无码乱人伦中文视频| 色天使大香蕉| 午夜精品久久99蜜桃的功能章节| 美国日韩黄色片| 国产小炒后入式| 国产操逼网站亚洲一级黄色| 五月婷视频| 大香蕉99re| 亚洲第2页| 美女诱惑在线一区| 欧美探花网| 亚州乱码中文字幕综合久久久| 大鸡巴久久| 亚洲AV永久无码一区仙野| 911av网站免费观看| 毛片视频白嫩| 久久精品人妻一区| 日韩精品.久久精品.AV女优.天美传媒| 99r九九| 97干97色| 无码91| 亚洲国产成人综合碰碰三级经典| 玖玖色综合| 亚洲欧美综合图片| 六月色色| juliaann欧美丝袜办公室| 国产热RE99久久6国产精品首| 日本免费一区二区不卡| 日韩国产成人自拍视频| 久欲AV| 亚洲经典啪啪| www.男人的天堂| 亚州色图第三区| 东京热毛片177b2viP| 91大胆欧美| 人人爱人人乐人人操| 中文字幕制服欧美久久一区| 国产亚洲精品精AV.| 国产精品视频| 92午夜免费福利视频| 久久噜噜噜精品国产亚洲综合| 探花一区在线| 国产丝袜啪啪| 欧美嗯啊……在线观看视频免费| 日韩欧美性吧婷婷乱伦大香蕉| 国产精品小视频一区二区三区| 久久AV无码AV| 中文字幕文字幕无码一区二区三区电影99| 亚洲天堂资源网| 97超碰美国| 欧美午夜视频免费观看| 久久精品电影| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产精品久久久久999| 亚洲欧美激情在线视频| 亚洲欧美另类图片| 一区二区蜜臀| 亚洲精品三| 国产黄色剧情影片麻豆免费播放| 91老熟女老女人国产老太| 亚洲少妇中文字幕网址| 色香AV| 91美女視頻| 亚洲人妻一区二区三区| 久久久久亚洲av综合波多野制衣| 久9爱精品| 色好看av| 91GD.COM| 人人玩人人添人人澡免费| 中文字幕免费在线观看| 日韩一999精品| 最新啪啪视频| 日本乱人伦片中文三区| 人乳av| 97香蕉人人乳| 九九在线视频| 日韩不卡毛片Av免费高清| 亚洲图片欧美色图| 久久久久久99999国产精品| 久久久9视频| 国内精品久久久久影院亚洲| 午夜男女爽爽爽影院视频| 国产97在线播放| 亚洲少妇在线影音| 中文字幕av色| 亚洲丁香花色| 国产精品无码在线| 国产强奸乱伦xd| 久久免费少妇| 高精欧美色| 蜜乳av一区二区三区四区不卡| 丝袜狠狠草尤物人妻av91| 啊v视频在线观看| 日逼视频日本| 色色色日本| 中文字幕后石码三区四区| 亚洲欧美天| 亚洲高清少妇| 中文字幕-区二区三区四区视频中国| 欧美精品第3页| 国产免费一区在线观看| 99re在线视频| 久久久久久91香蕉国产| 日日夜夜骚| 69精品在线| 久久一二三四五六七八九区区区| 偷窥自拍A片| 插日本熟女视频| 韩国一级AAA| 久久男人精品| 乱伦1色页| 中文字幕奈奈美被公侵犯| 亚洲啪啪视频免费| 亚洲精品自拍| 日韩 国产 欧美自拍| 热久久无毒不卡| 中文字幕亚洲永久精品| 91精品91久久久久77777俄罗斯老妇姓x| 人人操人人操人人操人人操人人操人人人11.CM| 日日干夜夜操视频h| 少妇二级| 射丝袜高跟鞋99| 91精品成人www| 国产11页| 中文一区二区婷婷视频| 少妇同性| 成人热久久精品| 97视频www| 涩亚洲欧洲| 午夜噜噜噜| 淫荡网址| 亚洲春色欧美激情自拍| 成人一级性爱| 午夜福利免费福利视频| 秋霞视频一区二区| 青青草日韩无码| 伊人97色天使| 熟妇人妻一区二区三在线| 97精品在线| av天堂加勒比| av影片在线观看不卡| 久久无码一区二区二三区性色| 91影库| 欧日a| 天天综合网国产| 97国产天堂岛| 91日韩网站| 欧美精品成人一区二区在线观看| 中文字幕一区二区三区字幕| 亚洲图片欧洲图片aⅴ| 婷婷综合| 天天干天天舔| 日韩丰满熟妇| 国产少妇肉丝在线观看| 99xav| 欧美春色| 在线色导航| 色婷婷综合网| 天堂在线一区二区| 亚洲美女精品九九视频| 婷婷在线视频在线观看| 久操精品网| 色欲人妻一区二区在线| 91老妇女| 交换娇妻呻吟声不停中文字幕| 精品超碰国产| 久偷拍| 啪啪自拍九九综合| 国产亚洲精品美女久久久久久2021| 十八禁啪啦拍视频无遮挡| 欧美性色综合网| 校园春色 亚洲| 国产乱色国产精品免费视| 99热9| 夜夜 中文视频rt| 91中文字幕| 欧美黄片视频在线观看免费 | 一区二区三区欧美激情| 亚洲男人天堂网久久| 中文字幕av片| av强奸乱轮| 狼人综合婷婷激情四射 | 亚洲精品九九九| 入口操逼网站| 欧美 亚洲 另类 综合| 97爱爱爱| 五月婷婷性爱| 国产精品一级二级在线| 1级黄色夫妻对换性交免费看| 五月婷婷激情综合| 欧美性少妇| 欧美日韩国产高清在线一二三区| 青青草吊丝| 91欧美在线| 五月激情影院| 久久有码视频| 欧美人人AAA| 狠狠爱AV| 久久直播国产| 欧洲精品人妻| 天天干天天燥| 夜夜嗷嗷一区二区| 国产辣妈在线视频福利| 骚乳在线| 亚洲成人激情小说视频| 97舔舔| 极品色| 日本熟妇熟色97一本在线观看| 欧美日韩制服| 五月天精品| 精品国产AV一区天美传媒| AA丁香综合激情| 欧美日韩中文字幕不卡| 综合激情婷婷| 欧美97色| 亚洲欧美日韩中文播放| 五月丁香久久| 久艹日日日| 色97| 日韩熟女无码| 国产欧美日韩臀| 黄色av网站在线播放| 97亚洲欧美日韩| 久久社区一区二区三区| 色亚州人久干视频在线观看免费版| ..日韩av毛片精品久久久| 亚洲揄拍网| 在线看片国产精品每日更新| 视频黄站| 亚洲色色色| 国产v亚洲v日韩v欧美v片另类| 久久熟女人| 欧美日韩性爱电影在线| 91精品久久久久久77777| 国产精品成人蜜臀AV在线| 色亚洲欧美| 情色日播放AV| av一区二区三区四区| 久久大精品乱码视频人妻熟女| 国产色精品午夜大片| 97欧美日韩精品| 天天日少妇逼AV| 极品销魂美女一区二区 | 久久久国产护士丝袜美腿一| 99色天堂| 日本韩国国产精品一区| 美女骚尻视频| 97精品国产97久久久久久| 国产精品盗摄 偷窥盗摄| 骚逼自拍99| 操狠狠| 超碰在线观看av不卡| 蜜区区视频79| 校园春色综合色| 黄片www.| 男女猛烈无遮掩视频免费软件| 久久久神马影院| 艳美熟妇先锋一二三区| 无码WWW免费视频网站| 快灬快灬 一下爽蜜桃在线观看 | 少妇综合| 99热国产精品| 国产一区麻豆免费观看| 成人性爱电影一区二区| 欧美成年人性爱视频免费观看| 大屁股国产在线视频| 91xingse| 999岛国大片| 中文人妻av高清一区| juliaann丝袜| 久久亚洲天堂| 欧美性后入| 色色99| 亚洲欧洲日韩国产自在线| 蜜臀中文字幕| 97人人超| 国产日韩精品无码去免费专区国产| 亚洲同性aV综合| 婷婷五月天无码| 精品国产一区二区久久| 亚洲AV成人在线| 国产人伦a片信息免费片| 又大又大又大又粗爽高潮观看| 久热99999| 伊人久久大香蕉线AV五月天| 五月天开心网| 亚洲女毛多水多21P| 美国黄片aaa| 国产农村妇女精品| 日本 情色 1区| 激情婷婷丁香网| 亚州久久9| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 欧美黄色片AAAAA| 性在久久久久久| Sekablack无码一区| 神马九九| 久久中出| 亚洲天堂男人天堂| 97chaopengongkai| 天天射天天色成人| 亚洲图片视频小说| 舔人妻中文免费视频| 美女91av| 骚逼自拍99| 九九九精品色乱九九九| 日日噜噜夜夜久久亚洲一区二区| 97超碰天天爱天天爱| 观看免费区二区三区二| 欧美性爱97超碰 | 无码精品久久| 高清在线不卡一区二区 视频| 日韩精品在线视频,日韩精品……| 色五月av| 激情小说亚洲| av黄图片在线观看| 高清无码久操视频| 亚洲国产成人精品999| 91久久九九精品国产综合| 免费无码婬片AAAA片直播色戒| 久久精品国产Aⅴ| 国产无马在线| 欧美黄色大片在线观看| 久操com| 操逼操网| 大香蕉九九| 91狠| 台湾肥佬网一区二区三区| 欧美色图下一页| 激情人妻另类| 日韩日韩日韩-国产乱码精品一区二区| 极品白嫩福利在线| 欧美日日网| 少妇天堂网络| 色娱乐色呦呦夜夜夜夜av| 曰韩香蕉97| 91精品久久久久| 日本精品五区| 日本熟女免费視颖| 综合久久六月久久婷婷| 亚洲色诱惑| 按摩中文字幕| 精品久久大胆人体| 91欧洲入口| 亚洲色天| 一类无码操逼视频| 91久久久久久| 人妻一区久久二区三区色播| 日本熟妇色熟妇在线视频播放| 久久久无码精品人妻二区| 性色A∨91| av天堂精品久久| 亚洲综合色婷婷| 91暧暧| 天堂精品一区| 亚洲天堂一区| 91爆操视频| 射 色综合| 老女人91| 一级二级在线观看| 深夜国产一区二区三区在线看| 五月天综合网| 夜夜福利| 射久久| 亚洲精品啪视频| 在线观看十八禁| 精品久操| 91精品久久久久五月天精品 | 亚洲中文sv| 成人自拍三级在线观看| 丁香五月综合| 欧洲精品人妻| 97干在线| 黄片不用下载在线观看| 欧美亚洲丝袜美女电影| 床戏久久久av一区二区麻豆| 日韩三A大片在线观看| 日产狠狠干| 2017天天透天天通天天擦| 91天天综合网| 综合色啪| 久草精品一区| 秋霞操逼片| 亚洲综合春色| 97鸡把在线视频| 91在线视频观看国产| 青青草吊丝| 色婷婷一区二区三区久久| 亚洲第一无码播放立川理惠| 久久亚洲天天做| 丰满熟女一区二区三区在线播放| 国产美女高潮叫床视频| 丝袜无码a片| 国产毛片片精品天天看视频| 欧美日韩91| 欧美激情精品久久久| 午夜超爽| 伊人丝袜美腿高跟在线观看高清| 玖玖综合网| 99无码视频| 97欧美色| 国产 无码 一区二区| 天操老女人| 十八禁视频一区二区| 伊人97色天使| 91亚洲欧洲| 亚洲nv男人的天堂网| 亚洲欧美97√| 99爱精品| 偷拍盗拍亚洲色图图片| 九月丁香| 淫淫综合网| 长长久久曰曰夜夜成人网| 96国产精品| 婷婷激情综合网| 美女t无毒不卡不卡| 久久久九九网站| 91日韩网站| 亚洲成人在线播放| 91欧美网| 亚洲天堂性爱| 97综合网| 超碰在线人妻不卡| 国产精品亚洲无码| 亚洲熟女一区| 伊人女女资源在线观看| 日日日日做夜夜夜夜做无码97| 香蕉人人操tv| 久久97视频| 久久黄黄| 人人操人人插 - 百度 - 百度| 一区中文字幕二区日韩| 91精品微拍福利| 亚洲宗合网| 国内精品伊人久久久久影院会| 欧美啪啪啪91| 中文字幕黑人大片| 91人妻人人澡人人爽人人精品| 国产农村妇女精品1区二区| 人人操人人干网页| 大但人体久久久久| 99久久99九九99九九九| 日日摸天天爽夜夜欢| 麻豆区99999| 岛国AB视频| 精品少妇一区二区| 色一射色一射| 久久东京伊人一本到鬼色| 久久精品人妻一区二区三区| 狠狠干,狠狠操| 内射老妇BBWX0C0CK| 丰满人妻一区| 97超碰国产亚洲精品资源| 无码高清操逼网址| 9.1小视频| 美女黄页| 播播亚洲小说亚洲| 亚洲男人天堂av| 日韩天天本| 亚洲.欧美.丝袜.中文.综合| AV麻豆免费一区| 中文字幕一品色图| 精品久一区免费| 亚洲 欧美日韩 另类| 日本精品五区| 久久一区二区加油站| 欧美午夜精品久久久久久超碰| av在线播放国产一区| 欧美精品亚洲精品日韩传电影| 嗯嗯嗯啊啊啊在线免费观看| 亚洲蜜乳av| 天美传媒AV在线| 日韩一级二级三级免费看完整版国语版 | 男女打扑克高清网站| 欧美顶级黄色大片免费| 97免费在线观看| 在线五区| 欧美性,色九九| www99热| 萌白酱自拍视频| 黑人娇小av在线播放 | 99热只有这里有精品| 男女啪啪啪18禁网站| 久草色在线观看| 美欧老女人97| 精品一区二区啪啪啪| 午夜无码精品免费看性色| 91精品人| 国产精品9999| 久久华人网| 国产在线精品电影观看| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 亚州免费啪啪视频| 手机看片91人妻| 精品人妻一区二区三区视频在线| 大香蕉综合在线| 综合激情97 | 国产h小视频在线观看免费| 97综合久第一页| 国产日韩欧美| 久插综合| 亚熟在线| 人妻久热在线| 亚洲精品男人的天堂| 久久99亚洲精品久久99果| 丝袜剧情| 一区二区影院| 国产黄片精品在线| 免费看黄片现成| 国产极品粉嫩馒头一线天av| 国产白丝av| 91精片| 亚洲人成在线放东京热| 97精| 91天天看| 欧美色就是色| 狠狠干91| 日本操逼无码| 亚洲成a人v欧美综合天堂下载| 中日韓欧美高清| 欧美激情专区| 91亚洲网| 欧美精品三区| 亚洲性爱成人| 婷婷干黄色| 日韩无码操逼片| 亚洲国产尤物yw在线观看| 99国产精品视频尤物| 亚洲欧美自拍偷拍| 奇米狠999| 成人乱码一区二区三少妇| 日美免费黄片| av凤凰久久久| 99视频内射三四| 六月婷激情福利天堂69| 色噜噜人妻av 中文字幕| av操操不卡| 欧美 亚洲 另类 综合| 青草影院内射高潮| 午夜操操操| 婷婷爽人人婷婷爽视频|