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

當你在終端上按下一個鍵時會發生什么?

系統 Linux
在上個星期,我使用 xterm.js 在瀏覽器中顯示了一個交互式終端,我終于想到要問一個相當基本的問題:當你在終端中按下鍵盤上的一個鍵(比如 Delete,或 Escape,或 a),發送了哪些字節?

我對終端Terminal是怎么回事困惑了很久。

但在上個星期,我使用 ??xterm.js??? 在瀏覽器中顯示了一個交互式終端,我終于想到要問一個相當基本的問題:當你在終端中按下鍵盤上的一個鍵(比如 ??Delete???,或 ??Escape???,或 ??a??),發送了哪些字節?

像往常一樣,我們將通過做一些實驗來回答這個問題,看看會發生什么 : )

遠程終端是非常古老的技術

首先,我想說的是,用 ??xterm.js?? 在瀏覽器中顯示一個終端可能看起來像一個新事物,但它真的不是。在 70 年代,計算機很昂貴。因此,一個機構的許多員工會共用一臺電腦,每個人都可以有自己的 “終端” 來連接該電腦。

例如,這里有一張 70 年代或 80 年代的 VT100 終端的照片。這看起來像是一臺計算機(它有點大!),但它不是 —— 它只是顯示實際計算機發送的任何信息。

DEC VT100終端

DEC VT100終端

當然,在 70 年代,他們并沒有使用 Websocket 來做這個,但來回發送的信息的方式和當時差不多。

(照片中的終端是來自西雅圖的 ??活電腦博物館???Living Computer Museum,我曾經去過那里,并在一個非常老的 Unix 系統上用 ??ed?? 編寫了 FizzBuzz,所以我有可能真的用過那臺機器或它的一個兄弟姐妹!我真的希望活電腦博物館能再次開放,能玩到老式電腦是非常酷的。)

發送了什么信息?

很明顯,如果你想連接到一個遠程計算機(用 ??ssh??? 或使用 ??xterm.js?? 和 Websocket,或其他任何方式),那么需要在客戶端和服務器之間發送一些信息。

具體來說:

客戶端 需要發送用戶輸入的鍵盤信息(如 ??ls -l??)。 服務器 需要告訴客戶端在屏幕上顯示什么。

讓我們看看一個真正的程序,它在瀏覽器中運行一個遠程終端,看看有哪些信息會被來回發送!

我們將使用 goterm 來進行實驗

我在 GitHub 上發現了這個叫做 ??goterm??? 的小程序,它運行一個 Go 服務器,可以讓你在瀏覽器中使用 ??xterm.js?? 與終端進行交互。這個程序非常不安全,但它很簡單,很適合學習。

我 ??復刻了它???,使它能與最新的 ??xterm.js?? 一起工作,因為它最后一次更新是在 6 年前。然后,我添加了一些日志語句,以打印出每次通過 WebSocket 發送/接收的字節數。

讓我們來看看在幾個不同的終端交互過程中的發送和接收情況吧!

示例:ls

首先,讓我們運行 ??ls???。下面是我在 ??xterm.js?? 終端上看到的情況:

    ~:/play$ ls
file
~:/play$

以下是發送和接收的內容:(在我的代碼中,我記錄了每次客戶端發送的字節:??sent: [bytes]???,每次它從服務器接收的字節:??recv: [bytes]??)

    sent: "l"
recv: "l"
sent: "s"
recv: "s"
sent: "\r"
recv: "\r\n\x1b[?2004l\r"
recv: "file\r\n"
recv: "\x1b[~:/play$ "

我在這個輸出中注意到 3 件事:

  1. 回顯:客戶端發送??l???,然后立即收到一個??l??? 發送回來。我想這里的意思是,客戶端真的很笨 —— 它不知道當我輸入??l??? 時,我想讓??l?? 被回顯到屏幕上。它必須由服務器進程明確地告訴它來顯示它。
  2. 換行:當我按下回車鍵時,它發送了一個??\r'(回車)符號,而不是??\n'(換行)。
  3. 轉義序列:??\x1b??? 是 ASCII 轉義字符,所以??\x1b[?2004h?? 是告訴終端顯示什么或其他東西。我想這是一個顏色序列,但我不確定。我們稍后會詳細討論轉義序列。

好了,現在我們來做一些稍微復雜的事情。

示例:Ctrl+C

接下來,讓我們看看當我們用 ??Ctrl+C?? 中斷一個進程時會發生什么。下面是我在終端中看到的情況:

    ~:/play$ cat
^C
~:/play$

而這里是客戶端發送和接收的內容。

    sent: "c"
recv: "c"
sent: "a"
recv: "a"
sent: "t"
recv: "t"
sent: "\r"
recv: "\r\n\x1b[?2004l\r"
sent: "\x03"
recv: "^C"
recv: "\r\n"
recv: "\x1b[?2004h"
recv: "~:/play$ "

當我按下 ??Ctrl+C??? 時,客戶端發送了 ??\x03???。如果我查 ASCII 表,??\x03??? 是 “文本結束”,這似乎很合理。我認為這真的很酷,因為我一直對 ??Ctrl+C??? 的工作原理有點困惑 —— 很高興知道它只是在發送一個 ??\x03?? 字符。

我相信當我們按 ??Ctrl+C??? 時,??cat??? 被中斷的原因是服務器端的 Linux 內核收到這個 ??\x03??? 字符,識別出它意味著 “中斷”,然后發送一個 ??SIGINT?? 到擁有偽終端的進程組。所以它是在內核而不是在用戶空間處理的。

示例:Ctrl+D

讓我們試試完全相同的事情,只是用 ??Ctrl+D??。下面是我在終端看到的情況:

    ~:/play$ cat
~:/play$

而這里是發送和接收的內容:

    sent: "c"
recv: "c"
sent: "a"
recv: "a"
sent: "t"
recv: "t"
sent: "\r"
recv: "\r\n\x1b[?2004l\r"
sent: "\x04"
recv: "\x1b[?2004h"
recv: "~:/play$ "

它與 ??Ctrl+C??? 非常相似,只是發送 ??\x04??? 而不是 ??\x03???。很好!??\x04?? 對應于 ASCII “傳輸結束”。

Ctrl + 其它字母呢?

接下來我開始好奇 —— 如果我發送 ??Ctrl+e??,會發送什么字節?

事實證明,這只是該字母在字母表中的編號,像這樣。

  • ??Ctrl+a?? => 1
  • ??Ctrl+b?? => 2
  • ??Ctrl+c?? => 3
  • ??Ctrl+d?? => 4
  • ...
  • ??Ctrl+z?? => 26

另外,??Ctrl+Shift+b??? 的作用與 ??Ctrl+b??? 完全相同(它寫的是??0x2??)。

鍵盤上的其他鍵呢?下面是它們的映射情況:

  • ??Tab??? -> 0x9(與??Ctrl+I?? 相同,因為 I 是第 9 個字母)
  • ??Escape??? ->??\x1b??
  • ??Backspace??? ->??\x7f??
  • ??Home??? ->??\x1b[H??
  • ??End??? ->??\x1b[F??
  • ??Print Screen??? ->??\x1b\x5b\x31\x3b\x35\x41??
  • ??Insert??? ->??\x1b\x5b\x32\x7e??
  • ??Delete??? ->??\x1b\x5b\x33\x7e??
  • 我的??Meta?? 鍵完全沒有作用

那 ??Alt??? 呢?根據我的實驗(和一些搜索),似乎 ??Alt??? 和 ??Escape??? 在字面上是一樣的,只是按 ??Alt??? 本身不會向終端發送任何字符,而按 ??Escape?? 本身會。所以:

  • ??alt + d??? =>??\x1bd??(其他每個字母都一樣)
  • ??alt + shift + d??? =>??\x1bD??(其他每個字母都一樣)
  • 諸如此類

讓我們再看一個例子!

示例:nano

下面是我運行文本編輯器 ??nano?? 時發送和接收的內容:

    recv: "\r\x1b[~:/play$ "
sent: "n" [[]byte{0x6e}]
recv: "n"
sent: "a" [[]byte{0x61}]
recv: "a"
sent: "n" [[]byte{0x6e}]
recv: "n"
sent: "o" [[]byte{0x6f}]
recv: "o"
sent: "\r" [[]byte{0xd}]
recv: "\r\n\x1b[?2004l\r"
recv: "\x1b[?2004h"
recv: "\x1b[?1049h\x1b[22;0;0t\x1b[1;16r\x1b(B\x1b[m\x1b[4l\x1b[?7h\x1b[39;49m\x1b[?1h\x1b=\x1b[?1h\x1b=\x1b[?25l"
recv: "\x1b[39;49m\x1b(B\x1b[m\x1b[H\x1b[2J"
recv: "\x1b(B\x1b[0;7m GNU nano 6.2 \x1b[44bNew Buffer \x1b[53b \x1b[1;123H\x1b(B\x1b[m\x1b[14;38H\x1b(B\x1b[0;7m[ Welcome to nano. For basic help, type Ctrl+G. ]\x1b(B\x1b[m\r\x1b[15d\x1b(B\x1b[0;7m^G\x1b(B\x1b[m Help\x1b[15;16H\x1b(B\x1b[0;7m^O\x1b(B\x1b[m Write Out \x1b(B\x1b[0;7m^W\x1b(B\x1b[m Where Is \x1b(B\x1b[0;7m^K\x1b(B\x1b[m Cut\x1b[15;61H"

你可以看到一些來自用戶界面的文字,如 “GNU nano 6.2”,而這些 ??\x1b[27m?? 的東西是轉義序列。讓我們來談談轉義序列吧!

ANSI 轉義序列

上面這些 ??nano??? 發給客戶端的 ??\x1b[??? 東西被稱為“轉義序列”或 “轉義代碼”。這是因為它們都是以 “轉義”字符 ??\x1b??? 開頭。它們可以改變光標的位置,使文本變成粗體或下劃線,改變顏色,等等。??維基百科介紹了一些歷史??,如果你有興趣的話可以去看看。

舉個簡單的例子:如果你在終端運行

    echo -e '\e[0;31mhi\e[0m there'

它將打印出 “hi there”,其中 “hi” 是紅色的,“there” 是黑色的。??本頁?? 有一些關于顏色和格式化的轉義代碼的例子。

我認為有幾個不同的轉義代碼標準,但我的理解是,人們在 Unix 上使用的最常見的轉義代碼集來自 VT100(博客文章頂部圖片中的那個老終端),在過去的 40 年里沒有真正改變。

轉義代碼是為什么你的終端會被搞亂的原因,如果你 ??cat??? 一些二進制數據到你的屏幕上 —— 通常你會不小心打印出一堆隨機的轉義代碼,這將搞亂你的終端 —— 如果你 ??cat??? 足夠多的二進制數據到你的終端,那里一定會有一個 ??0x1b?? 的字節。

可以手動輸入轉義序列嗎?

在前面幾節中,我們談到了 ??Home??? 鍵是如何映射到 ??\x1b[H??? 的。這 3 個字節是 ??Escape + [ + H???(因為 ??Escape??? 是??\x1b??)。

如果我在 ??xterm.js??? 終端手動鍵入 ??Escape??? ,然后是 ??[???,然后是 ??H???,我就會出現在行的開頭,與我按下 ??Home?? 完全一樣。

我注意到這在我的電腦上的 Fish shell 中不起作用 —— 如果我鍵入 ??Escape???,然后輸入 ??[???,它只是打印出 ??[???,而不是讓我繼續轉義序列。我問了我的朋友 Jesse,他寫過 ??一堆 Rust 終端代碼??,Jesse 告訴我,很多程序為轉義代碼實現了一個 超時 —— 如果你在某個最小的時間內沒有按下另一個鍵,它就會決定它實際上不再是一個轉義代碼了。

顯然,這在 Fish shell 中可以用 ??fish_escape_delay_ms??? 來配置,所以我運行了 ??set fish_escape_delay_ms 1000??,然后我就能用手輸入轉義代碼了。工作的很好!

終端編碼有點奇怪

我想在這里暫停一下,我覺得你按下的鍵被映射到字節的方式是非常奇怪的。比如,如果我們今天從頭開始設計按鍵的編碼方式,我們可能不會把它設置成這樣:

  • ??Ctrl + a??? 和??Ctrl + Shift + a?? 做的事情完全一樣。
  • ??Alt??? 與??Escape?? 是一樣的
  • 控制序列(如顏色/移動光標)使用與??Escape??? 鍵相同的字節,因此你需要依靠時間來確定它是一個控制序列還是用戶只是想按??Escape??。

但所有這些都是在 70 年代或 80 年代或什么時候設計的,然后需要永遠保持不變,以便向后兼容,所以這就是我們得到的東西 :smiley:

改變窗口大小

在終端中,并不是所有你能做的事情都是通過來回發送字節發生的。例如,當終端被調整大小時,我們必須以不同的方式告訴 Linux 窗口大小已經改變。

下面是 ??goterm?? 中用來做這件事的 Go 代碼的樣子:

    syscall.Syscall(
syscall.SYS_IOCTL,
tty.Fd(),
syscall.TIOCSWINSZ,
uintptr(unsafe.Pointer(&resizeMessage)),
)

這是在使用 ??ioctl??? 系統調用。我對 ??ioctl?? 的理解是,它是一個系統調用,用于處理其他系統調用沒有涉及到的一些隨機的東西,通常與 IO 有關,我猜。

??syscall.TIOCSWINSZ??? 是一個整數常數,它告訴 ??ioctl?? 我們希望它在本例中做哪件事(改變終端的窗口大小)。

這也是 xterm 的工作方式。

在這篇文章中,我們一直在討論遠程終端,即客戶端和服務器在不同的計算機上。但實際上,如果你使用像 xterm 這樣的終端模擬器,所有這些工作方式都是完全一樣的,只是很難注意到,因為這些字節并不是通過網絡連接發送的。

文章到此結束啦

關于終端,肯定還有很多東西要了解(我們可以討論更多關于顏色,或者原始與熟化模式,或者 Unicode 支持,或者 Linux 偽終端界面),但我將在這里停止,因為現在是晚上 10 點,這篇文章有點長,而且我認為我的大腦今天無法處理更多關于終端的新信息。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2018-01-19 12:56:19

Linux進程

2023-12-13 17:04:51

終端命令shell

2015-09-25 10:41:48

r語言

2019-09-03 14:15:05

2025-11-18 07:00:00

AI戰略自動化自主式AI

2019-02-27 10:18:26

重置Windows 10Windows

2015-10-29 09:35:12

BAT趨勢數據

2024-01-17 11:07:09

單模光纖OS2 光纖數據中心

2024-04-02 11:31:33

USBAndroid

2014-06-17 10:57:09

2019-03-19 19:19:19

Facebook微信轉型

2016-04-08 15:13:29

人工智能阿里小Ai

2013-03-15 09:57:00

虛擬化 數據中心

2015-07-28 11:22:30

大數據浪潮

2015-08-03 14:06:44

2009-03-28 09:22:12

MID移動OS

2022-02-13 15:49:15

WebAssemblKubernetes容器

2011-03-17 15:01:11

Oracle

2013-01-17 10:09:50

JavaSpring

2021-08-11 18:23:08

數據平臺IT
點贊
收藏

51CTO技術棧公眾號

不卡av免费观看| 波多野结衣高清在线| 日韩免费成人| 午夜精品福利久久久| 久久资源av| 国产精品久久婷婷| 亚洲精品美女91| 日韩在线视频观看| 国产在线观看免费播放| 天天综合网站| 一区二区三区.www| 欧洲精品码一区二区三区免费看| 国产特级aaaaaa大片| 男女精品网站| 久久97精品久久久久久久不卡| 亚洲黄色小说视频| 9l视频自拍蝌蚪9l视频成人 | 久久亚洲一区二区| 国产精品久久久久久免费| 99精品国产在热久久婷婷| 色噜噜国产精品视频一区二区 | 26uuu亚洲综合色欧美 | 日韩精品 欧美| 一级毛片视频在线| 久久久久久一级片| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧洲一区二区日韩在线视频观看免费 | 欧美三级不卡| 色婷婷av一区二区三区久久| av网站有哪些| 中文无码日韩欧| 777午夜精品视频在线播放| 丁香婷婷激情网| 在线天堂新版最新版在线8| 一区二区三区久久久| 亚洲在线色站| www.亚洲资源| 国产日韩精品久久久| 久久伊人一区二区| 特级丰满少妇一级aaaa爱毛片| 国产一区在线观看麻豆| 国产女人精品视频| 波多野结衣在线观看一区| 国产精品婷婷| 97婷婷涩涩精品一区| 久久网一区二区| 欧美freesex交免费视频| 色999日韩欧美国产| 国产亚洲精品熟女国产成人| 性欧美lx╳lx╳| 日韩精品欧美激情| 亚洲国产精品成人综合久久久| swag国产精品一区二区| 欧美成人官网二区| 绯色av蜜臀vs少妇| av综合网站| 亚洲缚视频在线观看| 精品视频站长推荐| 青青视频一区二区| 亚洲欧美国产另类| 99久久精品免费视频| 久草成人在线| 中文字幕亚洲综合久久筱田步美| 人妻视频一区二区| 久久人体视频| 久久国产精品首页| 久久在线视频精品| 日韩一级精品| 日韩免费视频在线观看| 成人毛片一区二区三区| 看国产成人h片视频| 91精品视频一区| 亚洲精品无码久久久| 99久久99久久精品免费观看| 欧美人xxxxx| 91.xxx.高清在线| 一区二区在线看| www插插插无码视频网站| 碰碰在线视频| 欧美视频一区在线| 最好看的中文字幕| 国产精品丝袜在线播放| 亚洲毛茸茸少妇高潮呻吟| 少妇视频在线播放| 午夜精品视频| 欧美一区二区三区艳史| 在线观看色网站| 国产精品一区久久久久| 精品国产_亚洲人成在线| 美女欧美视频在线观看免费| 国产精品白丝在线| 国产精品久久中文字幕| 色综合天天色| 精品少妇一区二区三区在线播放| 亚洲av无码一区二区二三区| 久久福利影院| 97精品久久久| 国产影视一区二区| av影院午夜一区| 亚洲图片欧洲图片日韩av| 激情av在线播放| 在线观看视频欧美| 日本一区二区在线观看视频| 成人黄色小视频| 欧美黄色免费网站| 中日精品一色哟哟| 成人爱爱电影网址| 亚洲成年人专区| 天堂中文av在线资源库| 91精品国产一区二区| 中文字幕一区二区三区人妻不卡| 亚洲精品成人| 国产精品福利在线| 内射后入在线观看一区| 中文字幕一区二区三| www一区二区www免费| 欧美久久亚洲| 日韩视频在线一区| 手机看片久久久| 丁香啪啪综合成人亚洲小说 | 亚洲一区和二区| 久久性感美女视频| 日韩av电影免费观看高清| 动漫av一区二区三区| 最新日韩av在线| 亚洲最大综合网| 亚欧洲精品视频在线观看| 欧美黄色片免费观看| 国产麻豆免费视频| 国产精品区一区二区三| 欧美少妇性生活视频| 欧美日韩破处| 久久久久久com| 国产成人精品av在线观| 一色屋精品亚洲香蕉网站| 老头吃奶性行交视频| 图片婷婷一区| 91精品国产网站| 三级在线观看网站| 亚洲国产视频直播| 精品无码av一区二区三区| 欧美伊人影院| 亚洲jizzjizz日本少妇| 性开放的欧美大片| 欧美亚洲国产一区在线观看网站| 久久丫精品国产亚洲av不卡| 国产日韩欧美| 久久久7777| 亚洲黄色免费看| 亚洲乱码国产乱码精品精天堂| 日本一区二区网站| av电影一区二区| 丁香婷婷综合激情| 亚洲三区欧美一区国产二区| 欧美国产日韩精品| www.xxx国产| 亚洲成人av一区二区三区| 日本不卡视频一区| 国产一区二区你懂的| 欧美黄色直播| 亚洲第一会所| 久久精品99无色码中文字幕| 国产精品高潮呻吟久久久| 亚洲欧洲日产国码二区| 日本黄色的视频| 影音先锋日韩精品| 国产精品一码二码三码在线| 国产在线观看www| 亚洲精品日韩久久久| 一级黄色av片| 亚洲欧洲国产日本综合| 潘金莲一级淫片aaaaaaa| 亚洲日本久久| 日本在线一区| 日韩护士脚交太爽了| 久久五月天综合| 黄黄视频在线观看| 国产黄色小视频在线观看| 亚洲一区二区中文在线| av网站有哪些| 免费成人av在线播放| 久久久久福利视频| 精品国产午夜肉伦伦影院| 国产999视频| 久操视频在线播放| 欧美mv和日韩mv的网站| 久久黄色精品视频| 成人免费一区二区三区视频| 亚洲婷婷在线观看| 亚洲欧美日韩专区| 特级毛片在线免费观看| 欧美黄色网视频| 国产精品美女999| 日本不卡影院| 国产亚洲视频在线观看| 国产99久久九九精品无码免费| 精品福利在线看| 五月综合色婷婷| 99久久精品免费看| 欧美一级小视频| 国产精品亚洲产品| 午夜啪啪福利视频| 婷婷五月色综合香五月| 91在线观看欧美日韩| 亚洲色图官网| 美女福利视频一区| 国产主播福利在线| 欧美大片顶级少妇| 一卡二卡三卡在线| 精品久久久久国产| 在线免费日韩av| 欧美激情一区二区三区蜜桃视频| 中国特级黄色片| 久久99最新地址| 男人天堂网视频| 亚洲小说区图片区| 亚洲一区不卡在线| 美女精品一区最新中文字幕一区二区三区| 95av在线视频| a屁视频一区二区三区四区| 3344国产精品免费看| 在线视频国产区| 最近2019中文字幕mv免费看| 深夜福利视频在线观看| 精品国产免费久久| 国产乱码久久久久| 欧美亚洲尤物久久| 超碰在线观看91| 欧美日韩加勒比精品一区| 久久无码精品丰满人妻| 樱桃国产成人精品视频| av黄色免费在线观看| 欧美高清一级片在线观看| 37p粉嫩大胆色噜噜噜| 99久久精品国产网站| 国产一卡二卡三卡四卡| 成人激情动漫在线观看| 免费看的av网站| 国内精品自线一区二区三区视频| 色戒在线免费观看| 蜜臀va亚洲va欧美va天堂| 免费大片在线观看| 欧美一级二区| 成年人小视频网站| 久久一区国产| 免费日韩视频在线观看| 久久精品人人| 99久久激情视频| 水野朝阳av一区二区三区| 国产成人无码av在线播放dvd| 久久一区中文字幕| 久久久久久久久久福利| 日韩黄色一级片| 欧美日韩在线一| 免费一级欧美片在线播放| 日本在线视频www| 日韩av中文字幕一区二区三区 | 九九热免费在线| 国产精品美女久久久久aⅴ国产馆| 美国美女黄色片| 成人欧美一区二区三区| 国产大片免费看| 亚洲激情中文1区| 国产一级理论片| 精品福利樱桃av导航| 欧美一区二区三区网站| 欧美私人免费视频| 国产在成人精品线拍偷自揄拍| 欧美精品亚洲二区| 亚洲第一页视频| 亚洲国产成人av在线| 激情小视频在线| 伊人伊成久久人综合网小说| 日本不卡不卡| 国内精品久久久久久| 深夜成人在线| 国产日产久久高清欧美一区| 日本精品国产| 久久国产精品亚洲va麻豆| 国产精品一线天粉嫩av| 国产日韩第一页| 黄色日韩在线| 中文字幕乱码人妻综合二区三区| 免费一级片91| 成人做爰69片免费| 国产亚洲欧美激情| 九九热国产在线| 色久综合一二码| 国产福利免费视频| 亚洲免费视频观看| 黄色免费在线网站| 日本不卡视频在线播放| 亚洲精品大全| 国产伦精品一区二区三区四区视频| 九色成人国产蝌蚪91| www国产免费| 日本欧美韩国一区三区| 中国特级黄色片| 中文av一区二区| 国产在线综合网| 欧美男人的天堂一二区| 天天操天天干天天| www.久久色.com| 亚洲免费福利| 98国产高清一区| 青青草97国产精品麻豆| 久久久久久久中文| 国产一区二区三区在线观看免费 | 欧美日韩一区二区三区在线电影 | 色综合激情五月| www.日本在线观看| 中文字幕视频在线免费欧美日韩综合在线看 | 青青青国产在线 | 天天干视频在线观看| 日韩视频一区在线| 欧美黑人粗大| 精品视频在线观看| 欧美日韩国产精品一区二区亚洲| 久久久久久三级| 久久久久久久久久美女| 久久精品国产亚洲av高清色欲| 欧美精品日韩一本| 成年人视频在线观看免费| 欧洲中文字幕国产精品| 久久影视三级福利片| 日本精品福利视频| 久草精品在线观看| 免费一级特黄3大片视频| 欧美日韩精品二区| 亚洲AV成人无码一二三区在线| 色在人av网站天堂精品| 精品视频一区二区三区在线观看| 西游记1978| 日本色综合中文字幕| 在线国产视频一区| 日本精品免费观看高清观看| 天堂a√中文在线| 国内精品400部情侣激情| 国产精品17p| 国精产品一区一区三区视频| 成人免费视频播放| 日韩精品视频免费看| 亚洲第一色在线| 国产精品一区二区日韩| 国产区日韩欧美| 国产精品毛片在线看| 97香蕉碰碰人妻国产欧美| 精品成人乱色一区二区| 无码精品人妻一区二区三区影院| 91精品国产91久久久| 天天躁日日躁狠狠躁欧美巨大小说 | 成人一区二区电影| 亚洲精品tv久久久久久久久久| 在线视频一二区| 亚洲精品美国一| 精品国产999久久久免费| 久久99久久99精品免观看粉嫩| 欧美成年网站| 国产高清av在线播放| av一二三不卡影片| 一级片在线观看免费| 在线观看欧美视频| 国产精品成人3p一区二区三区 | 最新日韩欧美| 欧美精品黑人猛交高潮| 91国产精品成人| 日本高清中文字幕在线| 999在线观看免费大全电视剧| 亚洲高清不卡| 国产又粗又猛又爽又黄av| 欧美男人的天堂一二区| 人人超在线公开视频| 噜噜噜噜噜久久久久久91| 青青草国产精品亚洲专区无| 污软件在线观看| 日韩av网址在线| 欧美××××黑人××性爽 | 日韩亚洲国产欧美| 一区二区三区久久久久| 91精选在线观看| av毛片午夜不卡高**水| 欧美亚洲另类在线一区二区三区 | 国产日韩欧美日韩大片| 欧美女激情福利| 亚欧洲乱码视频| 91精品欧美综合在线观看最新| 麻豆mv在线看| 制服国产精品| 96av麻豆蜜桃一区二区| 一级黄色免费片| 97在线视频免费播放| 日韩视频在线观看| youjizz.com日本| 欧美在线看片a免费观看| 污视频网站在线免费| 婷婷亚洲婷婷综合色香五月| 国产精品2024| 中文字幕第2页| 国内外成人免费激情在线视频网站 | 九色porny视频在线观看|