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

ARTICLE DETAIL

資訊詳情

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

FTP上傳下載實(shí)戰(zhàn):ftplib、被動(dòng)模式與斷點(diǎn)續(xù)傳排錯(cuò)

FTP上傳下載實(shí)戰(zhàn):ftplib、被動(dòng)模式與斷點(diǎn)續(xù)傳排錯(cuò) 簡(jiǎn)介面向Java開(kāi)發(fā)者的FTP文件傳輸學(xué)習(xí)包圍繞從服務(wù)器上傳與下載文件的常見(jiàn)需求梳理連接建立、登錄驗(yàn)證、主動(dòng)/被動(dòng)模式切換、目錄操作、二進(jìn)制傳輸、文件收發(fā)及斷開(kāi)清理等核心環(huán)節(jié)。壓縮包共2個(gè)文件以1個(gè)Java源碼和1個(gè)jar依賴(lài)庫(kù)為主整體約106KB源碼可用于對(duì)照理解FTPClient調(diào)用流程jar依賴(lài)便于直接補(bǔ)齊運(yùn)行環(huán)境適合在本地搭建小型FTP客戶(hù)端示例并調(diào)試。已有251人學(xué)習(xí)下載說(shuō)明該主題在Java網(wǎng)絡(luò)編程入門(mén)與日常運(yùn)維腳本場(chǎng)景中具有一定參考需求。讀者可從中獲得一套可運(yùn)行的FTP操作代碼骨架結(jié)合異常捕獲、傳輸模式設(shè)置與資源釋放等細(xì)節(jié)快速定位上傳下載失敗、目錄切換異?;蜻B接未關(guān)閉等問(wèn)題并在此基礎(chǔ)上擴(kuò)展超時(shí)控制、重試機(jī)制與安全傳輸配置形成適合自身業(yè)務(wù)的文件傳輸工具。1. FTP 上傳下載文件這件事老協(xié)議為什么還壓在生產(chǎn)線上「FTP 上傳下載文件」聽(tīng)著像是上個(gè)時(shí)代的活但真正在機(jī)房待過(guò)的人都知道它離消失還早得很。我最近一次和它打交道是個(gè)凌晨跑完不對(duì)賬的定時(shí)任務(wù)控制連接一切正常登錄成功、命令一條條返回 226可目標(biāo)目錄里就是少了一個(gè)包。后來(lái)定位到是數(shù)據(jù)連接被中間的防火墻掐了日志干凈得像沒(méi)事發(fā)生——這種「看起來(lái)很成功」的失敗是 FTP 最典型的一面。這份資源要解決的就是繞不開(kāi) FTP 的那幾類(lèi)活老設(shè)備只肯吐 FTP、外部對(duì)接方只給一個(gè)賬號(hào)密碼、內(nèi)網(wǎng)機(jī)器之間搬運(yùn)日志和備份包、需要按天做增量同步。新手可以照著腳本跑通第一次上傳和下載熟手更該盯住它的邊界——兩條獨(dú)立連接、被動(dòng)模式的端口區(qū)間、文件名編碼、斷點(diǎn)續(xù)傳的偏移量每一項(xiàng)都能讓你在半夜被叫起來(lái)。下面按「先看懂模型、再動(dòng)手寫(xiě)腳本、最后把坑挖出來(lái)」的順序往下走。2. 兩條連接與兩種模式通信模型里最容易配錯(cuò)的三處FTP 和 HTTP 最大的差別在于它一次會(huì)話要開(kāi)兩條 TCP 連接而且這兩條連接的建立方向可以反過(guò)來(lái)。很多人腳本寫(xiě)得沒(méi)問(wèn)題、賬號(hào)密碼也沒(méi)錯(cuò)最后卡在 425 或者「列表能拿到但文件傳不動(dòng)」根子都在這一層。這一章把連接結(jié)構(gòu)、主動(dòng)被動(dòng)模式、傳輸類(lèi)型與編碼三件事拆開(kāi)配一段可以直接跑的探測(cè)代碼先把鏈路摸清楚再談上傳下載。2.1 控制連接與數(shù)據(jù)連接是兩套東西控制連接固定連服務(wù)器的 21 端口明文 FTP 的默認(rèn)端口實(shí)際部署也可能改成別的整個(gè)會(huì)話期間一直保持所有命令和響應(yīng)都以文本行的形式在這條通道上走USER、PASS 完成認(rèn)證CWD 切目錄PWD 看當(dāng)前位置TYPE 設(shè)傳輸類(lèi)型PASV 協(xié)商數(shù)據(jù)通道。你看到的220、230、250、226這些三位數(shù)字碼全是控制連接在說(shuō)話。數(shù)據(jù)連接是臨時(shí)的只在實(shí)際傳文件或者列目錄的那一小段時(shí)間里存在。LIST、NLST、MLSD、RETR、STOR這些命令才會(huì)觸發(fā)數(shù)據(jù)連接傳完立刻關(guān)閉。問(wèn)題在于這條數(shù)據(jù)連接由誰(shuí)來(lái)發(fā)起、連到哪個(gè)端口是可以變的——這就是主動(dòng)模式和被動(dòng)模式的差別。理解這一點(diǎn)的實(shí)際價(jià)值在于控制連接通、數(shù)據(jù)連接不通是完全可能的。防火墻、NAT 網(wǎng)關(guān)、容器網(wǎng)絡(luò)策略任何一個(gè)環(huán)節(jié)都可能只管住數(shù)據(jù)連接那一側(cè)。我一般會(huì)先用一段最小的探測(cè)代碼把歡迎語(yǔ)、當(dāng)前目錄、文件列表和傳輸類(lèi)型都打出來(lái)判斷到底是哪條腿瘸了。from ftplib import FTP, error_perm ftp FTP() # 編碼必須先設(shè)很多老服務(wù)器回包是 GBK不設(shè)會(huì)直接拋 UnicodeDecodeError ftp.encoding utf-8 ftp.set_debuglevel(2) # 2 會(huì)把收發(fā)的每條命令打印出來(lái)排錯(cuò)時(shí)非常有用 ftp.connect(ftp.example.com, 21, timeout15) ftp.login(demo_user, demo_pass) print(歡迎語(yǔ):, ftp.getwelcome()) print(當(dāng)前目錄:, ftp.pwd()) # TYPE I 表示二進(jìn)制傳輸避免服務(wù)器做換行符轉(zhuǎn)換 print(TYPE 響應(yīng):, ftp.sendcmd(TYPE I)) print(目錄列表:, ftp.nlst(.)[:10]) # 只取前 10 條防止目錄太大刷屏 ftp.quit()這段代碼的價(jià)值不在功能而在診斷。set_debuglevel(2)會(huì)把-- PASV和-- 227 Entering Passive Mode (...)這類(lèi)交互原樣打出來(lái)你能直接看到服務(wù)器返回的被動(dòng)端口是不是落在了防火墻放行的區(qū)間里。nlst是一次典型的數(shù)據(jù)連接操作如果它拋TimeoutError或者ConnectionRefusedError而前面pwd明明返回正常那基本可以確診為數(shù)據(jù)通道被攔。參數(shù)上要留意三處encoding建議先按服務(wù)器實(shí)際情況選utf-8或gbk拿不準(zhǔn)就兩種都試timeout不要設(shè)成默認(rèn)的None卡死的連接會(huì)讓整個(gè)腳本掛在那里不動(dòng)15 到 30 秒是個(gè)合理區(qū)間set_debuglevel只在排錯(cuò)時(shí)開(kāi)生產(chǎn)腳本里關(guān)掉否則日志會(huì)被撐爆。2.2 主動(dòng)模式與被動(dòng)模式425 多半出在這里主動(dòng)模式PORT的流程是反的客戶(hù)端用 PORT 命令告訴服務(wù)器「你來(lái)連我的這個(gè) IP 和端口」然后服務(wù)器從自己的 20 端口主動(dòng)向客戶(hù)端發(fā)起數(shù)據(jù)連接。這在沒(méi)有 NAT 的年代很高效但在今天幾乎必然出事——客戶(hù)端躲在 NAT 后面時(shí)報(bào)給服務(wù)器的私網(wǎng) IP 服務(wù)器根本連不上或者客戶(hù)端本機(jī)的防火墻根本不接受外部主動(dòng)連入。被動(dòng)模式PASV把方向掰了回來(lái)客戶(hù)端發(fā) PASV服務(wù)器回一個(gè)227 Entering Passive Mode (h1,h2,h3,h4,p1,p2)里面是服務(wù)器開(kāi)放的臨時(shí)端口客戶(hù)端主動(dòng)去連。Python 的 ftplib 默認(rèn)就是被動(dòng)模式set_pasv(True)這也是絕大多數(shù)場(chǎng)景該用的模式。但被動(dòng)模式有自己的坑服務(wù)器開(kāi)放的是一段隨機(jī)端口區(qū)間常見(jiàn)做法是在服務(wù)端配置里把區(qū)間固定下來(lái)比如 50000 到 50100然后在防火墻和云安全組里把這段放行。區(qū)間不固定的話你永遠(yuǎn)不知道下一次連接會(huì)撞到哪個(gè)被攔的端口。判斷方法很直接如果控制連接正常、PWD正常但一執(zhí)行LIST或RETR就報(bào) 425「Cant open data connection」先懷疑被動(dòng)端口區(qū)間沒(méi)放行如果腳本在本地開(kāi)發(fā)機(jī)跑得好好的一上生產(chǎn)服務(wù)器就掛八成是生產(chǎn)機(jī)的出網(wǎng)策略只放了 21 端口。from ftplib import FTP ftp FTP() ftp.encoding utf-8 ftp.connect(ftp.example.com, 21, timeout20) ftp.login(demo_user, demo_pass) # 顯式聲明使用被動(dòng)模式等價(jià)于發(fā)送 PASV 命令 ftp.set_pasv(True) # 手動(dòng)發(fā)一次 PASV看看服務(wù)器到底回了哪個(gè) IP 和端口 resp ftp.sendcmd(PASV) print(PASV 響應(yīng):, resp) # 227 Entering Passive Mode (10,0,0,5,195,80) ftp.quit()把195,80這兩個(gè)數(shù)換算一下195 * 256 80 50000這就是服務(wù)器讓你去連的端口。這段換算值得記住因?yàn)榕耪蠒r(shí)運(yùn)維只問(wèn)你「卡在哪個(gè)端口」你答得出來(lái)就能省半小時(shí)。如果這個(gè)端口落在安全組放行范圍之外解決辦法有兩個(gè)讓服務(wù)端把pasv_min_port/pasv_max_port固定成一段連續(xù)區(qū)間并放行或者臨時(shí)切到主動(dòng)模式驗(yàn)證——但主動(dòng)模式只能作為定位手段不能作為長(zhǎng)期方案尤其是在容器和云主機(jī)上。2.3 傳輸類(lèi)型與文件名編碼看不見(jiàn)的破壞力TYPE命令決定數(shù)據(jù)連接上怎么解釋字節(jié)。TYPE AASCII會(huì)讓服務(wù)器在傳輸過(guò)程中做換行符轉(zhuǎn)換TYPE IIMAGE/Binary則原樣搬運(yùn)。這兩個(gè)選錯(cuò)了后果是靜默的傳一個(gè)壓縮包用 ASCII 模式大小可能差幾十個(gè)字節(jié)解壓直接報(bào)損壞傳一個(gè) shell 腳本用二進(jìn)制模式到了對(duì)端可能因?yàn)閾Q行符不對(duì)而執(zhí)行失敗。我的習(xí)慣是無(wú)腦TYPE I然后在需要的地方自己處理?yè)Q行。ftplib 的storbinary和retrbinary默認(rèn)就走二進(jìn)制這一點(diǎn)比裸寫(xiě) socket 省心但如果你的腳本混用了storlines那就要清楚它是按行讀寫(xiě)的適合純文本且你確認(rèn)對(duì)端接受當(dāng)前換行風(fēng)格。編碼是第二個(gè)隱形殺手。FTP 協(xié)議早期是純 ASCII 的中文文件名怎么表示完全看服務(wù)器實(shí)現(xiàn)。常見(jiàn)的兩種做法是在登錄后發(fā)OPTS UTF8 ON聲明使用 UTF-8或者干脆用服務(wù)器本地的 GBK。ftplib 的encoding屬性必須和服務(wù)器一致否則你上傳時(shí)文件名是對(duì)的nlst列出來(lái)卻是一串亂碼后面按名字下載全部失敗。from ftplib import FTP, error_perm ftp FTP() ftp.encoding utf-8 ftp.connect(ftp.example.com, 21, timeout20) ftp.login(demo_user, demo_pass) # 嘗試開(kāi)啟 UTF-8 模式服務(wù)器不支持會(huì)拋 500/502忽略即可 try: print(ftp.sendcmd(OPTS UTF8 ON)) except error_perm as e: print(服務(wù)器不支持 UTF8 選項(xiàng):, e) ftp.set_pasv(True) ftp.sendcmd(TYPE I) # 二進(jìn)制傳輸壓縮包、圖片、數(shù)據(jù)庫(kù)備份都必須用這個(gè) # 用 MLSD 拿結(jié)構(gòu)化列表能同時(shí)得到文件名、大小和修改時(shí)間 for name, facts in ftp.mlsd(/, facts[type, size, modify]): print(name, facts) ftp.quit()MLSD比LIST和NLST都好用因?yàn)樗祷氐氖菣C(jī)器可解析的鍵值對(duì)size和modify直接能拿來(lái)做增量判斷不用再去正則匹配ls -l格式的字符串??上Р皇撬欣戏?wù)器都支持遇到500 Unknown command就退回NLST加SIZE命令組合。如果mlsd拋出的文件名是亂碼把encoding換成gbk再試一遍這是我遇到中文名問(wèn)題時(shí)固定的第一步。3. ftplib 落地上傳、下載、遞歸拉目錄的四段可抄代碼模型清楚之后剩下的就是把動(dòng)作固化成函數(shù)。這一章的四段代碼對(duì)應(yīng)四種最常見(jiàn)的活穩(wěn)定連接、上傳帶進(jìn)度、下載并保留目錄結(jié)構(gòu)、傳完做校驗(yàn)。每一段都可以單獨(dú)摳出來(lái)用也可以拼成一個(gè)腳本。我一般會(huì)把連接參數(shù)抽到配置里認(rèn)證信息走環(huán)境變量避免密碼硬編碼在倉(cāng)庫(kù)里——這條不是潔癖是審計(jì)要求。3.1 連接骨架超時(shí)、重連與環(huán)境變量生產(chǎn)腳本和演示腳本最大的差別是容錯(cuò)。FTP 服務(wù)器的空閑超時(shí)往往設(shè)在 300 秒左右一個(gè)跑批腳本如果中間有長(zhǎng)時(shí)間的本地處理再回來(lái)發(fā)命令就可能收到421 Timeout然后控制連接被服務(wù)端關(guān)掉。這時(shí)候繼續(xù)用同一個(gè)連接對(duì)象發(fā)命令必然報(bào)error_temp或者直接EOFError。解決辦法是把「拿連接」封裝成函數(shù)每次用之前判斷連接是否還活著不活就重連。ftp.voidcmd(NOOP)是最輕量的探活方式服務(wù)器回200就說(shuō)明通道還在。import os from ftplib import FTP, all_errors def get_ftp(host, timeout20): ftp FTP() ftp.encoding utf-8 ftp.connect(host, 21, timeouttimeout) # 認(rèn)證信息從環(huán)境變量讀不要寫(xiě)死在代碼里 ftp.login(os.environ[FTP_USER], os.environ[FTP_PASS]) ftp.set_pasv(True) ftp.sendcmd(TYPE I) return ftp def ensure_alive(ftp, host): try: ftp.voidcmd(NOOP) # 探活成功返回 200 return ftp except all_errors: try: ftp.close() except Exception: pass return get_ftp(host)all_errors是 ftplib 提供的異常元組把error_reply、error_temp、error_perm、error_proto和OSError都包了進(jìn)去捕它比逐個(gè)列異常省事。ensure_alive的寫(xiě)法看起來(lái)有點(diǎn)粗暴——連接斷了就整個(gè)重建——但在批量任務(wù)里這是最省心的策略因?yàn)?FTP 的連接狀態(tài)很難恢復(fù)到「干凈」的狀態(tài)重建比修復(fù)便宜。要提醒一點(diǎn)connect的timeout和login之后的數(shù)據(jù)傳輸超時(shí)是兩個(gè)概念。socket層面的超時(shí)由connect傳入的timeout控制會(huì)作用到之后所有的 socket 操作上。如果你的網(wǎng)絡(luò)抖動(dòng)厲害把它設(shè)到 20 到 30 秒如果鏈路很穩(wěn)但要傳大文件設(shè)太小會(huì)在傳輸中途觸發(fā)超時(shí)那時(shí)候就只能靠斷點(diǎn)續(xù)傳來(lái)救代價(jià)更大。3.2 上傳storbinary 的回調(diào)與進(jìn)度統(tǒng)計(jì)上傳的核心是storbinary(cmd, fp, blocksize8192, callbackNone, restNone)。第一個(gè)參數(shù)是命令字符串通常是STOR 遠(yuǎn)程文件名第二個(gè)是打開(kāi)的文件對(duì)象必須是二進(jìn)制模式blocksize決定每次從本地讀多少字節(jié)往 socket 里寫(xiě)默認(rèn) 8192內(nèi)網(wǎng)可以調(diào)到 65536 提速跨公網(wǎng)保持在 8192 到 32768 更穩(wěn)。callback每次發(fā)送一個(gè)塊就被調(diào)用一次入?yún)⑹沁@一塊的字節(jié)數(shù)。用它做進(jìn)度條或者日志最好用但注意不要在回調(diào)里做耗時(shí)操作否則會(huì)拖慢整體傳輸。import os from ftplib import FTP def upload_file(ftp, local_path, remote_dir, remote_nameNone): remote_name remote_name or os.path.basename(local_path) total os.path.getsize(local_path) sent 0 def _on_block(block): nonlocal sent sent len(block) percent sent * 100 // total if total else 100 print(f\r上傳 {remote_name}: {sent}/{total} 字節(jié) ({percent}%), end) # 確保遠(yuǎn)程目錄存在不存在則逐級(jí)創(chuàng)建 try: ftp.cwd(remote_dir) except error_perm: for part in remote_dir.strip(/).split(/): try: ftp.mkd(part) except error_perm: pass ftp.cwd(part) with open(local_path, rb) as fp: ftp.storbinary(fSTOR {remote_name}, fp, blocksize32768, callback_on_block) print()這里有個(gè)細(xì)節(jié)值得說(shuō)mkd在目錄已存在時(shí)會(huì)拋error_perm通常是 550直接吞掉繼續(xù)cwd就行這是 FTP 建目錄的常規(guī)寫(xiě)法沒(méi)有冪等的mkdir -p。另外注意cwd的語(yǔ)義——FTP 的當(dāng)前目錄是服務(wù)端會(huì)話狀態(tài)你的函數(shù)改完之后要記得它對(duì)后續(xù)操作有影響最穩(wěn)妥的做法是每次操作前顯式cwd到目標(biāo)目錄不要依賴(lài)上一次殘留的位置。進(jìn)度統(tǒng)計(jì)用nonlocal累加會(huì)出現(xiàn)一個(gè)偏差callback收到的塊大小是寫(xiě)入 socket 的量正常情況下和文件大小一致但如果中途失敗sent會(huì)停在半路。所以這個(gè)進(jìn)度只能用于人看不能當(dāng)成成功的判據(jù)——真正的成功判據(jù)是storbinary正常返回且遠(yuǎn)程SIZE對(duì)得上。3.3 下載retrbinary 與遞歸拉取整個(gè)目錄下載用retrbinary(RETR 文件名, callback, blocksize, restNone)回調(diào)收到的是數(shù)據(jù)塊需要自己往本地文件里寫(xiě)。這一點(diǎn)和上傳不同上傳是 ftplib 幫你讀本地文件下載是 ftplib 把數(shù)據(jù)交給你怎么存由你決定。遞歸拉目錄的難點(diǎn)在于 FTP 沒(méi)有現(xiàn)成的遞歸命令只能自己維護(hù)一個(gè)棧。服務(wù)端的目錄遍歷有兩條路nlst只能列出名字MLSD能帶出type字段區(qū)分目錄和文件。優(yōu)先用MLSD不支持的話就用cwd試著切進(jìn)去切成功就是目錄——這個(gè)技巧雖然土但兼容性最好。import os from ftplib import FTP, error_perm def download_tree(ftp, remote_dir, local_dir): os.makedirs(local_dir, exist_okTrue) try: entries list(ftp.mlsd(remote_dir, facts[type, size])) structured True except error_perm: entries [(n, {}) for n in ftp.nlst(remote_dir)] structured False for name, facts in entries: if name in (., ..): continue remote_path f{remote_dir.rstrip(/)}/{name} local_path os.path.join(local_dir, name) is_dir facts.get(type) dir if structured else False if not structured: # 沒(méi)有 MLSD 時(shí)用 cwd 試探是否為目錄 try: ftp.cwd(remote_path) ftp.cwd(remote_dir) is_dir True except error_perm: is_dir False if is_dir: download_tree(ftp, remote_path, local_path) else: with open(local_path, wb) as fp: ftp.retrbinary(fRETR {remote_path}, fp.write, blocksize32768) print(已下載, remote_path)遞歸函數(shù)里對(duì)目錄的判斷邏輯有個(gè)隱患cwd試探會(huì)改變當(dāng)前目錄所以切進(jìn)去之后必須立刻切回來(lái)代碼里ftp.cwd(remote_dir)那一行就是干這個(gè)的。如果服務(wù)端對(duì)CWD的響應(yīng)慢這個(gè)方案會(huì)明顯拖慢遍歷速度那時(shí)候就只能退而求其次約定好目錄結(jié)構(gòu)只同步固定層級(jí)。另外注意local_path里的文件名直接來(lái)自服務(wù)器中文名場(chǎng)景下如果encoding設(shè)錯(cuò)這里會(huì)在本地創(chuàng)建出一堆亂碼文件名。跑之前先用一個(gè)小目錄試一遍確認(rèn)文件名字節(jié)正確再放開(kāi)全量。這個(gè)驗(yàn)證動(dòng)作我每次都做因?yàn)樗鼘儆凇赋鲥e(cuò)之后清理成本極高」的那類(lèi)問(wèn)題。3.4 校驗(yàn)用 SIZE 和 MD5 把傳輸閉環(huán)傳輸成功不等于文件正確。FTP 在二進(jìn)制模式下不做完整性校驗(yàn)網(wǎng)絡(luò)中斷、磁盤(pán)寫(xiě)滿(mǎn)、服務(wù)端中途返回 426都可能留下一個(gè)大小不對(duì)的文件。storbinary和retrbinary在不拋異常的情況下返回226 Transfer complete這只說(shuō)明服務(wù)端認(rèn)為傳完了不代表字節(jié)一定對(duì)齊。第一層校驗(yàn)是SIZE命令單位是字節(jié)直接和本地os.path.getsize對(duì)比。這一層能擋住絕大多數(shù)截?cái)鄦?wèn)題成本幾乎為零。import hashlib from ftplib import FTP, error_perm def remote_size(ftp, remote_path): try: return ftp.size(remote_path) # 返回 int單位字節(jié) except error_perm: return None # 服務(wù)器不支持 SIZE 命令時(shí)返回 None def remote_md5(ftp, remote_path): h hashlib.md5() ftp.retrbinary(fRETR {remote_path}, h.update, blocksize65536) return h.hexdigest() def local_md5(path): h hashlib.md5() with open(path, rb) as fp: for chunk in iter(lambda: fp.read(65536), b): h.update(chunk) return h.hexdigest()remote_md5的實(shí)現(xiàn)方式是把文件整個(gè)再拉一遍喂給哈希對(duì)象對(duì)于幾 GB 的備份包來(lái)說(shuō)代價(jià)不小所以我的實(shí)際策略是分級(jí)的日常小文件用SIZE對(duì)比就夠了重要數(shù)據(jù)在傳完之后再跑一次MD5比對(duì)超大文件改成傳完立刻對(duì)端算哈希、通過(guò)別的通道回傳不在 FTP 里繞這一圈。還要注意ftp.size()在某些服務(wù)器上對(duì) ASCII 模式的文件返回的是轉(zhuǎn)換后的大小所以前面強(qiáng)調(diào)TYPE I不是可選項(xiàng)。如果你拿到的大小和本地差幾字節(jié)且文件是文本類(lèi)第一反應(yīng)應(yīng)該是傳輸模式被改過(guò)而不是文件壞了。4. 命令行側(cè)的打法curl 與 lftp 在批量同步腳本里的分工不是所有活都值得寫(xiě) Python。臨時(shí)拉一個(gè)文件、CI 流水線里傳個(gè)制品、crontab 里跑個(gè)每日同步命令行工具更直接出問(wèn)題也更容易在日志里看到原始錯(cuò)誤碼。這一章說(shuō)清楚 curl 和 lftp 各自適合什么以及怎么把它們?nèi)M(jìn) shell 腳本而不留隱患。4.1 curl 的四種姿勢(shì)單文件上傳下載與建目錄curl 支持 FTP 協(xié)議語(yǔ)法統(tǒng)一返回值規(guī)范是腳本里的首選。四種最常見(jiàn)的用法下載單文件、上傳單文件、上傳時(shí)自動(dòng)建目錄、斷點(diǎn)續(xù)傳下載。# 1. 下載單個(gè)文件到當(dāng)前目錄保留遠(yuǎn)程文件名 curl -u $FTP_USER:$FTP_PASS \ --ftp-pasv \ --connect-timeout 15 \ -O ftp://ftp.example.com/data/report.csv # 2. 上傳單文件-T 指定本地文件 curl -u $FTP_USER:$FTP_PASS \ -T ./report.csv \ ftp://ftp.example.com/upload/report.csv # 3. 上傳時(shí)自動(dòng)創(chuàng)建缺失的遠(yuǎn)程目錄 curl -u $FTP_USER:$FTP_PASS \ --ftp-create-dirs \ -T ./report.csv \ ftp://ftp.example.com/upload/2024/06/report.csv # 4. 斷點(diǎn)續(xù)傳下載-C - 表示讓 curl 自動(dòng)計(jì)算偏移 curl -u $FTP_USER:$FTP_PASS -C - -O ftp://ftp.example.com/data/big.tar.gz--ftp-pasv在新版 curl 里已經(jīng)是默認(rèn)行為顯式寫(xiě)上是為了讓腳本意圖清楚也防止某些環(huán)境變量把它改掉。--connect-timeout只控制建連階段傳輸階段的卡頓要靠--speed-time和--speed-limit來(lái)控制比如「連續(xù) 60 秒速度低于 1KB/s 就斷開(kāi)」這在鏈路不穩(wěn)的場(chǎng)景下很實(shí)用能讓腳本快速失敗而不是掛一晚上。--ftp-create-dirs是最容易被忽略但最省事的一個(gè)參數(shù)。沒(méi)有它你把文件傳到不存在的目錄會(huì)直接得到550 No such directory而很多人會(huì)誤以為是權(quán)限問(wèn)題去翻服務(wù)端配置翻半天。退出碼要檢查。curl 返回 0 才是成功$?非 0 時(shí)要按碼定位6 是域名解析失敗7 是連不上9 是 FTP 訪問(wèn)被拒67 是登錄失敗78 是遠(yuǎn)程文件不存在。把這幾個(gè)碼寫(xiě)進(jìn)腳本的錯(cuò)誤分支比事后翻日志快得多。if ! curl -sS -u $FTP_USER:$FTP_PASS --ftp-create-dirs \ -T ./report.csv ftp://ftp.example.com/upload/report.csv; then code$? case $code in 67) echo 認(rèn)證失敗檢查賬號(hào)密碼 2 ;; 78) echo 遠(yuǎn)程路徑不存在 2 ;; *) echo 上傳失敗curl 退出碼 $code 2 ;; esac exit 1 fi-sS的組合值得解釋-s靜默掉進(jìn)度條-S在出錯(cuò)時(shí)仍然把錯(cuò)誤信息打出來(lái)。只寫(xiě)-s會(huì)讓腳本失敗得悄無(wú)聲息這是我在流水線里踩過(guò)的坑。4.2 lftp 的 mirror目錄級(jí)同步的正解單文件用 curl整目錄同步就該換 lftp。mirror子命令是 lftp 的核心競(jìng)爭(zhēng)力它支持遞歸、支持?jǐn)帱c(diǎn)續(xù)傳、支持并行、支持排除規(guī)則寫(xiě)起來(lái)還短。# 把遠(yuǎn)程 /data/2024 同步到本地 ./backup-c 表示續(xù)傳-n 只拉新文件 lftp -u $FTP_USER,$FTP_PASS ftp.example.com -e set ftp:passive-mode true; set net:timeout 20; set net:max-retries 3; mirror -c -n --parallel4 /data/2024 ./backup; bye # 反向把本地 ./dist 推送到遠(yuǎn)程 /public/release lftp -u $FTP_USER,$FTP_PASS ftp.example.com -e set ftp:passive-mode true; mirror -R -c --parallel4 --exclude-glob *.tmp ./dist /public/release; bye -c是續(xù)傳-n是只傳新文件基于大小和時(shí)間做判斷-R是反向鏡像本地到遠(yuǎn)程--parallel4開(kāi) 4 個(gè)并發(fā)連接。并發(fā)數(shù)不是越大越好很多 FTP 服務(wù)器對(duì)單 IP 的連接數(shù)有限制超過(guò)會(huì)直接被拒或者限速4 到 8 是比較安全的區(qū)間。set net:max-retries 3配合net:timeout是穩(wěn)定性關(guān)鍵。FTP 在大批量小文件場(chǎng)景下很容易出現(xiàn)個(gè)別文件超時(shí)沒(méi)有重試的話整個(gè) mirror 會(huì)中斷。但重試也別設(shè)太大否則一個(gè)壞文件能把你卡到天亮。--exclude-glob用來(lái)排除臨時(shí)文件這個(gè)在鏡像構(gòu)建目錄時(shí)特別必要否則.tmp、.swp這些垃圾會(huì)反復(fù)被推送還會(huì)因?yàn)闀r(shí)間戳變化導(dǎo)致每次都被判定為「新文件」。4.3 定時(shí)同步腳本鎖、日志與失敗告警把上面的命令塞進(jìn) crontab 之前有三件事必須補(bǔ)上防并發(fā)、留日志、失敗可見(jiàn)。防并發(fā)用flock防止上一輪沒(méi)跑完下一輪又起來(lái)了兩個(gè)進(jìn)程同時(shí)往一個(gè)目錄寫(xiě)結(jié)果一定是災(zāi)難。日志按天切分別讓它無(wú)限增長(zhǎng)。失敗告警最簡(jiǎn)單的做法是靠退出碼觸發(fā)lftp在-e里的命令失敗時(shí)退出碼非 0可以在外層判斷。#!/usr/bin/env bash set -euo pipefail LOG_DIR/var/log/ftp-sync mkdir -p $LOG_DIR LOG_FILE$LOG_DIR/sync-$(date %Y%m%d).log { echo 開(kāi)始 $(date %F %T) if ! lftp -u ${FTP_USER},${FTP_PASS} ftp.example.com -e set ftp:passive-mode true; set net:timeout 20; set net:max-retries 3; mirror -c -n --parallel4 /data/2024 /data/backup/2024; bye ; then echo 同步失敗 $(date %F %T) 2 exit 1 fi echo 結(jié)束 $(date %F %T) } $LOG_FILE 21crontab 里的寫(xiě)法是*/30 * * * * flock -n /tmp/ftp-sync.lock /opt/scripts/ftp-sync.sh。flock -n表示拿不到鎖就立刻退出不會(huì)堆積。這套結(jié)構(gòu)看著樸素但比很多花哨的同步框架可靠因?yàn)樗恳画h(huán)的失敗都能在日志里找到對(duì)應(yīng)的一行。5. 避坑與排查亂碼、425、超時(shí)、550 的五條血淚記錄前面幾章講的是「怎么讓它跑起來(lái)」這一章講的是「它跑起來(lái)之后為什么還會(huì)出事」。下面五條都是我在實(shí)際環(huán)境里遇到過(guò)的按「現(xiàn)象 → 原因 → 解決」記能對(duì)上一個(gè)就省一晚上的時(shí)間。5.1 中文文件名變成亂碼上傳后下載不回來(lái)現(xiàn)象本地文件名是日?qǐng)?bào)_20240601.csv上傳到服務(wù)器后用客戶(hù)端看是一串問(wèn)號(hào)或者方塊用腳本nlst列出來(lái)是??_20240601.csv再按原名RETR直接報(bào) 550。原因控制連接上的文件名字節(jié)編碼和服務(wù)器解釋的編碼不一致。ftplib 的encoding默認(rèn)是 UTF-8很多國(guó)內(nèi)老服務(wù)器默認(rèn) GBK字節(jié)流過(guò)去之后被按另一套碼表解碼就成了亂碼。另外有些服務(wù)器即使支持 UTF-8也需要顯式發(fā)OPTS UTF8 ON才切換。解決先試ftp.sendcmd(OPTS UTF8 ON)成功說(shuō)明服務(wù)器支持 UTF-8保持encodingutf-8如果返回500或502把encoding改成gbk再跑一遍。命令行側(cè) curl 沒(méi)有直接的編碼開(kāi)關(guān)我一般改用 lftp 并設(shè)置set ftp:charset gbk或set ftp:charset utf-8。驗(yàn)證方法很簡(jiǎn)單上傳一個(gè)中文名的小文件立刻nlst回來(lái)比對(duì)字節(jié)別等全量傳完再發(fā)現(xiàn)。5.2 425 打不開(kāi)數(shù)據(jù)連接控制連接卻完全正?,F(xiàn)象登錄成功PWD正常返回一執(zhí)行LIST或RETR就報(bào)425 Cant open data connection重試幾次偶爾能成功。原因被動(dòng)模式下服務(wù)器返回的臨時(shí)端口沒(méi)有在防火墻或安全組放行。偶爾成功是因?yàn)閰^(qū)間里個(gè)別端口恰好被放通了或者會(huì)話復(fù)用了上一次的連接。另一種可能是服務(wù)器返回的 PASV IP 是內(nèi)網(wǎng)地址客戶(hù)端在公網(wǎng)側(cè)根本連不上。解決先開(kāi)set_debuglevel(2)或者手動(dòng)發(fā)PASV把服務(wù)器返回的 IP 和端口算出來(lái)前面講過(guò)p1*256p2的換算。然后核對(duì)防火墻放行區(qū)間讓服務(wù)端把pasv_min_port和pasv_max_port固定成一段連續(xù)端口并整體放行。如果服務(wù)器返回的是內(nèi)網(wǎng) IP需要在服務(wù)端配置里指定對(duì)外通告的地址這一項(xiàng)各服務(wù)端軟件叫法不同得看具體實(shí)現(xiàn)。5.3 大文件傳到 90% 斷了重跑又從零開(kāi)始現(xiàn)象幾 GB 的備份包傳了半小時(shí)在快結(jié)束時(shí)拋TimeoutError或ConnectionResetError腳本重跑一遍進(jìn)度從 0% 重新開(kāi)始反復(fù)幾次永遠(yuǎn)傳不完。原因FTP 的空閑超時(shí)和數(shù)據(jù)傳輸超時(shí)都會(huì)在中途觸發(fā)尤其是鏈路質(zhì)量差的時(shí)候。更關(guān)鍵的是默認(rèn)的STOR命令會(huì)截?cái)嗤募匦聦?xiě)不具備續(xù)傳語(yǔ)義所以重跑必然是覆蓋。解決上傳用APPE命令追加或者用STOR配合rest參數(shù)指定偏移量下載用RETR配合rest。ftplib 的storbinary和retrbinary都有rest參數(shù)傳字節(jié)偏移即可。偏移量從遠(yuǎn)程SIZE拿本地文件也按同樣大小截?cái)鄬?duì)齊。更省事的做法是直接用 lftp 的mirror -c或者 curl 的-C -它們內(nèi)部處理了這套邏輯。5.4 550 權(quán)限錯(cuò)誤但賬號(hào)明明有寫(xiě)權(quán)限現(xiàn)象上傳時(shí)報(bào)550 Permission denied或者550 No such file or directory運(yùn)維確認(rèn)賬號(hào)對(duì)目標(biāo)目錄有寫(xiě)權(quán)限。原因三種可能。一是目標(biāo)目錄根本不存在FTP 不會(huì)自動(dòng)建目錄550 No such file or directory很多時(shí)候就是這個(gè)意思二是當(dāng)前工作目錄不在預(yù)期位置腳本上一步cwd到了別處三是服務(wù)端的chroot或家目錄限制讓絕對(duì)路徑不可達(dá)你用的/upload/xxx在服務(wù)端被解釋成了別的路徑。解決先用ftp.pwd()確認(rèn)當(dāng)前位置再用ftp.cwd(/)回到根看目錄結(jié)構(gòu)最后用相對(duì)路徑操作。目錄不存在就按前面mkd逐級(jí)創(chuàng)建的方式補(bǔ)上或者命令行加--ftp-create-dirs。如果cwd(/)之后看到的結(jié)構(gòu)和預(yù)期完全不同那就是被 chroot 了所有路徑都得按賬號(hào)家目錄的相對(duì)路徑來(lái)寫(xiě)。5.5 腳本跑著跑著不報(bào)錯(cuò)也不動(dòng)了現(xiàn)象定時(shí)任務(wù)卡住沒(méi)有輸出進(jìn)程一直掛著ps能看到但 CPU 和網(wǎng)絡(luò)都是 0。原因connect時(shí)用了默認(rèn)的timeoutNonesocket 進(jìn)入阻塞狀態(tài)永不超時(shí)。服務(wù)端已經(jīng)悄悄斷了控制連接客戶(hù)端還在傻等一個(gè)永遠(yuǎn)不會(huì)來(lái)的響應(yīng)。解決所有connect調(diào)用強(qiáng)制傳timeout20 到 30 秒是常用值在長(zhǎng)任務(wù)中間定期發(fā)NOOP探活失敗就重建連接。crontab 外面再套一層timeout 3600兜底讓卡死的進(jìn)程自己被殺掉比事后手工清理干凈得多。這套「超時(shí) 探活 外層兜底」三重保險(xiǎn)是我在吃過(guò)一次卡死一整晚的虧之后固定下來(lái)的寫(xiě)法。6. 進(jìn)階收口斷點(diǎn)續(xù)傳、顯式 FTPS 與傳輸后校驗(yàn)把基礎(chǔ)的傳通之后剩下的價(jià)值都在「出事時(shí)能恢復(fù)」和「?jìng)魍曛竽茏C明它是對(duì)的」這兩件事上。這一章說(shuō)三個(gè)具體做法都是可以直接塞進(jìn)現(xiàn)有腳本的。6.1 用 REST 和 SIZE 做真正的斷點(diǎn)續(xù)傳斷點(diǎn)續(xù)傳的核心是一個(gè)字節(jié)偏移量。下載時(shí)先用SIZE拿到遠(yuǎn)程文件總大小再看本地已下載多少用rest參數(shù)告訴服務(wù)器從哪個(gè)字節(jié)開(kāi)始發(fā)。上傳同理但方向反過(guò)來(lái)遠(yuǎn)程用SIZE拿已上傳的字節(jié)數(shù)本地文件用seek跳到對(duì)應(yīng)位置。import os from ftplib import FTP def resume_download(ftp, remote_path, local_path): remote_total ftp.size(remote_path) local_size os.path.getsize(local_path) if os.path.exists(local_path) else 0 if local_size remote_total: print(本地文件已完整跳過(guò)) return mode ab if local_size else wb with open(local_path, mode) as fp: # rest 參數(shù)即偏移量服務(wù)器從該字節(jié)位置開(kāi)始發(fā)送 ftp.retrbinary(fRETR {remote_path}, fp.write, blocksize65536, restlocal_size) # 傳完必須校驗(yàn)不一致說(shuō)明中途又?jǐn)嗔?if os.path.getsize(local_path) ! remote_total: raise RuntimeError(續(xù)傳后大小不一致需要整體重傳)這段邏輯里最容易錯(cuò)的是最后那個(gè)校驗(yàn)。rest參數(shù)在部分服務(wù)器上行為不規(guī)范可能忽略偏移量從頭開(kāi)始發(fā)結(jié)果就是本地文件前面一段被重復(fù)追加大小直接超過(guò)遠(yuǎn)程。加一道大小比對(duì)能第一時(shí)間發(fā)現(xiàn)這種「假續(xù)傳」代價(jià)只是一次getsize。上傳側(cè)的寫(xiě)法和這個(gè)鏡像對(duì)稱(chēng)用storbinary的rest參數(shù)配合本地fp.seek(local_size)。要注意storbinary從文件對(duì)象的當(dāng)前位置開(kāi)始讀所以seek必須在調(diào)用前完成。6.2 顯式 FTPS把明文通道關(guān)掉如果傳輸?shù)氖琴~號(hào)、日志、業(yè)務(wù)數(shù)據(jù)明文 FTP 意味著密碼和內(nèi)容都在網(wǎng)絡(luò)上裸奔。顯式 FTPSFTP over TLS在 21 端口上先明文建連再用AUTH TLS升級(jí)加密兼容性比隱式 FTPS 好大多數(shù)服務(wù)端都支持。import ssl from ftplib import FTP_TLS ftps FTP_TLS(contextssl.create_default_context()) ftps.encoding utf-8 ftps.connect(ftp.example.com, 21, timeout20) ftps.login(demo_user, demo_pass) ftps.prot_p() # 關(guān)鍵把數(shù)據(jù)連接也加密不加這行數(shù)據(jù)仍是明文 ftps.set_pasv(True) print(ftps.nlst(.)) ftps.quit()prot_p()這一行是分水嶺。很多腳本登錄之后忘了調(diào)用它控制連接加密了、數(shù)據(jù)連接還是明文等于白配。另外ssl.create_default_context()會(huì)啟用證書(shū)校驗(yàn)如果服務(wù)端用的是自簽證書(shū)會(huì)直接拋SSLCertVerificationError生產(chǎn)環(huán)境應(yīng)該把服務(wù)端證書(shū)的 CA 加進(jìn)信任鏈而不是圖省事用_create_unverified_context()關(guān)掉校驗(yàn)——關(guān)掉之后加密就只能防旁觀防不了中間人。6.3 傳輸后的校驗(yàn)清單最后說(shuō)一個(gè)我固定執(zhí)行的動(dòng)作每次批量傳輸結(jié)束后跑一遍校驗(yàn)清單而不是相信「腳本沒(méi)報(bào)錯(cuò)就是成功」。檢查項(xiàng)手段判定標(biāo)準(zhǔn)文件數(shù)量本地ls計(jì)數(shù) vs 遠(yuǎn)程N(yùn)LST計(jì)數(shù)數(shù)量一致缺一個(gè)都要查單文件大小os.path.getsizevsftp.size()逐字節(jié)相等關(guān)鍵文件哈希本地 MD5 vs 遠(yuǎn)程RETR計(jì)算 MD5抽樣比對(duì)重要文件修改時(shí)間本地 mtime vsMDTM返回值增量同步時(shí)用于判斷新舊傳輸模式TYPE I是否生效文本文件大小不應(yīng)出現(xiàn)偏差這張表我一般做成一個(gè)獨(dú)立的小腳本傳完之后單獨(dú)跑輸出一份對(duì)賬結(jié)果。它的價(jià)值不在于發(fā)現(xiàn)大問(wèn)題——大問(wèn)題腳本早就拋異常了——而在于發(fā)現(xiàn)那些「差幾十字節(jié)」「少一個(gè)文件」的靜默失敗這類(lèi)問(wèn)題在第二天業(yè)務(wù)方找上門(mén)時(shí)才發(fā)現(xiàn)排查成本是當(dāng)場(chǎng)發(fā)現(xiàn)的十倍。還有一個(gè)習(xí)慣任何一次改動(dòng)過(guò)連接參數(shù)、編碼、路徑的腳本上線前先用一個(gè)只含兩三個(gè)小文件的測(cè)試目錄完整跑一遍包括上傳、下載、校驗(yàn)和故意中斷后的續(xù)傳。FTP 的問(wèn)題大多不是邏輯錯(cuò)是環(huán)境差異本地跑通不代表生產(chǎn)跑通但本地跑不通一定別往生產(chǎn)推。那次凌晨少了一個(gè)包的教訓(xùn)之后我每次把同步腳本交給別人之前都會(huì)強(qiáng)制走一遍「小目錄全流程 斷網(wǎng)續(xù)傳 大小校驗(yàn)」這三步寧可多花二十分鐘也不想再對(duì)著干凈的日志找一晚上原因。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色97国产69香蕉| 精品久久久不卡一区二区| 青草伊人网| 久久久一热在线播放| 亚洲无码精品AV久久久| 欧美在线 亚洲| 亚洲……91| 国产欧美日韩一区二区三区| 青青草依人大香蕉| 做爱福利视频一区二区| 色九九九九久| 乱伦熟女区| 97综合国产| 今日头条成人一区二区三区四虎精品| 9l视频自拍9l九色成人| 免费啪啪av| 精品人妻少妇| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 97摸视频| 性爱视频啪啪啪啪| AAAA欧美日韩| 曰韩中文人妻视频| 色欧洲| 国内精品久9| 校园春色亚洲色图| 国产免费内射视频| 国产久久久9999| 青娱乐淫乱1314| 九九人妻| 亚洲国产丝袜在线观看| 一区二区三区四区五区高清无码永久视频 | 蜜臀aV午夜一区二区三区| 亚洲色图激情小说| 亚洲天堂东京热| 91久久婷婷| 色狠狠 - 百度| 成人精品在线免费视频| 明星性猛交ⅹxxx乱大交| 国产精品禁久久久精品| 色综合 加勒比| 东北女人的毛片| 成人综合色网| 亚洲美乱| 嗯嗯嗯嗯啊啊啊好紧好大| 劲爆欧美人妖三区91| 91欧美长吊| 成年男人的天堂| 骚熟女AV网| 欧美91久久久久| 九九九久久久久| 青娱乐 成人娱乐在线| 影音先锋国产精品| 99色在线视频| 国产在线76页| 免费看美国人人爽,人人操 | 精品无码一区二区人妻久久蜜桃| www.AV有限公司一区| 日本人妻一区二区| 欧美日韩精品久久| 亚州熟妇精品| 日韩精品影视| 欧美 亚洲| 大粗鳼巴久久久久| 国产成人99久久亚洲综合| 亚洲三级。日韩三级| 婷婷综合| 欧亚 另类 久| 天天综合欧美综合| 传媒在线观看一区二区三区| 欧美在线电影| 亚洲h片在线免费观看| 岛国免费黄色网址| 欧美综合国产精品久久丁香| 熟女这里只有精品6| 蜜乳AV.COM| 香蕉黄色一级视频| 亚洲AV无码成人精品久久| 国产小视频91| 97爱免费插| 久日91在线| 91美女视频直播| 高清无码学生妹高潮| 大香蕉99999| 婷婷久久五月综合激情| 女同性恋久久| 超碰亚洲欧美日韩无| 大鸡吧尹人在线| 看看日B真人视频| 天天综合-91入口| 男人久久天堂| 久久6热视频免费观看| 去干网最新版| 亚洲男人天堂2016| 先锋女优在线观看视频| 少妇一级婬片免费放一级a性色.| 亚洲福利中文字幕在线| 欧美激情超碰777| 啊啊啊啊啊啊啊网址在线观看| 91丝袜视频在线观看| 91超碰丝袜制服| 午夜操一操| 欧美十八禁在线看| 伊人久久国产免费观看视频| 一二区在线观看视频| 熟女乱3伦999| 乱理日韩中文| 97超碰中文在线| 日韩乱伦AⅤ| 97久久资源| 97操97干| 少妇滛荡视频| 人妻熟女一区二区| 91av一区二区在线观看| 人妻久热在线| 亚洲日韩天堂| 五月丁香网站| 欧美日韩国产精品久久色婷婷| 亚洲一区二区三区播放在线| 69AV女优男人的天堂| 天天影视综合色| 亚洲一区二区三区不卡国产欧美| 裸体美女免费看网站青草| 老司机午夜精品福利视频一区二区| 久久久精品网站| 激情久久久| 91女优在线观看| 乱伦a片视频| 久插综合| 国产精品毛片?v一区二区三区 | 免费的黄片有限公司| 五月丁香亭亭| 欧美丝袜中文字幕07在线| 久久AV无码网址| 高清肉丝中文无码| 中文操逼字幕| 韩国女主播青草在线| 国产粉嫩蜜臀av一区二区三区| 91狠婷| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 99在线精品观看视频中文| 日韩色欲久久一二三四区| 高跟伊人julia ann| 国产成人欧美一区二区三区的国产| 久久久久久性爱片| 国产成久久综合片| 一区二区不卡| 亚洲二区精品在线观看| 5252色欧美在线男人的天堂| 性欧美另类高清| 中文字幕久久婷婷丁香五月天| 后X久久| 中文字幕后石码四区五区| 啊啊啊啊嗯嗯嗯用力好爽 | 国产野战露脸在线播放| 职场同事知名国产国产精品久久欧美日韩| 国产精品无码av在线| 亚洲天堂日本| 人妻一区久久二区三区色播| 日日操丁香五月天| 大香蕉av在线| 玖玖久久久| 亚洲日韩av一区二区三区百合| 天天看天天日| 国产吹潮女在线观看| av在线资源| 亚洲成人妻日韩在线| 乱伦av麻豆| 91色欧美| 伦在线97| 欧美日韩国产中文精品字幕自在自线,| 大象AV在线| 久草新免费| 国产亚洲深夜激情| 永久免费发布性爱网| 日韩青久久| 蜜臀av在线播放一区二区三区| 天天射天天操天天干天天吃2018 | 国产成人精品日本视频| 亚洲有码视频二区| 伊人大香蕉在线| 人人操,操人人| 啊啊啊免费| 99re69| 激情久久久| 一区二区三区四区理论片| 久久久久久久久久久999| 黄视频免费| 国内精品久9| 岛国免费黄色网址| 日韩在线国产字幕| 国产精品日日摸天天碰| 一区二三区四区视频大全套| 欧美|91色综合| 加勒比在线视频一区二区三区| 深夜国产福利| 欧美亚洲高清晰| 久插综合| 99九九久久| 亚洲无码99| 一本一道vs波多野结衣| 日韩乱伦AⅤ| site:sinbotex.com| 超碰免费欧美7| 4141514逼喷水三级片| 亚欧Av| 国产精品一区二区手机看片| 亚洲欧美碰碰| 91M一社| 97国产精品久久久久| 宅男午夜在线视频| 久久久久日本视| 久久天堂婷婷网| 大香蕉五月天| 啪啪AV导航| 天天懆天天日| 日本在线视频导航| 精品人人| 中文字幕 码 自拍 视频 区| 四虎AV在线观看| 无码聚合| 中文字幕精品资源在线| av天堂手机版追回| 3p国产色噜噜一区| 亚洲精品中文字幕一区在线视频| 婷婷丁香五月天综合东京热| 免费作爱一级视频| 亚洲Av无码成人精品国产| 东北丰满熟女国产一区 | 9精品久久久久| 中文字幕av一区二区三区人妻少妇| 日日日骚女人精品| 久久久久婷婷精品av电影| 桃色人妻在线视频| 色欧洲97| 国产强奸乱伦无码视频| 激情小说图片亚洲首页| 亚洲欧美另类图片| 欧美成人一级麻豆| 午夜操逼不卡| 免费一级a毛片久久久久久鸭绿欲| 日韩亚洲美女一区久久| 久操99| 久久精品视频在线观看| 天天综合网91入口| 嗯嗯嗯啊啊啊操的我好爽 | 97人人操人人干| 色五月大香蕉| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 内射黑人| 大香蕉啪啪啪啪在线| 搞中出视频在线观看| 精吧天堂| 国产在线视频午夜精华在| 欧美性爱日韩高清| 欧美黄色大香蕉一区二区| 天天爽夜夜操| 97视频在线观看高清资源| 亚洲中文字幕乱码无码一区二区| 天堂日本亚洲欧美| a v网站在线播放| 99re免费| 中国人高清www色视频免费| 中文字幕丰满人妻日本| 人人做人人妻人人夜视频| 婷婷色在线| 狠狠搞 亚洲91| 东京太热久久久| 成人久久精品| 18精品一二区| 青娱乐国产剧情av一区| 久草网站免费在线观看| 色婷婷aV一区二区三区麻豆综合| 九九九九9999| 超碰日本97美女人妻人人玩人人爱| 骚逼一区二区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 国产乱伦一二三区| 久久999久| 欧美亚州综合网图片| 强奸乱伦 亚洲一区| 女人被男人桶爽视频网站| 97人人草| 亚洲色图 91| 芊芊操逼视频无码| 久久综合乱子伦国产免费| 欧美丝袜美女电影一二三四区| www欧美91| 能在线播放的国产三级| 一区二区三区国产精产| 久久久男人的天堂| 亚洲色图欧美色图日韩色图| 看黑人AV不卡| 二三四区精品| 欧美翘臀视频网站一区二区三区 | 一起草三级AV电影在线观看 | 久久 亚洲 日韩 人妻| 97亚洲中文| 大香久久| AV综合中文字幕干| 成人精品水蜜桃久久久久久久| 富女玩鸭子一级毛片| 美女黄色一级A视频| 9久9久9久9久视频网站| 囯产乱伦一区二区三女| 物业黑人 AV一区| 欧美 亚洲| 色婷婷小说| 情色大香蕉| 国产色呦呦| 亚洲综合69| 无码天天操| 在线啊啊啊啊| 欧美亚洲综合高清在线| 日本天天人人狠狠在线日美女 | 乱欲视频| 亚洲精品 欧美精品| 99精品九九九九九九| 亚洲国产欧美中文永久| 日日黄色三级网站| 亚洲欧美自拍偷拍| 蜜臀一二三区| 五月天激情小说| 起碰97| 久草毛片电影怡| 欧美激情色婷婷花野真衣一区二区| 在线 亚洲 网爆 自拍| 亚洲伊人a线观看视频| 操婢日韩| 热思思免费视频| 亚欧美综合网| 欧美亚洲第1页| 亚洲精品一二牛牛| 国产欧美后入| 男男H黄动漫啪啪无遮挡网站| 99热这里只有精品1| 99超碰色| 亚洲国产精品成人综合| 91高潮喷水美女| 色五月婷婷麻豆在| 蜜臀99久久精品久久久久| 91久久国产综合久久| 91处女在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 成人五月天色网| 韩国午夜理伦三级好看| 亚洲国产美女久久久久| 999九九精品| 97天堂| 亚洲 欧美 制服 另类 自拍| 欧美色干| 欧美一级专区免费大片| 欧美日日夜夜| 俺去俺来也在线www| 美女裸体无遮挡永久免费观看网站| 日韩精品9区| 综合色图亚洲欧美| 日本欧美一区二区三区免费| 中文字幕人妻资源在线| 久久久久久久久9| 天天干天天日天天射黄色片| 五月天偷拍| 欧美成人A天堂片在线观看| 欧美人体性爱互联网第一页婷婷日本| 精品无码产区一区二| 91P0RNY大屁股人妻| 精品中文日韩字幕视频| 快点操死我| 在线无码操| 久久久久亚洲熟妇熟女| 操死我了啊啊啊| 厕所偷拍在线| 香蕉久久国产AV一区二区| 免费αV在线视频| 久99在线免费观看视频| 国产白丝在线| 99精品丰满人妻无| 五月天综合| 欧美 日韩 亚洲 春色| 欧美色图 色综合图| 97神马久久| 日日躁狠狠躁天天躁精品| 中文字幕乱碼在线| 97中文超碰| 午夜高清成人在线视频| 久久成人国产| 99色热国产视频精品| 一二三四视频中文字幕在线看| 日本在线999| 熟女少妇一区二区三区| 精品二区三四区五电影 | 日本道日本道中文字幕日本道最新日本道在线观看| 精品人妻二区三区| 欧美丝袜中文字幕07在线| 天天干,夜夜爽| 激情五月丁香五月| 婷婷中文字幕| 日本精品一区二区中文字幕| 五月天婷婷综合网| 99热免费| 做爱福利视频一区二区| 二三四区精品| 91九色丰满高潮| 伊人欧美大香蕉视频| 91痴汉| 妇女一区二区三区| 男女啪啪啪18禁网站| 久久久久久久强迫| 天堂v无码免费视频| 国产日韩欧美操逼视频| 麻豆久久视频在线地址| 99久久久久久亚洲精品不卡| 91痴汉| 久啪视频| 色91综合网| 久草资源在线视频官方总站日韩丝袜美腿| 青娱乐av在线| 色踪合AV| 欧美精品一二三| 成人五级久久| 日韩99999色| 福利伊人玖玖国产| 色五月婷婷在线| 一区二区三区四区姦女| 日本九九久久99| 加勒比99999| 色综合91好| 日本性爰一道本| 强奸乱伦av电影| 欧美精品另类人妖xxxx| 在线观看午夜婷婷久久久久清性观看| 丁香婷婷九月| 色噜噜国产在线| q2午夜理论片夜色av| 国产日韩中文字幕欧美| 国产精品亚洲无码| 91粉芽高清在线一区二区| 视频在线观看一二三区| 亚洲,欧美,综合网| 无码区蜜乳| 男人的天堂不卡一区二区| 最新亚洲风情电影| 大鸡巴久久| 一区二区三区黄色片a| 久久久草成人网站久久久草成人久久久草久久久 | 日本裸体久久色噜噜| 天天综合,91入口| 深夜福利黄片| 色九月| 天天爱综合网| 极品粉嫩少妇视频| 久操精品| 久久性爱大全| 久久久久久久六六| 最新无码国产| 91在线美女| 九久久精品| 国产大陆天天艹| 资源在线观一 二| 日日日日做夜夜夜夜做无码97| 亚洲丝袜在线观看| 极品白嫩美女白浆成人福利在线看| 伊人久久大香蕉线AV五月天| 中出欧美| 1024亚洲中文字幕久在线看片你懂的 | 亚洲天堂中文字| 中文字幕视频2区| 亚洲丝袜在线观看| 99激情视频| 超碰这里有精品| 国产精品制服丝袜清纯唯美 | 国产青青综合伊人| 激情啪啪拍91| 劲爆欧美人妖三区91| 久久一二三四五六七八九区区| 一二三啪啪专区| 最新欧洲欧美日本激情网站| 日韩无码服务区| 久久久久国产一区二| 好屌色综合| 久干9操| 人妻人妻天天碰| 国产麻豆福利av在线播放| 999 久久久| 日本成人A片免费看| 日韩精品三级片长长久久| 成人自拍三级在线观看| 激情欧美日韩女同久久| 日韩欧美成人午夜福利| 久草老司机| 91黑人无码激情在线| 男人的天堂VA| 青青草视频久久久久| 麻豆国产视频精品观看| 91 国产丝袜在线播放-百度| 手机在线观看不卡无码av| 蜜桃香蕉久草精品在线| 一本道综合色图| 日本操逼视频导航| 九九久久久九九| 欧美 亚洲 在线| 嗯嗯啊中文字幕| 青青青国产手线观看视频2| 国产乱码精品一区二区三区四川| 免费综合亚洲中文| 精品丰满熟妇人妻一区| 亚洲欧美一区二区三区在钱蜜桃| 自拍偷拍 日韩欧美| 天操老女人| 久久欧美性爱视频| 韩日色费| 淫淫综合网| 中文字幕乱碼在线| 婷婷综合激情| 青娱乐福利99| 男人的天堂VA| 台湾肥佬网一区二区三区| 国产欧美亚洲精品a第2页| 大学生美女口爆| 日日日骚女人精品| 蜜臀久久99精品久久久久久久久| 午夜亚洲国产理论秋霞| 玖玖久久久| 麻豆一区在线| 动漫片子网站3黄| 日本午夜福利影院| 欧洲特黄毛片免费看欧洲毛片| 伊人久操| 免费观看一区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 天天色踪合| 嗯啊抽插大香蕉网页| 校园春色五月天| 欧美 熟女 日韩| 日韩久射综合| 色色国产| www超碰| 男人的天堂久久狠| 自拍丝袜美腿人妻| 久久草大香蕉| 熟女人妻一区二区三区| 伊人成人中文字幕久久网| 久久久三区二区一区| 精品视频一二三中文| 欧美日韩青操| 中文字幕人妻色偷偷久久皮 | 嗯嗯嗯好爽| av在线观看不卡网站| 欧美性性性| 中美日韩毛片| 97啪啪| 另类TS人妖一区二区三区| 麻豆天美在线| 亚洲黄色| 伊人网高清| 狠狠97| 久久久无码精品人妻二区| 99热免费精品| 99国产精品免费| 伊人影院在线理论播放 | AV天堂男人的天堂| 国产毛片精品一区二区色欲黄A片| 大香蕉AV丝袜| 五月天伊人| 欧美日韩国产另类综合| 久久久久9999| 一级性爱视频免费在线| 夜夜欢天天干| 久久激情婷婷| 岛国1区2区3区在线观看| 国产毛片片精品天天看视频| 午夜男女爽爽大片免费观看| 在线免费观看高清无码视频| www.色吧5.com| 国产精品ⅴ无码大片在线看.| 肏逼视频日本| 日韩欧美成人性爱在线| 天天干天天燥| 中文字幕精品资源在线| 色综合久久久久| 狠综合网| 国产精品懂色tv影视免费观看| 吉川爱美98堂在线| 亚洲91亚洲| 干B| 国产精品电影推荐| 啪啪自拍九九综合| 欧美五区| 爱丝福利| 秋霞Av理论一级在线| 夜夜骑夜夜操| 精品九九国产无码| 亚洲精品a人片在线观看视| 国产做?爰片久久毛片?片美国| 日韩欧美中文| 久热婷婷| 91中文精品日韩欧美在线| 99黄页网站| 传媒在线观看一区二区三区| 激情小说亚洲色图| 太久视频| 春色校园综合网| 男人的天堂在线| 欧美色图综合网| 天天看天天日| 777奇米影视777四色| 日本三级小说中文字幕| 婷婷15月天青娱乐| 麻豆天美传媒毛片| 国产一区在线观看无码AV| 91狠狠色丁香婷婷综合久久| 青青草色插素人| 精品少妇高潮久久| 久操网视频| 又黄又爽在线观看视频| 2003天天干夜夜操| 日本性爱欧美性爱| 丁香五月大香蕉| 日本孕妇孕交| а√天堂资源官网在线资源| 99色在线观看| 超碰偷拍| 日本人妻一区二区| 亚欧美综合网。| 欧美激情区| 免费观看有码高清视频| 久久综合99| 日本999精品| 啊啊啊草死我| 色噜噜婷婷| 操老熟女AV| 国产家庭乱伦表演| 久久久999网站| 日韩91网| 婷婷五月天丁香花| 久久久性少妇| 人妻少妇被猛烈进入中| 国产有码一区| 哈哈操电影| 五月天综合在线| 997色在线| 欧美丰满少妇xx高潮| 夜夜狠狠躁日日躁色视频| 亚州久久9| 黄色大片免费在线| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 女性喷水高潮在线观看| 日韩人体偷拍| 99国产精品自在自在| 午夜操逼不卡| 伊人精品国产| 国产成人无码啪| 青木玲在线不卡| AA特级绝黄| 久久99草| 国产剧情AV不卡在线观看| 磁力99AV| 久草视频在线视频在线视频在线观看| 学生妹天天看| 91成人久久| 国产精品69久久久久孕妇欧美| 色呦呦呦在线观看视频| 91九色丰满高潮| 色999;丁香五月| 高精欧美色| 99热综合在线| 日韩黄色av中文字幕| 射欧美综合| 日本操逼视频导航| 四虎在线免费视频| 婷婷综合五月天| 久久超碰网| 超碰97男人| 伊人影院综合是一个与深夜成人在线| 超碰97极品9| 久久久久久人妻| 乱性AV| 99精品丰满人妻| 国产精品青草综合久久| 久9无限国产| 久久久噜噜噜久久久| 精品国产人成在线| 午夜AV污污污| 午夜精品久久久久久久男人的天堂| 五月婷亚洲精品天堂| 狠肏骚人妻| 免费精品福利在线观看| 91福利网在线观看| 不卡一区视频| 日韩情色视频| 人妻色偷色噜| 五十路熟女在线不卡观看一区二区| 天天综合精品| 亚洲成人免费在线| 日韩视频中文字幕| 午夜久久久| 久久综合五月天| A 在线网址| 夜夜高潮夜夜爽夜夜爱爱一区| 综合色图区| 黄色av片三级三级三级免费看| 日韩AV噜噜噜一区二区三区四区 | 国产精品美女视频诱惑| 亚洲熟女乱色一区二区三区久久久| 激情丁香五月婷婷| 性色av蜜臀av色欲aV| 97视频免费| 91影视亚洲| 亚洲男人的天堂亚洲| 午夜福利1区2区3区| 欧美亚洲首页| 国产精品午夜福利视频| 夜夜高潮夜夜爽高清视频一| 国产精品秘 福利姬在线观看| 熟妇乱伦一区二区| 国产精品伦理| 偷拍五区| 青青草精玖玖69精品| 亚洲综合色网| 国产精品久久成人免费| 韩日性爱av| 日韩免费福利在线观看| 熟女少妇视频| 变态另类专区| 蜜桃臀一区二区三区久久| 97欧美精品综合| 亚洲无套久久嗯嗯| 五月激情综合网| 免费作爱一级视频| 欧美一区二区三区另类精品| 在线小视频| 91精品婷婷国产综合久久竹菊| 人人爽夜夜操| 久久久久久大| 日日天天久久啊啊aaa| 99热免费| 日本久久99| 国产精品一区二区黄片| 国产成人久久久精品免费AV| 午夜激情成人在线观看| 国产又黄又爽又刺激久久久久久| 国产午夜精品理论片a大结局| 欧美日韩亚洲天堂| 国产激情在线| 青青草大香蕉视频| 久久αⅴ| 97香蕉网| 国产精品精品系列在线观看| 亚洲欧美另类激情小说| 天天上日日上日韩精品| 啊啊啊啊好爽好舒服一区二区易域| 校园春色AV天堂| 91美女精品| 91亚洲黄色网| 天天综合中文字幕 91| 超碰97亚洲| 欧美色宗合| 免费家庭乱伦视频| 亚洲天堂中文字| 国产白嫩漂亮KTV在线| 欧美日韩性爱视屏免费看了| 亚洲成?V人片在线观看福利| 天天爽天天操| 97se综合网| 五月天久久婷婷亚洲| 天综合网欧美| 性91| 尤物av网站免费在线播放| 国产一级内射无挡观看| 黄色网址在线免费观看| 大香蕉免费乱伦视频| 九九亚洲| 欧美A√综合网| 激情四射婷婷六月天| www国产精品| 日韩欧美性吧婷婷乱伦大香蕉| 思思热在线视频免费| 日本Xx性爱| 亚洲色图大香| 东京成人一区| 在线中文字幕视频| 99热精品在线观看| 国产乱码久久久| 少妇综合网| 做爱A级亚欧| 亚洲官网在线| 国产高清成人传媒影视| 超碰国产在线| 亚洲精品天天影视综合网 | 亚洲性爱高潮影院| 天天爱天天操| 欧美一级A片在线看视频性色| 国产原创剧情在线丝袜| 色官网在线| 日韩传媒在线| 高清视频一区| 婷婷av在线中文字幕| 国产精品久久久久久片| 丝袜制服字幕在线| 久久久内射良家| 久久超碰国产一区二区三区| 日本网色| 97超碰色屌| 中文字幕视频二区| 亚洲αv一区二区三区| 亚洲宅男天堂| 深夜激情| 亚洲欧综合另类无码一区| 综合熟女| 天天色综合影视网| 欧美午夜视频精品久久| 美女露胸露尿口| 精品免费囯产一区二区三区| 色狠狠 - 百度| 98色网| 神马久久免费电影观看| 深夜国产一区二区三区在线看| 色播五月丁香| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 中文字幕日韩人妻视频一区二区三区| 啊啊啊啊啊啊啊国| 97亚洲自在精品在线观看| 超97在线精品视频| 二三四区精品| 在线播放成人高清免费视频 | 欧美精品日韩一区二区| 性色国产东北露脸精品视频| 亚洲色电影在线| 天天影视综合色| 日韩熟女操逼| 成人av影院在线观看| 欧美熟妇乱码在线一区| 亚洲情欲| 99久久久99久久91熟女| 欧美肥臀在线| 亚洲夜夜欢无码一区二区 | 久久岛国| 天天综合网~69| 亚洲视频精选| 97精品国产97久久久久久| 人妻精品一区二区三区| 亚洲激情在线一区二区| 亚洲另类色综合网站| 睡产熟女乱伦| 中文无线日韩一区| 国产又操| 天天欧美| 午夜精品久久久久久久男人的天堂| 九九九九精品精| 免费97视频| 欧美精品成人在线播放| 日本熟妇精品九九| 777奇米影视777四色| 国产不卡的视频| 色婷婷狠狠18禁| 91亚洲综合在线| 日日狠狠久久偷偷色综合免费| 啊啊啊久久| 亚洲国产剧情少妇激情| 亚洲色图综合| 欧美无圣光在线| 国产精品久久久久久久AV大片| 91精品国久久久久久无码| 男女性感激情网站| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 怡红院亚洲怡春院av| 色yeye成人免费视频| 亚洲97资源| 精品无码一区二区| 1000部熟女视频在线观看| 精品美女少妇一区二区三区| 天天日B夜夜干B时时操B| 熟女熟妇一区二区三区视频| 清柠毛片| 亚洲无码免费看| 亚洲欧美啪啪| 神马久久久久眼| 欧美亚洲尤物久久| 欧美九九九| 伊人久久国产免费观看视频| 日韩一性一交一A片俄罗斯 | 超碰在线观看av不卡| 久久激情四射婷婷丁香五月天| 久久久久久久 九九九九九九九| 热思思免费视频| chaopen97久久| 国产夜夜操| 欧日韩一二三f区| 啊嗯好大视频在线观看| 极品极品色影院| 翔田千里爆乳巨臀无码| 精品人妻一区二区三区不卡断| 国产精品成人AV片免费看网站| 亚洲男人天堂2016| 先锋精品av色鲁| 国产亚洲女v在线观看| 夜夜操夜夜爽夜夜高潮| 婷婷中文网| 天天草夜夜草高潮片| 水野优香在线观看| 香蕉视频欧美一卡二卡| 久久久av爱| 91人人臊| 无码精品人妻一区二区三区妖精| 97色碰| 综合色久欲| 亚洲第一二区另类图| 大香蕉色十月| 狠狠色狠狠色狠狠五月| 久久伊人最新网址视频| 国产精品久久久久9999小说| 91熟女少妇| 天天弄欧美| 亚洲色鬼| 久热婷婷| 国产精品激情久久久久久久| 五十路六十路七十路熟婆| 夜色综合| 婷婷另类小说| 这里是精品| 中文字幕日韩国产传媒欧美精品| 99操视频| 97摸视频| 国产真实野战在线视频| 在线A日本| 中文字幕久久婷婷丁香五月天| 欧美色图亚洲色| 少妇的嫩逼图片| 青青草在线视频播放器| 日韩中文字幕宗合在线| 精品999日本| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 人妻精品4K4K4K4K4| 天天操av懂色| 91精品人妻电影| 成人麻豆av电影网站| 一本大道不卡一二三区| 中国一级特黄大片护士| AV麻豆免费一区| 91一区二区三区蜜桃| 亚洲性爱乱操x| 成人AV在线网站| 97国产|免费| 超碰人妻久久| 在线视频97| 国产激情视频一区区三区| 超碰色综合| 妇女性内射冈站HDWWWCOM| 亚洲一区日韩精品| 女欧美一区二三区| 天天射天天操天天干天天吃2018| 久久久久久久久久久久97| 天天影视综合色| 人妻无码后入| 操操操操网黑人| 欧美青青草视频| 亚洲无码一区成人免费午夜| 亚欧洲日韩国产精品| 韩国一级做a久久久久| 欧美高清无码免费视频高清版| 国产三级在线现体验区| 日本狂喷奶水在线播放212| 蜜乳性色无码专日粉嫩骚逼AV| 国产成人精品日本亚洲语言| 国产Aα| 久久女婷| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 国产一区二区三区视频在线看| 极品尤物自安慰| 黄色一级视| 国产伦精品一区二区三区视频女| 成人熟女视频一区二区三区| 亚洲大色堂| 91精品婷婷国产综合久久| 欧美 亚洲| 成人无遮挡毛片免费看| 93人人操人人| 少妇二级| 男人的天堂在线| 极品色综合| 无码久久亚洲高清,| 偷窥自拍A片| 蜜桃精品一区二区三区ww| 一区二区三区 丝袜 高跟 美腿| 啊啊啊要高潮了| 亚洲欧美在线丝袜| 密乳AV免费观看| 日本中文字幕在线电影| 蜜臀久久99精品久久久久久酒店| 肏逼视频日本| 精品国产肉丝袜在线拍国语| 五月丁香综合网| 欧美精品久久| 天天操夜夜操| 五月丁香社区婷婷日韩欧美精品影院| 免费看毛片操穴| 91美女視頻| 性色AV蜜色av色欲av| 内射小黄片| 亚州国产精品乱| 久久久国产精品亚洲精品| 久久久新亚洲AV| 中文字幕123| 欧美爆操91| 91老司机视频| 99久久久无码国产精品性男| 夜夜夜久久| 欧美九九九九九| 亚洲一本大道中文字幕无码在线| 国产60区。| 欧美丝袜91| 欧美日本一区二区a人| 人妻精品一区二区全免费| 久操免费观看| 日欧亚洲二三区大片不卡| 国产精品国产自产拍高清AV| 天天日天天看| 午夜男女爽爽爽在线视频| 色诱中文字幕| 91亚州| 97碰在线视频| 少妇熟女视频一二三区| 日本成人A片网站| av大香蕉网站| 麻豆天美传媒毛片| 五月丁香综合激情| 人人操人人射人人干| 91深夜夜| 久操在97| 国产欧美精选激情视频| 91色黑人少妇| 曰韩人妻中文字幕在线| 亚洲五月丁香花狠狠干一区二区三区 | 久久99精品九九久久久婷婷| 99精品九九九九九九| 天天天天天天天天天天干美女 | 国产精品久久久久久久黄无码| 东京热亚洲一区二区| 欧美成97爱| 欧美色五月| 香蕉99秘 一区精品蜜桃臀| 中文字幕一区二区三区高清| 欧美色日本| 26uuu性物| 蜜桃视频啊啊啊啊| 久久草草亚洲蜜桃臀| 91天天综合网,天天综合网| 爱妃国产亚洲视频中文字幕| 色爱欲亚洲| 麻豆成人AV| 久久久一级| 草草电影院| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 一本一道人妻久久一区二区三区 | 婷婷伊人| 精品91日日夜夜超清资源| 97超碰国产精品| 91bbb| 久久久婷婷| 黄色区免费观看中文字幕| 精品丰满熟妇人妻一区| 久久精品国产亚洲AV成人直播| 欧美日韩妖精91com| 五月天激情国产综合婷婷婷| 91欧美亚洲| 极品五月天噜噜| 国产真乱mangent| 人妻人妻天天碰| a啊啊啊啊啊啊啊啊一区二区| 国产自制av蜜乳| 日本一二区免费| 国产一进一出视频网站| 中文字幕av片| 超91综合网| 美女裸体无遮挡永久免费观看网站| 天美一二三在线观看Av| 日韩性爱再线视频| 91成人无码| 亚洲欧洲无码97久久精品| 亚洲国产精品无码AV在线| 91色欧美| 十八禁黄色成人网站观看| 狠狠激情综合狠狠操中文字幕| 精品十八在线观看| 日少妇亚洲版| 中文久久爆乳| 蜜乳AV免费观看| 91欧美综合在线| 天天操天天舔| 亚洲成人贴图| 国产精品第二页| 婷婷精品| h4610国产人妻| 亚洲色图A| 91操操| 欧美亚洲一级在线观看| 中文三一区| 国产精品一区二区后入| 蜜桃久久综合视频| 亚洲密乳AV| 国产精品国产精品国产| 加勒比色综合| 宗合情欲网| 成人性爱视频在线看| 午夜操一操| 97中文综合| 动漫av中文| 国产性感骚丝袜在线| 可以免费观看的日韩av毛片| 免费操逼91| 97在线视频免费看| 99热8| 国产做?爰片久久毛片?片美国| 综合久久久久久久久91| 国产视频第二页| 成人情色综合网| 超碰97久久国| 97在线国产精品| 黄色网址久久精品欧美喷水| 偷窥自拍亚洲天堂网爆| 性爱免费视频成人| 丰满人妻被猛烈进入中| 97久久久网站| 碰人碰碰人人开房人肉| 九九九九九用不成了| 色诱avtt| 九九亚洲| 亚洲夜夜欢无码一区二区 | 欧美性爱一区二区三区四区 | 婷婷人妻激情| 日本免费一区二区不卡| 超碰天天久久79| 久久久久国产亚洲一区欧美色图日韩| 久青草影院| 亚洲色婷婷| 99这里都是精品| 制服乱伦| www.99在线| 国产67194| 日本不卡三级网在线播放| 东北黄色电影| 欧美精品99久久久| 婷婷五月在线视频| 色综合久| 性爱动态120秒| 综合影院亚洲| 色五月婷婷五月天| 五月丁香久久| 丰满人妻一区二区三区四| 日韩偷拍色图| 97se综合网| 五月天色图| 99re95| 九9热伊人| 久久国产精品视频| 天天综合欧美黑人| 久久熟女嫩草成人片免费| 欧美日综合| 超碰导航97| 蜜桃视频一区二区三区在线观看| 最新国产精品久久精品|