3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Expect 教程中文版

發布時間:2023/11/27 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Expect 教程中文版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接

本教程由*葫蘆娃*翻譯,并做了適當的修改,可以自由的用于非商業目的。?

[BUG]?

  有不少部分,翻譯的時候不能作到“信,達”。當然了,任何時候都沒有做到“雅”,希望各位諒解。?

[原著]?
 ?
  Don Libes: National Institute of Standards and Technology?
    libes@cme.nist.gov?

[目錄]?
  ?
  1.摘要?
  2.關鍵字?
  3.簡介?
  4.Expect綜述?
  5.callback?
  6.passwd 和一致性檢查?
  7.rogue 和偽終端?
  8.ftp?
  9.fsck?
  10.多進程控制:作業控制?
  11.交互式使用Expect?
  12.交互式Expect編程?
  13.非交互式程序的控制?
  14.Expect的速度?
  15.安全方面的考慮?
  16.Expect資源?
  17.參考書籍?

1.[摘要]?

  現代的Shell對程序提供了最小限度的控制(開始,停止,等等),而把交互的特性留給了用戶。 這意味著有些程序,你不能非交互的運行,比如說passwd。 有一些程序可以非交互的運行,但在很大程度上喪失了靈活性,比如說fsck。這表明Unix的工具構造邏輯開始出現問題。Expect恰恰填補了其中的一 些裂痕,解決了在Unix環境中長期存在著的一些問題。?

  Expect使用Tcl作為語言核心。不僅如此,不管程序是交互和還是非交互的,Expect都能運用。這是一個小語言和Unix的其他工具配合起來產生強大功能的經典例子。?
 ?
  本部分教程并不是有關Expect的實現,而是關于Expect語言本身的使用,這主要也是通過不同的腳本描述例子來體現。其中的幾個例子還例證了Expect的幾個新特征。?
 ?
2.[關鍵字]?
  ?
  Expect,交互,POSIX,程序化的對話,Shell,Tcl,Unix;?

3.[簡介]?
 ?
  一個叫做fsck的Unix文件系統檢查程序,可以從Shell里面用-y或者-n選項來執行。 在手冊[1]里面,-y選項的定義是象這樣的。?

  “對于fsck的所有問題都假定一個“yes”響應;在這樣使用的時候,必須特別的小心,因為它實際上允許程序無條件的繼續運行,即使是遇到了一些非常嚴重的錯誤”?
  ?
  相比之下,-n選項就安全的多,但它實際上幾乎一點用都沒有。這種接口非常的糟糕,但是卻有許多的程序都是這種風格。 文件傳輸程序ftp有一個選項可以禁止交互式的提問,以便能從一個腳本里面運行。但一旦發生了錯誤,它沒有提供的處理措施。?

  Expect是一個控制交互式程序的工具。他解決了fsck的問題,用非交互的方式實現了所有交互式的功能。Expect不是特別為fsck設計的,它也能進行類似ftp的出錯處理。?

  fsck和ftp的問題向我們展示了象sh,csh和別的一些shell提供的用戶接口的局限性。 Shell沒有提供從一個程序讀和象一個程序寫的 功能。這意味著shell可以運行fsck但只能以犧牲一部分fsck的靈活性做代價。有一些程序根本就不能被執行。比如說,如果沒有一個用戶接口交互式 的提供輸入,就沒法運行下去。其他還有象Telnet,crypt,su,rlogin等程序無法在shell腳本里面自動執行。還有很多其他的應用程序 在設計是也是要求用戶輸入的。?

  Expect被設計成專門針和交互式程序的交互。一個Expect程序員可以寫一個腳本來描述程序和用戶的對話。接著Expect程序可以非交互的運 行“交互式”的程序。寫交互式程序的腳本和寫非交互式程序的腳本一樣簡單。Expect還可以用于對對話的一部分進行自動化,因為程序的控制可以在鍵盤和 腳本之間進行切換。?


bes[2]里面有詳細的描述。簡單的說,腳本是用一種解釋性語言寫的。(也有C和C++的Expect庫可供使用,但這超出了本文的范圍).Expect提供了創建交互式進程和讀寫它們的輸入和輸出的命令。 Expect是由于它的一個同名的命令而命名的。?

  Expect語言是基于Tcl的。Tcl實際上是一個子程序庫,這些子程序庫可以嵌入到程序里從而提供語言服務。 最終的語言有點象一個典型的 Shell語言。里面有給變量賦值的set命令,控制程序執行的if,for,continue等命令,還能進行普通的數學和字符串操作。當然了,還可以 用exec來調用Unix程序。所有這些功能,Tcl都有。Tcl在參考書籍 Outerhour[3][4]里有詳細的描述。?

  Expect是在Tcl基礎上創建起來的,它還提供了一些Tcl所沒有的命令。spawn命令激活一個Unix程序來進行交互式的運行。 send命 令向進程發送字符串。expect命令等待進程的某些字符串。 expect支持正規表達式并能同時等待多個字符串,并對每一個字符串執行不同的操作。 expect還能理解一些特殊情況,如超時和遇到文件尾。?

  expect命令和Tcl的case命令的風格很相似。都是用一個字符串去匹配多個字符串。(只要有可能,新的命令總是和已有的Tcl命令相似,以使得該語言保持工具族的繼承性)。下面關于expect的定義是從手冊[5]上摘錄下來的。?

      expect patlist1 action1 patlist2 action2.....?

    該命令一直等到當前進程的輸出和以上的某一個模式相匹配,或者等    到時間超過一個特定的時間長度,或者等到遇到了文件的結束為止。?
    ?
    如果最后一個action是空的,就可以省略它。?

    每一個patlist都由一個模式或者模式的表(lists)組成。如果有一個模式匹配成功,相應的action就被執行。執行的結果從expect返回。?
    被精確匹配的字符串(或者當超時發生時,已經讀取但未進行匹配的字符串)被存貯在變量expect_match里面。如果patlist是eof 或者timeout,則發生文件結束或者超時時才執行相應的action.一般超時的時值是10秒,但可以用類似"set timeout 30"之類的命令把超時時值設定為30秒。?
    ?
    下面的一個程序段是從一個有關登錄的腳本里面摘取的。abort是在腳本的別處定義的過程,而其他的action使用類似與C語言的Tcl原語。?

      expect "*welcome*"        break     ?
           "*busy*"        {print busy;continue}?
          "*failed*"        abort ?
          timeout        abort?

    模式是通常的C Shell風格的正規表達式。模式必須匹配當前進程的從上一個expect或者interact開始的所有輸出(所以統配符*使用的非常)的普遍。但是, 一旦輸出超過2000個字節,前面的字符就會被忘記,這可以通過設定match_max的值來改變。?

  expect命令確實體現了expect語言的最好和最壞的性質。特別是,expect命令的靈活性是以經常出現令人迷惑的語法做代價。除了關鍵字模 式(比如說eof,timeout)那些模式表可以包括多個模式。這保證提供了一種方法來區分他們。但是分開這些表需要額外的掃描,如果沒有恰當的用 ["]括起來,這有可能會把和當成空白字符。由于Tcl提供了兩種字符串引用的方法:單引和雙引,情況變的更糟。(在Tcl里面,如果不會出現二義性話, 沒有必要使用引號)。在expect的手冊里面,還有一個獨立的部分來解釋這種復雜性。幸運的是:有一些很好的例子似乎阻止了這種抱怨。但是,這個復雜性 很有可能在將來的版本中再度出現。為了增強可讀性,在本文中,提供的腳本都假定雙引號是足夠的。?

  字符可以使用反斜杠來單獨的引用,反斜杠也被用于對語句的延續,如果不加反斜杠的話,語句到一行的結尾處就結束了。這和Tcl也是一致的。Tcl在發 現有開的單引號或者開的雙引號時都會繼續掃描。而且,分號可以用于在一行中分割多個語句。這乍聽起來有點讓人困惑,但是,這是解釋性語言的風格,但是,這 確實是Tcl的不太漂亮的部分。?

5.[callback]?

  令人非常驚訝的是,一些小的腳本如何的產生一些有用的功能。下面是一個撥電話號碼的腳本。他用來把收費反向,以便使得長途電話對計算機計費。這個腳本 用類似“expect callback.exp 12016442332”來激活。其中,腳本的名字便是callback.exp,而+1(201)644-2332是要撥的電話號碼。?

    #first give the user some time to logout?
    exec sleep 4?
    spawn tip modem?
    expect "*connected*"?
    send "ATD [index $argv 1] "?
    #modem takes a while to connect?
    set timeout 60?
    expect "*CONNECT*"?

  第一行是注釋,第二行展示了如何調用沒有交互的Unix程序。sleep 4會使程序阻塞4秒,以使得用戶有時間來退出,因為modem總是會回叫用戶已經使用的電話號碼。?

  下面一行使用spawn命令來激活tip程序,以便使得tip的輸出能夠被expect所讀取,使得tip能從send讀輸入。一旦tip說它已經連 接上,modem就會要求去撥打大哥電話號碼。(假定modem都是賀氏兼容的,但是本腳本可以很容易的修改成能適應別的類型的modem)。不論發生了 什么,expect都會終止。如果呼叫失敗,expect腳本可以設計成進行重試,但這里沒有。如果呼叫成功,getty會在expect退出后檢測到 DTR,并且向用戶提示loging:。(實用的腳本往往提供更多的錯誤檢測)。?

  這個腳本展示了命令行參數的使用,命令行參數存貯在一個叫做argv的表里面(這和C語言的風格很象)。在這種情況下,第一個元素就是電話號碼。方括號使得被括起來的部分當作命令來執行,結果就替換被括起來的部分。這也和C Shell的風格很象。?

  這個腳本和一個大約60K的C語言程序實現的功能相似。?
    ?

6.[passwd和一致性檢查]?

  在前面,我們提到passwd程序在缺乏用戶交互的情況下,不能運行,passwd會忽略I/O重定向,也不能嵌入到管道里邊以便能從別的程序或者文 件里讀取輸入。這個程序堅持要求真正的與用戶進行交互。因為安全的原因,passwd被設計成這樣,但結果導致沒有非交互式的方法來檢驗passwd。這 樣一個對系統安全至關重要的程序竟然沒有辦法進行可靠的檢驗,真實具有諷刺意味。?

  passwd以一個用戶名作為參數,交互式的提示輸入密碼。下面的expect腳本以用戶名和密碼作為參數而非交互式的運行。?

    spawn oasswd [index $argv 1]?
    set password [index $argv 2]?
    expect "*password:"?
    send "$password "?
    expect "*password:"?
    send "$password "?
    expect eof?

  第一行以用戶名做參數啟動passwd程序,為方便起見,第二行把密碼存到一個變量里面。和shell類似,變量的使用也不需要提前聲明。?

  在第三行,expect搜索模式"*password:",其中*允許匹配任意輸入,所以對于避免指定所有細節而言是非常有效的。 上面的程序里沒有action,所以expect檢測到該模式后就繼續運行。?

  一旦接收到提示后,下一行就就把密碼送給當前進程。表明回車。(實際上,所有的C的關于字符的約定都支持)。上面的程序中有兩個expect- send序列,因為passwd為了對輸入進行確認,要求進行兩次輸入。在非交互式程序里面,這是毫無必要的,但由于假定passwd是在和用戶進行交 互,所以我們的腳本還是這樣做了。?

  最后,"expect eof"這一行的作用是在passwd的輸出中搜索文件結束符,這一行語句還展示了關鍵字的匹配。另外一個關鍵字匹配就是timeout了, timeout被用于表示所有匹配的失敗而和一段特定長度的時間相匹配。在這里eof是非常有必要的,因為passwd被設計成會檢查它的所有I/O是否 都成功了,包括第二次輸入密碼時產生的最后一個新行。?

  這個腳本已經足夠展示passwd命令的基本交互性。另外一個更加完備的例子回檢查別的一些行為。比如說,下面的這個腳本就能檢查passwd程序的 別的幾個方面。所有的提示都進行了檢查。對垃圾輸入的檢查也進行了適當的處理。進程死亡,超乎尋常的慢響應,或者別的非預期的行為都進行了處理。?

    spawn passwd [index $argv 1]?
    expect     eof            {exit 1}     ?
        timeout            {exit 2}    ?
        "*No such user.*"    {exit 3}    ?
        "*New password:"    ?
    send "[index $argv 2 "?
    expect     eof            {exit 4}    ?
        timeout            {exit 2}    ?
        "*Password too long*"    {exit 5}    ?
        "*Password too short*"    {exit 5}    ?
        "*Retype ew password:"?
    send "[index $argv 3] "?
    expect     timeout            {exit 2}    ?
        "*Mismatch*"        {exit 6}    ?
        "*Password unchanged*"    {exit 7}    ?
        " "        ?
    expect    timeout            {exit 2}    ?
        "*"            {exit 6}    ?
        eof?

   ?
  這個腳本退出時用一個數字來表示所發生的情況。0表示passwd程序正常運行,1表示非預期的死亡,2表示鎖定,等等。使用數字是為了簡單起見。 expect返回字符串和返回數字是一樣簡單的,即使是派生程序自身產生的消息也是一樣的。實際上,典型的做法是把整個交互的過程存到一個文件里面,只有 當程序的運行和預期一樣的時候才把這個文件刪除。否則這個log被留待以后進一步的檢查。?

  這個passwd檢查腳本被設計成由別的腳本來驅動。這第二個腳本從一個文件里面讀取參數和預期的結果。對于每一個輸入參數集,它調用第一個腳本并且 把結果和預期的結果相比較。(因為這個任務是非交互的,一個普通的老式shell就可以用來解釋第二個腳本)。比如說,一個passwd的數據文件很有可 能就象下面一樣。?

    passwd.exp    3    bogus    -        -?
    passwd.exp    0    fred    abledabl    abledabl?
    passwd.exp    5    fred    abcdefghijklm    -?
    passwd.exp    5    fred    abc        -?
    passwd.exp    6    fred    foobar        bar    
    passwd.exp    4    fred    ^C        -?

  第一個域的名字是要被運行的回歸腳本。第二個域是需要和結果相匹配的退出值。第三個域就是用戶名。第四個域和第五個域就是提示時應該輸入的密碼。減號 僅僅表示那里有一個域,這個域其實絕對不會用到。在第一個行中,bogus表示用戶名是非法的,因此passwd會響應說:沒有此用戶。expect在退 出時會返回3,3恰好就是第二個域。在最后一行中,^C就是被切實的送給程序來驗證程序是否恰當的退出。?

  通過這種方法,expect可以用來檢驗和調試交互式軟件,這恰恰是IEEE的POSIX 1003.2(shell和工具)的一致性檢驗所要求的。進一步的說明請參考Libes[6]。?

7.[rogue 和偽終端]?

  Unix用戶肯定對通過管道來和其他進程相聯系的方式非常的熟悉(比如說:一個shell管道)。expect使用偽終端來和派生的進程相聯系。偽終端提供了終端語義以便程序認為他們正在和真正的終端進行I/O操作。?

  比如說,BSD的探險游戲rogue在生模式下運行,并假定在連接的另一端是一個可尋址的字符終端。可以用expect編程,使得通過使用用戶界面可以玩這個游戲。?

  rogue這個探險游戲首先提供給你一個有各種物理屬性,比如說力量值,的角色。在大部分時間里,力量值都是16,但在幾乎每20次里面就會有一個力 量值是18。很多的rogue玩家都知道這一點,但沒有人愿意啟動程序20次以獲得一個好的配置。下面的這個腳本就能達到這個目的。?

    for {} {1} {} {?
        spawn rogue?
        expect "*Str:18*"    break    ?
            "*Str:16*"    ?
        close?
        wait?
    }?
    interact?

  第一行是個for循環,和C語言的控制格式很象。rogue啟動后,expect就檢查看力量值是18還是16,如果是16,程序就通過執行 close和wait來退出。這兩個命令的作用分別是關閉和偽終端的連接和等待進程退出。rogue讀到一個文件結束符就推出,從而循環繼續運行,產生一 個新的rogue游戲來檢查。?

  當一個值為18的配置找到后,控制就推出循環并跳到最后一行腳本。interact把控制轉移給用戶以便他們能夠玩這個特定的游戲。?

  想象一下這個腳本的運行。你所能真正看到的就是20或者30個初始的配置在不到一秒鐘的時間里掠過屏幕,最后留給你的就是一個有著很好配置的游戲。唯一比這更好的方法就是使用調試工具來玩游戲。?

  我們很有必要認識到這樣一點:rogue是一個使用光標的圖形游戲。expect程序員必須了解到:光標的運動并不一定以一種直觀的方式在屏幕上體 現。幸運的是,在我們這個例子里,這不是一個問題。將來的對expect的改進可能會包括一個內嵌的能支持字符圖形區域的終端模擬器。?


8.[ftp]?

  我們使用expect寫第一個腳本并沒有打印出"Hello,World"。實際上,它實現了一些更有用的功能。它能通過非交互的方式來運行ftp。ftp是用來在支持TCP/IP的網絡上進行文件傳輸的程序。除了一些簡單的功能,一般的實現都要求用戶的參與。?

  下面這個腳本從一個主機上使用匿名ftp取下一個文件來。其中,主機名是第一個參數。文件名是第二個參數。?

        spawn    ftp    [index $argv 1]?
        expect "*Name*"?
        send     "anonymous "?
        expect "*Password:*"?
        send [exec whoami]?
        expect "*ok*ftp>*"?
        send "get [index $argv 2] "?
        expect "*ftp>*"?

  上面這個程序被設計成在后臺進行ftp。雖然他們在底層使用和expect類似的機制,但他們的可編程能力留待改進。因為expect提供了高級語言,你可以對它進行修改來滿足你的特定需求。比如說,你可以加上以下功能:?

    :堅持--如果連接或者傳輸失敗,你就可以每分鐘或者每小時,甚?
        至可以根據其他因素,比如說用戶的負載,來進行不定期的?
        重試。?
    :通知--傳輸時可以通過mail,write或者其他程序來通知你,甚至?
        可以通知失敗。?
    :初始化-每一個用戶都可以有自己的用高級語言編寫的初始化文件?
        (比如說,.ftprc)。這和C shell對.cshrc的使用很類似。?

  expect還可以執行其他的更復雜的任務。比如說,他可以使用McGill大學的Archie系統。Archie是一個匿名的Telnet服務,它 提供對描述Internet上可通過匿名ftp獲取的文件的數據庫的訪問。通過使用這個服務,腳本可以詢問Archie某個特定的文件的位置,并把它從 ftp服務器上取下來。這個功能的實現只要求在上面那個腳本中加上幾行就可以。?

  現在還沒有什么已知的后臺-ftp能夠實現上面的幾項功能,能不要說所有的功能了。在expect里面,它的實現卻是非常的簡單。“堅持”的實現只要 求在expect腳本里面加上一個循環。“通知”的實現只要執行mail和write就可以了。“初始化文件”的實現可以使用一個命令,source .ftprc,就可以了,在.ftprc里面可以有任何的expect命令。?

  雖然這些特征可以通過在已有的程序里面加上鉤子函數就可以,但這也不能保證每一個人的要求都能得到滿足。唯一能夠提供保證的方法就是提供一種通用的語 言。一個很好的解決方法就是把Tcl自身融入到ftp和其他的程序中間去。實際上,這本來就是Tcl的初衷。在還沒有這樣做之前,expect提供了一個 能實現大部分功能但又不需要任何重寫的方案。?

9.[fsck]?

  fsck是另外一個缺乏足夠的用戶接口的例子。fsck幾乎沒有提供什么方法來預先的回答一些問題。你能做的就是給所有的問題都回答"yes"或者都回答"no"。?

  下面的程序段展示了一個腳本如何的使的自動的對某些問題回答"yes",而對某些問題回答"no"。下面的這個腳本一開始先派生fsck進程,然后對其中兩種類型的問題回答"yes",而對其他的問題回答"no"。?

    for {} {1} {} {?
        expect?
            eof        break        ?
            "*UNREF FILE*CLEAR?"    {send "r "}    ?
            "*BAD INODE*FIX?"    {send "y "}    ?
            "*?"            {send "n "}    ?
    }?

  在下面這個版本里面,兩個問題的回答是不同的。而且,如果腳本遇到了什么它不能理解的東西,就會執行interact命令把控制交給用戶。用戶的擊鍵 直接交給fsck處理。當執行完后,用戶可以通過按"+"鍵來退出或者把控制交還給expect。如果控制是交還給腳本了,腳本就會自動的控制進程的剩余 部分的運行。?

    for {} {1} {}{?
        expect             ?
            eof        break        ?
            "*UNREF FILE*CLEAR?"    {send "y "}    ?
            "*BAD INODE*FIX?"    {send "y "}    ?
            "*?"            {interact +}    ?
    }?

  如果沒有expect,fsck只有在犧牲一定功能的情況下才可以非交互式的運行。fsck幾乎是不可編程的,但它卻是系統管理的最重要的工具。許多別的工具的用戶接口也一樣的不足。實際上,正是其中的一些程序的不足導致了expect的誕生。?

10.[控制多個進程:作業控制]?


  expect的作業控制概念精巧的避免了通常的實現困難。其中包括了兩個問題:一個是expect如何處理經典的作業控制,即當你在終端上按下^Z鍵時expect如何處理;另外一個就是expect是如何處理多進程的。?

  對第一個問題的處理是:忽略它。expect對經典的作業控制一無所知。比如說,你派生了一個程序并且發送一個^Z給它,它就會停下來(這是偽終端的完美之處)而expect就會永遠的等下去。?

  但是,實際上,這根本就不成一個問題。對于一個expect腳本,沒有必要向進程發送^Z。也就是說,沒有必要停下一個進程來。expect僅僅是忽略了一個進程,而把自己的注意力轉移到其他的地方。這就是expect的作業控制思想,這個思想也一直工作的很好。?

  從用戶的角度來看是象這樣的:當一個進程通過spawn命令啟動時,變量spawn_id就被設置成某進程的描述符。由spawn_id描述的進程就 被認為是當前進程。(這個描述符恰恰就是偽終端文件的描述符,雖然用戶把它當作一個不透明的物體)。expect和send命令僅僅和當前進程進行交互。 所以,切換一個作業所需要做的僅僅是把該進程的描述符賦給spawn_id。?

  這兒有一個例子向我們展示了如何通過作業控制來使兩個chess進程進行交互。在派生完兩個進程之后,一個進程被通知先動一步。在下面的循環里面,每 一步動作都送給另外一個進程。其中,read_move和write_move兩個過程留給讀者來實現。(實際上,它們的實現非常的容易,但是,由于太長 了所以沒有包含在這里)。?

    spawn chess            ;# start player one?
    set id1    $spawn_id?
    expect "Chess "?
    send "first "            ;# force it to go first?
    read_move?

    spawn chess            ;# start player two?
    set id2    $spawn_id?
    expect "Chess "?
    ?
    for {} {1} {}{?
        send_move?
        read_move?
        set spawn_id    $id1?
        ?
        send_move?
        read_move?
        set spawn_id    $id2?
    }?

   有一些應用程序和chess程序不太一樣,在chess程序里,的兩個玩家輪流動。下面這個腳本實現了一個冒充程序。它能夠控制一個終端以便用戶能夠登錄 和正常的工作。但是,一旦系統提示輸入密碼或者輸入用戶名的時候,expect就開始把擊鍵記下來,一直到用戶按下回車鍵。這有效的收集了用戶的密碼和用 戶名,還避免了普通的冒充程序的"Incorrect password-tryagain"。而且,如果用戶連接到另外一個主機上,那些額外的登錄也會被記錄下來。?

    spawn tip /dev/tty17        ;# open connection to?
    set tty $spawn_id        ;# tty to be spoofed?

    spawn login?
    set login $spawn_id?

    log_user 0?
    ?
    for {} {1} {} {?
        set ready [select $tty $login]?
        ?
        case $login in $ready {?
            set spawn_id $login?
            expect         ?
              {"*password*" "*login*"}{?
                  send_user $expect_match?
                  set log 1?
                 }    ?
              "*"        ;# ignore everything else?
            set spawn_id    $tty;?
            send $expect_match?
        }?
        case $tty in $ready {?
            set spawn_id    $tty?
            expect "* *"{?
                    if $log {?
                      send_user $expect_match?
                      set log 0?
                    }?
                   }    ?
                "*" {?
                    send_user $expect_match?
                   }?
            set spawn_id     $login;?
            send $expect_match?
        }?
    }?
        ?

   這個腳本是這樣工作的。首先連接到一個login進程和終端。缺省的,所有的對話都記錄到標準輸出上(通過send_user)。因為我們對此并不感興 趣,所以,我們通過命令"log_user 0"來禁止這個功能。(有很多的命令來控制可以看見或者可以記錄的東西)。?

   在循環里面,select等待終端或者login進程上的動作,并且返回一個等待輸入的spawn_id表。如果在表里面找到了一個值的話,case就執 行一個action。比如說,如果字符串"login"出現在login進程的輸出中,提示就會被記錄到標準輸出上,并且有一個標志被設置以便通知腳本開 始記錄用戶的擊鍵,直至用戶按下了回車鍵。無論收到什么,都會回顯到終端上,一個相應的action會在腳本的終端那一部分執行。?

   這些例子顯示了expect的作業控制方式。通過把自己插入到對話里面,expect可以在進程之間創建復雜的I/O流。可以創建多扇出,復用扇入的,動態的數據相關的進程圖。?

   相比之下,shell使得它自己一次一行的讀取一個文件顯的很困難。shell強迫用戶按下控制鍵(比如,^C,^Z)和關鍵字(比如fg和bg)來實現 作業的切換。這些都無法從腳本里面利用。相似的是:以非交互方式運行的shell并不處理“歷史記錄”和其他一些僅僅為交互式使用設計的特征。這也出現了 和前面哪個passwd程序的相似問題。相似的,也無法編寫能夠回歸的測試shell的某些動作的shell腳本。結果導致shell的這些方面無法進行 徹底的測試。?

   如果使用expect的話,可以使用它的交互式的作業控制來驅動shell。一個派生的shell認為它是在交互的運行著,所以會正常的處理作業控制。它 不僅能夠解決檢驗處理作業控制的shell和其他一些程序的問題。還能夠在必要的時候,讓shell代替expect來處理作業。可以支持使用shell 風格的作業控制來支持進程的運行。這意味著:首先派生一個shell,然后把命令送給shell來啟動進程。如果進程被掛起,比如說,發送了一個^Z,進 程就會停下來,并把控制返回給shell。對于expect而言,它還在處理同一個進程(原來那個shell)。?

  expect的解決方法不僅具有很大的靈活性,它還避免了重復已經存在于shell中的作業控制軟件。通過使用shell,由于你可以選擇你想派生的 shell,所以你可以根據需要獲得作業控制權。而且,一旦你需要(比如說檢驗的時候),你就可以驅動一個shell來讓這個shell以為它正在交互式 的運行。這一點對于在檢測到它們是否在交互式的運行之后會改變輸出的緩沖的程序來說也是很重要的。?

  為了進一步的控制,在interact執行期間,expect把控制終端(是啟動expect的那個終端,而不是偽終端)設置成生模式以便字符能夠正 確的傳送給派生的進程。當expect在沒有執行interact的時候,終端處于熟模式下,這時候作業控制就可以作用于expect本身。?

11.[交互式的使用expect]?

  在前面,我們提到可以通過interact命令來交互式的使用腳本。基本上來說,interact命令提供了對對話的自由訪問,但我們需要一些更精細 的控制。這一點,我們也可以使用expect來達到,因為expect從標準輸入中讀取輸入和從進程中讀取輸入一樣的簡單。 但是,我們要使用expect_user和send_user來進行標準I/O,同時不改變spawn_id。?

  下面的這個腳本在一定的時間內從標準輸入里面讀取一行。這個腳本叫做timed_read,可以從csh里面調用,比如說,set answer="timed_read 30"就能調用它。?

    #!/usr/local/bin/expect -f?
    set timeout [index $argv 1]?
    expect_user "* "?
    send_user $expect_match?

   第三行從用戶那里接收任何以新行符結束的任何一行。最后一行把它返回給標準輸出。如果在特定的時間內沒有得到任何鍵入,則返回也為空。?

   第一行支持"#!"的系統直接的啟動腳本。(如果把腳本的屬性加上可執行屬性則不要在腳本前面加上expect)。當然了腳本總是可以顯式的用 "expect scripot"來啟動。在-c后面的選項在任何腳本語句執行前就被執行。比如說,不要修改腳本本身,僅僅在命令行上加上-c "trace...",該腳本可以加上trace功能了(省略號表示trace的選項)。?

   在命令行里實際上可以加上多個命令,只要中間以";"分開就可以了。比如說,下面這個命令行:?

    expect -c "set timeout 20;spawn foo;expect"?

   一旦你把超時時限設置好而且程序啟動之后,expect就開始等待文件結束符或者20秒的超時時限。 如果遇到了文件結束符(EOF),該程序就會停下來,然后expect返回。如果是遇到了超時的情況,expect就返回。在這兩中情況里面,都隱式的殺 死了當前進程。?

   如果我們不使用expect而來實現以上兩個例子的功能的話,我們還是可以學習到很多的東西的。在這兩中情況里面,通常的解決方案都是fork另一個睡眠 的子進程并且用signal通知原來的shell。如果這個過程或者讀先發生的話,shell就會殺司那個睡眠的進程。 傳遞pid和防止后臺進程產生啟動信息是一個讓除了高手級shell程序員之外的人頭痛的事情。提供一個通用的方法來象這樣啟動多個進程會使shell腳 本非常的復雜。 所以幾乎可以肯定的是,程序員一般都用一個專門C程序來解決這樣一個問題。?

   expect_user,send_user,send_error(向標準錯誤終端輸出)在比較長的,用來把從進程來的復雜交互翻譯成簡單交互的 expect腳本里面使用的比較頻繁。在參考[7]里面,Libs描述怎樣用腳本來安全的包裹(wrap)adb,怎樣把系統管理員從需要掌握adb的細 節里面解脫出來,同時大大的降低了由于錯誤的擊鍵而導致的系統崩潰。?

   一個簡單的例子能夠讓ftp自動的從一個私人的帳號里面取文件。在這種情況里,要求提供密碼。 即使文件的訪問是受限的,你也應該避免把密碼以明文的方式存儲在文件里面。把密碼作為腳本運行時的參數也是不合適的,因為用ps命令能看到它們。有一個解 決的方法就是在腳本運行的開始調用expect_user來讓用戶輸入以后可能使用的密碼。這個密碼必須只能讓這個腳本知道,即使你是每個小時都要重試 ftp。?

   即使信息是立即輸入進去的,這個技巧也是非常有用。比如說,你可以寫一個腳本,把你每一個主機上不同的帳號上的密碼都改掉,不管他們使用的是不是同 一個密碼數據庫。如果你要手工達到這樣一個功能的話,你必須Telnet到每一個主機上,并且手工輸入新的密碼。而使用expect,你可以只輸入密碼一 次而讓腳本來做其它的事情。?

   expect_user和interact也可以在一個腳本里面混合的使用。考慮一下在調試一個程序的循環時,經過好多步之后才失敗的情況。一個 expect腳本可以驅動哪個調試器,設置好斷點,執行該程序循環的若干步,然后將控制返回給鍵盤。它也可以在返回控制之前,在循環體和條件測試之間來回 的切換.


=====================================================

[From] http://www.linuxeden.com/edu/doctext.php?docid=2288

我們通過Shell可以實現簡單的控制流功能,如:循環、判斷等。但是對于需要交互的場合則必須通過人工來干預,有時候我們可能會需要實現和交互程序如telnet服務器等進行交互的功能。而Expect就使用來實現這種功能的工具。

Expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預。Expect的作者Don Libes在1990年開始編寫Expect時對Expect做有如下定義:Expect是一個用來實現自動交互功能的軟件套件(Expect [is a] software suite for automating interactive tools)。使用它系統管理員的可以創建腳本用來實現對命令或程序提供輸入,而這些命令和程序是期望從終端(terminal)得到輸入,一般來說這些 輸入都需要手工輸入進行的。Expect則可以根據程序的提示模擬標準輸入提供給程序需要的輸入來實現交互程序執行。甚至可以實現實現簡單的BBS聊天機 器人。 :)

Expect是不斷發展的,隨著時間的流逝,其功能越來越強大,已經成為系統管理員的的一個強大助手。Expect需要Tcl編程語言的支持,要在系統上運行Expect必須首先安裝Tcl。

Expect工作原理

從最簡單的層次來說,Expect的工作方式象一個通用化的Chat腳本工具。Chat腳本最早用于UUCP網絡內,以用來實現計算機之間需要建立連接時進行特定的登錄會話的自動化。

Chat腳本由一系列expect-send對組成:expect等待輸出中輸出特定的字符,通常是一個提示符,然后發送特定的響應。例如下面的Chat 腳本實現等待標準輸出出現Login:字符串,然后發送somebody作為用戶名;然后等待Password:提示符,并發出響應sillyme。


Login: somebody Password: sillyme


這個腳本用來實現一個登錄過程,并用特定的用戶名和密碼實現登錄。?

Expect最簡單的腳本操作模式本質上和Chat腳本工作模式是一樣的。下面我們分析一個響應chsh命令的腳本。我們首先回顧一下這個交互命令的格式。假設我們為用戶chavez改變登錄腳本,命令交互過程如下:?

# chsh chavez
Changing the login shell for chavez
Enter the new value, or press return for the default
Login Shell [/bin/bash]: /bin/tcsh
#
可以看到該命令首先輸出若干行提示信息并且提示輸入用戶新的登錄shell。我們必須在提示信息后面輸入用戶的登錄shell或者直接回車不修改登錄shell。

下面是一個能用來實現自動執行該命令的Expect腳本:?

#!/usr/bin/expect
# Change a login shell to tcsh

set user [lindex $argv 0]
spawn chsh $user
expect "]:"
send "/bin/tcsh "?
expect eof
exit
這個簡單的腳本可以解釋很多Expect程序的特性。和其他腳本一樣首行指定用來執行該腳本的命令程序,這里是/usr/bin/expect。程序第一行用來獲得腳本的執行參數(其保存在數組$argv中,從0號開始是參數),并將其保存到變量user中。

第二個參數使用Expect的spawn命令來啟動腳本和命令的會話,這里啟動的是chsh命令,實際上命令是以衍生子進程的方式來運行的。

隨后的expect和send命令用來實現交互過程。腳本首先等待輸出中出現]:字符串,一旦在輸出中出現chsh輸出到的特征字符串(一般特征字符串往 往是等待輸入的最后的提示符的特征信息)。對于其他不匹配的信息則會完全忽略。當腳本得到特征字符串時,expect將發送/bin/tcsh和一個回車 符給chsh命令。最后腳本等待命令退出(chsh結束),一旦接收到標識子進程已經結束的eof字符,expect腳本也就退出結束。

決定如何響應

管理員往往有這樣的需求,希望根據當前的具體情況來以不同的方式對一個命令進行響應。我們可以通過后面的例子看到expect可以實現非常復雜的條件響應,而僅僅通過簡單的修改預處理腳本就可以實現。下面的例子是一個更復雜的expect-send例子:?

expect -re "/[(.*)]:"
if {$expect_out(1,string)!="/bin/tcsh"} {
send "/bin/tcsh" }
send " "
expect eof
在這個例子中,第一個expect命令現在使用了-re參數,這個參數表示指定的的字符串是一個正則表達式,而不是一個普通的字符串。對于上面這個例子里 是查找一個左方括號字符(其必須進行三次逃逸(escape),因此有三個符號,因為它對于expect和正則表達時來說都是特殊字符)后面跟有零個或多 個字符,最后是一個右方括號字符。這里.*表示表示一個或多個任意字符,將其存放在()中是因為將匹配結果存放在一個變量中以實現隨后的對匹配結果的訪 問。

當發現一個匹配則檢查包含在[]中的字符串,查看是否為/bin/tcsh。如果不是則發送/bin/tcsh給chsh命令作為輸入,如果是則僅僅發送一個回車符。這個簡單的針對具體情況發出不同相響應的小例子說明了expect的強大功能。

在一個正則表達時中,可以在()中包含若干個部分并通過expect_out數組訪問它們。各個部分在表達式中從左到右進行編碼,從1開始(0包含有整個匹配輸出)。()可能會出現嵌套情況,這這種情況下編碼從最內層到最外層來進行的。

使用超時

下一個expect例子中將闡述具有超時功能的提示符函數。這個腳本提示用戶輸入,如果在給定的時間內沒有輸入,則會超時并返回一個默認的響應。這個腳本接收三個參數:提示符字串,默認響應和超時時間(秒)。?

#!/usr/bin/expect
# Prompt function with timeout and default.
set prompt [lindex $argv 0]
set def [lindex $argv 1]?
set response $def
set tout [lindex $argv 2]
腳本的第一部分首先是得到運行參數并將其保存到內部變量中。?

send_tty "$prompt: "
set timeout $tout
expect " " {
set raw $expect_out(buffer)
# remove final carriage return
set response [string trimright "$raw" " "]
}
if {"$response" == "} {set response $def}
send "$response "
# Prompt function with timeout and default.
set prompt [lindex $argv 0]
set def [lindex $argv 1]?
set response $def
set tout [lindex $argv 2]

這是腳本其余的內容。可以看到send_tty命令用來實現在終端上顯示提示符字串和一個冒號及空格。set timeout命令設置后面所有的expect命令的等待響應的超時時間為$tout(-l參數用來關閉任何超時設置)。

然后expect命令就等待輸出中出現回車字符。如果在超時之前得到回車符,那么set命令就會將用戶輸入的內容賦值給變臉raw。隨后的命令將用戶輸入內容最后的回車符號去除以后賦值給變量response。?

然后,如果response中內容為空則將response值置為默認值(如果用戶在超時以后沒有輸入或者用戶僅僅輸入了回車符)。最后send命令將response變量的值加上回車符發送給標準輸出。

一個有趣的事情是該腳本沒有使用spawn命令。 該expect腳本會與任何調用該腳本的進程交互。

如果該腳本名為prompt,那么它可以用在任何C風格的shell中。


% set a='prompt "Enter an answer" silence 10'
Enter an answer: test

% echo Answer was "$a"
Answer was test
prompt設定的超時為10秒。如果超時或者用戶僅僅輸入了回車符號,echo命令將輸出?

Answer was "silence"

一個更復雜的例子

下面我們將討論一個更加復雜的expect腳本例子,這個腳本使用了一些更復雜的控制結構和很多復雜的交互過程。這個例子用來實現發送write命令給任意的用戶,發送的消息來自于一個文件或者來自于鍵盤輸入。?

#!/usr/bin/expect
# Write to multiple users from a prepared file
# or a message input interactively

if {$argc<2} {
send_user "usage: $argv0 file user1 user2 ... "
exit
}
send_user命令用來顯示使用幫助信息到父進程(一般為用戶的shell)的標準輸出。?

set nofile 0
# get filename via the Tcl lindex function
set file [lindex $argv 0]
if {$file=="i"} {?
set nofile 1?
} else {?
# make sure message file exists
if {[file isfile $file]!=1} {?
send_user "$argv0: file $file not found. "
exit }}

這部分實現處理腳本啟動參數,其必須是一個儲存要發送的消息的文件名或表示使用交互輸入得到發送消的內容的"i"命令。

變量file被設置為腳本的第一個參數的值,是通過一個Tcl函數lindex來實現的,該函數從列表/數組得到一個特定的元素。[]用來實現將函數lindex的返回值作為set命令的參數。

如果腳本的第一個參數是小寫的"i",那么變量nofile被設置為1,否則通過調用Tcl的函數isfile來驗證參數指定的文件存在,如果不存在就報錯退出。

可以看到這里使用了if命令來實現邏輯判斷功能。該命令后面直接跟判斷條件,并且執行在判斷條件后的{}內的命令。if條件為false時則運行else后的程序塊。?

set procs {}
# start write processes
for {set i 1} {$i<$argc}
{incr i} {
spawn -noecho write?
[lindex $argv $i]?
lappend procs $spawn_id
}
最后一部分使用spawn命令來啟動write進程實現向用戶發送消息。這里使用了for命令來實現循環控制功能,循環變量首先設置為1,然后因此遞增。 循環體是最后的{}的內容。這里我們是用腳本的第二個和隨后的參數來spawn一個write命令,并將每個參數作為發送消息的用戶名。lappend命 令使用保存每個spawn的進程的進程ID號的內部變量$spawn_id在變量procs中構造了一個進程ID號列表。?

if {$nofile==0} {
setmesg [open "$file" "r"]
} else {
send_user "enter message,
ending with ^D: " }

最后腳本根據變量nofile的值實現打開消息文件或者提示用戶輸入要發送的消息。?

set timeout -1
while 1 {
if {$nofile==0} {
if {[gets $mesg chars] == -1} break
set line "$chars "?
} else {
expect_user {
-re " " {}
eof break }
set line $expect_out(buffer) }

foreach spawn_id $procs {?
send $line }
sleep 1}
exit
上面這段代碼說明了實際的消息文本是如何通過無限循環while被發送的。while循環中的 if判斷消息是如何得到的。在非交互模式下,下一行內容從消息文件中讀出,當文件內容結束時while循環也就結束了。(break命令實現終止循環) 。?

在交互模式下,expect_user命令從用戶接收消息,當用戶輸入ctrl+D時結束輸入,循環同時結束。 兩種情況下變量$line都被用來保存下一行消息內容。當是消息文件時,回車會被附加到消息的尾部。

foreach循環遍歷spawn的所有進程,這些進程的ID號都保存在列表變量$procs中,實現分別和各個進程通信。send命令組成了 foreach的循環體,發送一行消息到當前的write進程。while循環的最后是一個sleep命令,主要是用于處理非交互模式情況下,以確保消息 不會太快的發送給各個write進程。當while循環退出時,expect腳本結束。

參考資源

Expect軟件版本深帶有很多例子腳本,不但可以用于學習和理解expect腳本,而且是非常使用的工具。一般可以在 /usr/doc/packages/expect/example看到它們,在某些linux發布中有些expect腳本保存在/usr/bin目錄 下。?

Don Libes, Exploring Expect, O'Reilly & Associates, 1995.?

John Ousterhout, Tcl and the Tk Toolkit, Addison-Wesley, 1994.?

一些有用的expect腳本

autoexpect:這個腳本將根據自身在運行時用戶的操作而生成一個expect腳本。它的功能某種程度上類似于在Emacs編輯器的鍵盤宏工具。一個自動創建的腳本可能是創建自己定制腳本的好的開始。

kibitz:這是一個非常有用的工具。通過它兩個或更多的用戶可以連接到同一個shell進程。可以用于技術支持或者培訓(參見下圖)。



同樣可以用于其他一些要求同步的協同任務。例如我希望和另外一個同事一起編輯一封信件,這樣通過kibitz我們可以共享同一個運行編輯器的腳本,同時進行編輯和查看信件內容。

tkpasswd: 這個腳本提供了修改用戶密碼的GUI工具,包括可以檢查密碼是否是基于字典模式。這個工具同時是一個學習expect和tk的好實例。

==================================================

Expect 超出預期

[From] http://www-128.ibm.com/developerworks/cn/linux/server/clinic/part1/index.html
Cameron Laird 用一篇對受歡迎的 Expect 工具的概述開啟了他新的月度專欄,Expect 是一種功能大大超出大多數程序員和管理員認識的語言。Expect 非常適合保持服務器正常運轉所需的通用工作,實際上,它可以作為一種(幾乎)通用的編程語言。通過單擊本文頂部或底部的?討論在?論壇中將您對本文的想法與作者和其他讀者一起分享。

您是一名“系統程序員”― 您編寫代碼以保持服務器正常運轉,并且為您的應用程序開發人員同事提供所需的底層功能。您從哪里獲取所需的信息呢?大多數編程參考大全關心客戶機或者“應用程序”問題,而管理書籍通常回避編程而致力于“配置”。

我希望您會發現這一新的“服務器診所”專欄是有用的來源之一。每個月,我都將解決在服務器的“維護與支持”中遇到的一個編程問題或一類共同問題。

專 欄第一部分將 Expect 作為您最應該了解的一種語言進行介紹。您可能已經熟悉 Expect 了。不過,您也可能從未見過 Expect 所管理任務的完整范圍。Expect 實現了一種 Linux 系統編程的通用性,其它語言 ― 即使是 C、Java 或 bash ― 都無法與之相比。雖然未來的專欄文章將展示使用各種語言的解決方案,但 Expect 很可能是出現頻率最高的一個。

在 Tcl 上構建

什么使 Expect“通用”呢?首先,應了解 Expect 是 Tcl/Tk 編程語言的適當超集。Tcl 是在各種程序中使用的一種高級語言。 它過去通常與 Perl、Python、Ruby 和其它語言一起被歸為“腳本編制”語言。在 2002 年,最明智的做法是拋開某些歷史事件,簡單地將所有這些語言視為高效率的開放源碼語言。Tcl 在計算機輔助設計(CAD)領域中特別流行,象 Cisco 和 Nortel 這樣的聯網設備供應商也都使用它。與其它“腳本編制”語言一樣,Tcl 的內置功能適用于文本處理、數據庫管理、聯網和算法等領域中的最常見問題。

Tcl 是 Expect 的基礎。任何 Tcl 程序都自動是 Expect 程序。因為有下面兩個原因,所以強調這一點很重要:

  • 許多人只知道 Expect 是一種“工具”,而從不了解它是一種完全成熟的編程語言。
  • 1994 年,許多真正認識到 Expect 的通用能力的程序員都被它迷住了。

Expect 的作者是(美國)國家標準與技術協會(National Institute of Standards and Technology)的 Don Libes。他在 1994 年出版了一本關于 Expect 的出色書籍。該書現在仍只有第一版,它沒有競爭者;這本書寫得太好了,以至于沒有出版商出版另一本書。最引人注目的是,?Exploring Expect(請參閱本文后面的?參考資料)一直不需要更新。它的清晰和精確很好地經受了時間的考驗。

這里的問題是,過去八年以來,Expect 的底層 Tcl 基礎已經有了極大發展。最初編寫 Expect 時,Tcl 并不追求成為通用的編程語言。從那時起,Tcl 已經:

  • 知道如何處理完整的八位數據,甚至能方便地處理 Unicode;
  • 添加了方便的 TCP/IP 抽象;
  • 獲取了數據和時間計算以及格式化方面的能力;
  • 改進并合理化了其字符串處理;

因此,請記住:如果 Perl、Java 或 C 可以解決一個問題,那么 Tcl 以及 Expect 很可能也可以解決。

Tcl 有一項任何其它編程語言都“無與倫比(out of the box)”的工作,這就是圖形用戶界面(GUI)的構建。雖然從 ActiveState Tools Corporation 下載的 Linux 版標準 ActiveTcl 二進制分發版只有大約 10 兆字節,但它不僅包含 Expect,而且還包含功能齊全的集成 GUI 工具箱。下面的示例將說明這個名為“Tk”的工具箱如何簡潔地表達 GUI 解決方案。

?



回頁首



難題的獨特解決方案

Expect 的 Tcl/Tk 基礎適用于范圍非常廣的編程。請記住,Expect 可以完成 Tcl/Tk 所能做的一切。除此之外,Expect 添加了三大類別的附加功能:

  • 擴展的調試選項
  • 描述面向字符對話框的便利命令
  • 棘手的面向字符終端的獨一無二的管理

這些功能中第一個是常規的。Expect 有各種“開關”來記錄或報告其操作的各個方面。

Expect 的用途是使面向字符的交互自動化。您可能已經自己完成了許多這種工作。每次編寫命令行管道或重定向輸入/輸出(I/O)流時,您都在讓計算機管理這些工作,否則您必須自己輸入。

Expect 以兩種方式深化了這一控制:首先,它提供了表達對話框復雜程度的語言。Expect 不只使用固定“腳本”作為應用程序的輸入,而是使交互的每個擊鍵都可編程。

如 Libes 所說,更關鍵的是:“最終,Expect 是為處理蹩腳的界面而設計的工具。”特別是 Expect 具有管理抵制 I/O 重定向的應用程序的能力。典型示例是命令行?passwd?程序。每個負責管理服務器的人員遲早都需要使密碼更新自動化。第一次嘗試可能是作為 root 用戶運行類似下面的代碼:


失敗的 passwd 自動化

 
passwd $user << HERE
$newpassword
$newpassword
HERE

?

正如每個嘗試它的人很快會發現,這根本不起作用。shell 的 < 和 << 重定向對于象?passwd?這樣的程序不起作用。

但是,Expect 可以使重定向起作用。Expect 知道如何與所有面向字符的應用程序對話,即使是象passwd?那樣操縱終端設置的應用程序。

正是這一點完善了 Expect 的通用性。原則上,其它語言或庫可以提供終端特征的信息。例如,Perl 的Expect.pm?模塊在這方面已經做了很多。雖然經過十多年生產使用,但卻沒出現其它有力的競爭對手。

這 就是您應該學習 Expect 的原因。您將處理帶有“蹩腳界面”的程序 ― 您周圍有很多這樣的程序 ― 而 Expect 通過讓它們完成您所需的工作,可以減少幾小時甚至幾天的開發時間。同時,還可以將 Expect 用于通常由 bash 或 Perl 完成的所有作業。

?



回頁首



有關 Expect 的所有其它須知信息

您還應該了解有關 Expect 的其它信息。本專欄的最后部分包括對 Expect 局限的說明、對解決常見問題的 Expect 工作代碼的概述以及可以引導您更深入了解 Expect 編程的參考。

Expect 所做的比大多數人所認識到的要多;這就是本專欄的主題。Expect 也有不足之處。系統程序員通常需要使象 FTP 操作、電子郵件發送或處理以及 GUI 測試這樣的任務自動化。對于其中的前兩項,Expect 無法提供幫助。更準確地說,雖然可以使用 Expect 來使 FTP 和電子郵件自動化(這樣做在前幾年也很常見),但是現在 Expect 在這些領域方面沒有特別優勢。其它語言和方法與面向 Expect 的編碼功效相同,或者更勝一籌。這個“服務器診所”專欄的未來部分將說明簡便聯網自動化的示例。

Expect 的著名用法是用于測試。Expect 是用于幾個高端產品(包括 gcc)質量控制中使用的 DejaGnu 系統的基礎。然而,雖然 Expect 可用于構建 GUI,并且在幾個測試框架中也很關鍵,但是通常 Expect 在用于 GUI 系統的測試框架中?起作用。

暫時回到上面提到的?passwd?問題。Expect 對它的展望是什么呢?

要了解 Expect 源代碼,目前更簡便的做法是忽略安全性考慮事項。下面的程序需要作為 root 用戶運行。Expect 提供有用的功能以實現更安全的操作;不過在掌握 Expect 基礎知識后更容易理解這些。

您已經知道簡單 I/O 重定向對?passwd?不起作用。何種 Expect 程序提供了更好的結果呢?


更新密碼的簡單 Expect 程序


# Invoke as "change_password <user> <newpassword>".
package require expect
# Define a [proc] that can be re-used in many
# applications.
proc update_one_password {user newpassword} {
spawn passwd $user
expect "password: "
exp_send $newpassword/n
# passwd insists on verifying the change,
# so repeat the password.
expect "password: "
exp_send $newpassword/n
}
eval update_one_password $argv

?

這就是 Expect 用來使程序自動化所需的全部代碼,其它語言幾乎不可能做到。再多用幾行,您可以一次對成百上千用戶進行批處理更新。這是一種常見需求;我經常被請去恢復密碼文件被嚴重毀壞的服務器,這里說明了一種開始的方法:


簡單迭代

  
...
set default_password lizard5
set list [exec cat list_of_accounts]
foreach account $list {
update_one_password $account $default_password
puts "Password for '$account' has been reset."
}





回頁首



同樣適用于 GUI

給 Expect 自動化加上 GUI 外觀也只需要多加幾行。假定您想為一名非程序員提供方便地更新密碼的應用程序。同樣忽略安全性考慮事項,這就象完成下列代碼一樣簡單:


簡單迭代


...
package require Tk
frame .account
frame .password
label .account.label -text Account
entry .account.entry -textvariable account
label .password.label -text Password
# Show only '*', not the real characters of
# the entered password.
entry .password.entry -textvariable password -show *
button .button -text "Update account" -command {
update_one_password $account $password
}
pack .account .password .button -side top
pack .account.label .account.entry -side left
pack .password.label .password.entry -side left

?

這個小工作應用程序具有下面的視覺外觀:


簡單 Expect 密碼管理器的抓屏?
?



回頁首



結束語

Expect 具有系統程序員通常需要的獨特能力。同時,Expect 是出色的通用編程語言,它在聯網和 GUI 構造方面具有優勢。如果您必須只選擇一種用于日常工作的語言,Expect 近乎是理想選擇。

請告訴我您如何使用 Expect 以及想讓它為您做什么。在以后的幾個月,這個“服務器診所”專欄將回頭研究高端版本控制、網絡代理和更多的自動化。在那以前,祝您和您的服務器都“身體健康”。

?

關于作者

?

?

Cameron Laird 是 Phaseit, Inc 的一名全職顧問。他經常就開放源碼和其它技術主題撰寫文章并發表演說。Cameron 感謝 SuSE 的 Reinhard Max 在他準備這個專欄期間所提供的幫助。可以通過claird@phaseit.net與 Cameron 聯系。

轉載于:https://www.cnblogs.com/wangkangluo1/archive/2012/06/14/2548685.html

總結

以上是生活随笔為你收集整理的Expect 教程中文版的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产精品久久精品三级 | 丰满人妻一区二区三区免费视频 | 图片小说视频一区二区 | 国产激情精品一区二区三区 | 色综合久久88色综合天天 | 全黄性性激高免费视频 | 国产午夜福利100集发布 | 亚洲色在线无码国产精品不卡 | 51国偷自产一区二区三区 | 乱人伦中文视频在线观看 | 免费视频欧美无人区码 | 性色欲网站人妻丰满中文久久不卡 | 波多野结衣aⅴ在线 | 天天躁日日躁狠狠躁免费麻豆 | 成人性做爰aaa片免费看 | 久久国语露脸国产精品电影 | 国产人妻精品一区二区三区 | 精品亚洲成av人在线观看 | 人人妻人人澡人人爽欧美精品 | 国内精品人妻无码久久久影院 | 久久久亚洲欧洲日产国码αv | 国产成人精品一区二区在线小狼 | 国产精品无码一区二区三区不卡 | 亚洲精品一区国产 | 欧美野外疯狂做受xxxx高潮 | 国产小呦泬泬99精品 | 双乳奶水饱满少妇呻吟 | 亚洲综合精品香蕉久久网 | 1000部夫妻午夜免费 | 131美女爱做视频 | 亚洲va欧美va天堂v国产综合 | 国产成人一区二区三区在线观看 | 六十路熟妇乱子伦 | 狠狠色噜噜狠狠狠7777奇米 | 精品国产一区二区三区四区在线看 | 国产精品久久久久久无码 | 欧美丰满熟妇xxxx性ppx人交 | 精品国产一区二区三区四区在线看 | 中文字幕av无码一区二区三区电影 | 国产婷婷色一区二区三区在线 | 亚洲 激情 小说 另类 欧美 | 老子影院午夜精品无码 | 麻豆果冻传媒2021精品传媒一区下载 | 日本熟妇乱子伦xxxx | 蜜桃无码一区二区三区 | 天堂在线观看www | 亚洲精品无码人妻无码 | 特大黑人娇小亚洲女 | 日本www一道久久久免费榴莲 | 中文字幕精品av一区二区五区 | 欧美日韩一区二区免费视频 | 美女黄网站人色视频免费国产 | 亚洲第一网站男人都懂 | 久久久精品欧美一区二区免费 | 亚洲色偷偷男人的天堂 | 中文字幕无码免费久久9一区9 | 色综合久久久无码网中文 | 国产精品久久久午夜夜伦鲁鲁 | 国产免费久久久久久无码 | 最新版天堂资源中文官网 | 波多野结衣一区二区三区av免费 | 男女猛烈xx00免费视频试看 | 久久久亚洲欧洲日产国码αv | 免费观看的无遮挡av | 成人无码视频在线观看网站 | 亚洲国产高清在线观看视频 | 成年美女黄网站色大免费全看 | 久久国产精品精品国产色婷婷 | 亚洲精品国产第一综合99久久 | 国产免费久久久久久无码 | 蜜臀aⅴ国产精品久久久国产老师 | 99久久久国产精品无码免费 | 捆绑白丝粉色jk震动捧喷白浆 | 久久天天躁狠狠躁夜夜免费观看 | 亚无码乱人伦一区二区 | 无码人妻精品一区二区三区不卡 | 无码av中文字幕免费放 | 久久国产精品偷任你爽任你 | 九一九色国产 | 亚洲日韩乱码中文无码蜜桃臀网站 | 在线欧美精品一区二区三区 | 久在线观看福利视频 | 激情内射亚州一区二区三区爱妻 | 亚洲精品国偷拍自产在线观看蜜桃 | 人人妻人人澡人人爽人人精品 | 亚洲欧美日韩国产精品一区二区 | av人摸人人人澡人人超碰下载 | 久久99精品国产.久久久久 | 未满小14洗澡无码视频网站 | 丰满人妻一区二区三区免费视频 | 人人妻人人澡人人爽欧美精品 | 精品少妇爆乳无码av无码专区 | 亚洲の无码国产の无码影院 | 性色欲网站人妻丰满中文久久不卡 | 青草青草久热国产精品 | 中文字幕日韩精品一区二区三区 | 樱花草在线播放免费中文 | 国产特级毛片aaaaaaa高清 | 国产精品人人爽人人做我的可爱 | 麻豆国产人妻欲求不满 | 久久精品无码一区二区三区 | 精品一区二区三区波多野结衣 | 无遮无挡爽爽免费视频 | 无遮挡啪啪摇乳动态图 | 国产精品永久免费视频 | 网友自拍区视频精品 | 精品熟女少妇av免费观看 | 天天爽夜夜爽夜夜爽 | 精品一区二区不卡无码av | 亚洲欧洲无卡二区视頻 | 欧美阿v高清资源不卡在线播放 | 人妻天天爽夜夜爽一区二区 | 亚洲伊人久久精品影院 | 欧美人妻一区二区三区 | 久久精品国产日本波多野结衣 | 久久久久久九九精品久 | 国产在线无码精品电影网 | 97久久精品无码一区二区 | 无码毛片视频一区二区本码 | 亚洲理论电影在线观看 | 精品一区二区不卡无码av | v一区无码内射国产 | 无码一区二区三区在线观看 | 色情久久久av熟女人妻网站 | 国产激情综合五月久久 | 欧美人妻一区二区三区 | 成人aaa片一区国产精品 | 99久久精品无码一区二区毛片 | 国产精品久久久久无码av色戒 | 天干天干啦夜天干天2017 | 300部国产真实乱 | 又湿又紧又大又爽a视频国产 | 国产午夜亚洲精品不卡 | 亚洲精品一区二区三区四区五区 | 国产超碰人人爽人人做人人添 | 永久免费精品精品永久-夜色 | 欧美人与物videos另类 | 在线观看免费人成视频 | 亚洲无人区一区二区三区 | 极品嫩模高潮叫床 | 精品亚洲成av人在线观看 | 国内揄拍国内精品人妻 | 国产精品久免费的黄网站 | 人妻少妇精品视频专区 | 丝袜足控一区二区三区 | 精品无人国产偷自产在线 | 2019午夜福利不卡片在线 | 荫蒂添的好舒服视频囗交 | 骚片av蜜桃精品一区 | 亚洲欧美精品伊人久久 | 日韩av无码一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 天下第一社区视频www日本 | 精品国产乱码久久久久乱码 | 欧美变态另类xxxx | 久热国产vs视频在线观看 | 日本肉体xxxx裸交 | 亚洲国产精品久久久久久 | 久久久精品成人免费观看 | 婷婷丁香五月天综合东京热 | 麻豆国产丝袜白领秘书在线观看 | 国产超级va在线观看视频 | 亚拍精品一区二区三区探花 | 丰满少妇女裸体bbw | 中国女人内谢69xxxxxa片 | 欧美丰满少妇xxxx性 | 18禁黄网站男男禁片免费观看 | 中文字幕日产无线码一区 | 国产精品手机免费 | 国内精品人妻无码久久久影院 | 日本熟妇浓毛 | 无码乱肉视频免费大全合集 | 成人精品视频一区二区三区尤物 | 3d动漫精品啪啪一区二区中 | 国产亚洲人成a在线v网站 | 乱码午夜-极国产极内射 | 亚洲精品成人福利网站 | 国产真实乱对白精彩久久 | 人人妻人人澡人人爽欧美一区 | 亚洲va欧美va天堂v国产综合 | 美女毛片一区二区三区四区 | 国产sm调教视频在线观看 | 又黄又爽又色的视频 | 岛国片人妻三上悠亚 | 红桃av一区二区三区在线无码av | 国产色视频一区二区三区 | 国产偷自视频区视频 | 久久综合狠狠综合久久综合88 | 四虎4hu永久免费 | 免费无码av一区二区 | 亚洲精品一区二区三区婷婷月 | 狂野欧美性猛交免费视频 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲高清偷拍一区二区三区 | 国产亚洲美女精品久久久2020 | 亚洲呦女专区 | 亚洲人成人无码网www国产 | 全黄性性激高免费视频 | 熟妇人妻无码xxx视频 | 午夜无码区在线观看 | 久久人人爽人人爽人人片av高清 | 欧美成人免费全部网站 | 欧美一区二区三区 | 国产精品毛片一区二区 | 97夜夜澡人人爽人人喊中国片 | 亚洲成av人综合在线观看 | 又大又紧又粉嫩18p少妇 | 亚洲 a v无 码免 费 成 人 a v | 水蜜桃色314在线观看 | 亚洲色无码一区二区三区 | 97色伦图片97综合影院 | 漂亮人妻洗澡被公强 日日躁 | 日韩av激情在线观看 | 在线视频网站www色 | 成年美女黄网站色大免费全看 | 狠狠色丁香久久婷婷综合五月 | 白嫩日本少妇做爰 | 亚洲国产高清在线观看视频 | 亚洲区小说区激情区图片区 | 中文无码成人免费视频在线观看 | 无码乱肉视频免费大全合集 | 亚洲中文字幕无码中文字在线 | 麻豆国产人妻欲求不满谁演的 | 在线成人www免费观看视频 | 沈阳熟女露脸对白视频 | 成年美女黄网站色大免费视频 | 成年美女黄网站色大免费全看 | 中文字幕无码人妻少妇免费 | 亚洲另类伦春色综合小说 | 精品久久久久久人妻无码中文字幕 | 亚洲欧美日韩综合久久久 | 俺去俺来也在线www色官网 | 欧美性生交xxxxx久久久 | 国产精品嫩草久久久久 | 中文无码伦av中文字幕 | 久久99精品久久久久婷婷 | 国产精品沙发午睡系列 | 亚洲午夜无码久久 | 在线欧美精品一区二区三区 | 国产精品a成v人在线播放 | 日本一区二区三区免费播放 | 日韩无码专区 | 亚洲成a人一区二区三区 | 久久久久成人精品免费播放动漫 | 日本丰满熟妇videos | 日韩人妻系列无码专区 | 水蜜桃亚洲一二三四在线 | 久久久久久a亚洲欧洲av冫 | 偷窥日本少妇撒尿chinese | 国产免费久久精品国产传媒 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 四虎4hu永久免费 | 双乳奶水饱满少妇呻吟 | 日韩欧美成人免费观看 | 久久国产自偷自偷免费一区调 | 国产成人人人97超碰超爽8 | 国产午夜精品一区二区三区嫩草 | 婷婷五月综合缴情在线视频 | 亚洲精品午夜国产va久久成人 | 日韩人妻少妇一区二区三区 | 天天爽夜夜爽夜夜爽 | 国产乱子伦视频在线播放 | 国产亚洲美女精品久久久2020 | 欧美成人午夜精品久久久 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久国产精品萌白酱免费 | 亚洲国产成人a精品不卡在线 | 精品水蜜桃久久久久久久 | 亚洲春色在线视频 | 最新国产乱人伦偷精品免费网站 | 国产深夜福利视频在线 | 97精品人妻一区二区三区香蕉 | 日本www一道久久久免费榴莲 | 国产精品理论片在线观看 | 在线欧美精品一区二区三区 | 人人妻人人澡人人爽人人精品 | 性欧美疯狂xxxxbbbb | 国产人妻久久精品二区三区老狼 | 男女性色大片免费网站 | 成人欧美一区二区三区黑人免费 | 国产人妖乱国产精品人妖 | 久久久亚洲欧洲日产国码αv | 波多野结衣一区二区三区av免费 | 亚洲国产欧美在线成人 | 99久久人妻精品免费一区 | 国产莉萝无码av在线播放 | 国产精品亚洲lv粉色 | 奇米影视7777久久精品 | 无码国模国产在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品久久久久久亚洲影视内衣 | 成人无码影片精品久久久 | 久久久久久a亚洲欧洲av冫 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 天堂久久天堂av色综合 | 好爽又高潮了毛片免费下载 | 精品亚洲韩国一区二区三区 | 九九在线中文字幕无码 | 强辱丰满人妻hd中文字幕 | 免费男性肉肉影院 | 亚洲一区av无码专区在线观看 | 亚洲另类伦春色综合小说 | 欧洲极品少妇 | 波多野结衣av一区二区全免费观看 | 人妻少妇精品视频专区 | 日欧一片内射va在线影院 | 玩弄人妻少妇500系列视频 | 熟女少妇在线视频播放 | 无码毛片视频一区二区本码 | 国产成人亚洲综合无码 | 无码人妻久久一区二区三区不卡 | 综合人妻久久一区二区精品 | 内射爽无广熟女亚洲 | 免费人成网站视频在线观看 | 国产人妻精品一区二区三区不卡 | 国产av人人夜夜澡人人爽麻豆 | 四虎4hu永久免费 | 国产乱人偷精品人妻a片 | 国产亚洲精品久久久久久国模美 | 高潮毛片无遮挡高清免费 | 国产成人综合在线女婷五月99播放 | 九九热爱视频精品 | 少妇的肉体aa片免费 | 久久久www成人免费毛片 | 亚洲国产精品成人久久蜜臀 | 免费人成网站视频在线观看 | 午夜精品一区二区三区的区别 | 欧美日本日韩 | 2019午夜福利不卡片在线 | 一本久道久久综合狠狠爱 | 波多野结衣一区二区三区av免费 | 无遮挡啪啪摇乳动态图 | 国内丰满熟女出轨videos | 网友自拍区视频精品 | a在线观看免费网站大全 | 性欧美videos高清精品 | 国产艳妇av在线观看果冻传媒 | 蜜桃av抽搐高潮一区二区 | 无码吃奶揉捏奶头高潮视频 | 国产精品二区一区二区aⅴ污介绍 | 青青青手机频在线观看 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲aⅴ无码成人网站国产app | 色 综合 欧美 亚洲 国产 | 亚洲中文字幕va福利 | 亚洲精品一区三区三区在线观看 | 亚洲国产精品一区二区美利坚 | 国产亚洲tv在线观看 | 99久久精品日本一区二区免费 | 国产人妻精品一区二区三区 | 一个人看的www免费视频在线观看 | 精品无码一区二区三区爱欲 | 蜜臀aⅴ国产精品久久久国产老师 | 全黄性性激高免费视频 | 精品国产国产综合精品 | 国产婷婷色一区二区三区在线 | 丰满少妇高潮惨叫视频 | 色婷婷av一区二区三区之红樱桃 | 国产精品高潮呻吟av久久 | 亚洲欧美色中文字幕在线 | 亚洲娇小与黑人巨大交 | 国产精品无码mv在线观看 | 激情内射日本一区二区三区 | 狠狠亚洲超碰狼人久久 | 日产国产精品亚洲系列 | 一本久道久久综合狠狠爱 | 亚洲综合无码久久精品综合 | 樱花草在线社区www | 国产特级毛片aaaaaa高潮流水 | 黑人巨大精品欧美一区二区 | 欧美大屁股xxxxhd黑色 | 精品日本一区二区三区在线观看 | 亚洲国产午夜精品理论片 | 亚洲精品www久久久 | 国产精品第一区揄拍无码 | 无遮无挡爽爽免费视频 | 天堂亚洲2017在线观看 | 无码国产激情在线观看 | 国产激情精品一区二区三区 | 成熟女人特级毛片www免费 | 国产日产欧产精品精品app | 国产办公室秘书无码精品99 | 内射白嫩少妇超碰 | 久久国产精品偷任你爽任你 | 熟女俱乐部五十路六十路av | 亚洲精品午夜无码电影网 | 久久久久人妻一区精品色欧美 | 九九久久精品国产免费看小说 | 无码中文字幕色专区 | 2020久久超碰国产精品最新 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲精品国产a久久久久久 | 色噜噜亚洲男人的天堂 | 精品少妇爆乳无码av无码专区 | 国产成人一区二区三区别 | 国精产品一品二品国精品69xx | 久久亚洲精品中文字幕无男同 | 精品国产一区二区三区四区 | 久久久久久久久888 | 国产肉丝袜在线观看 | 男女爱爱好爽视频免费看 | 久久人人97超碰a片精品 | 天海翼激烈高潮到腰振不止 | 国产免费久久久久久无码 | 丰满少妇高潮惨叫视频 | 大地资源中文第3页 | 国产精品久久国产精品99 | 国产农村妇女高潮大叫 | 学生妹亚洲一区二区 | 亚洲爆乳精品无码一区二区三区 | 精品人妻中文字幕有码在线 | 亚洲伊人久久精品影院 | 乱人伦人妻中文字幕无码久久网 | 少妇高潮一区二区三区99 | 国产办公室秘书无码精品99 | 国语自产偷拍精品视频偷 | 欧美激情综合亚洲一二区 | 99久久人妻精品免费一区 | 激情国产av做激情国产爱 | 天天摸天天透天天添 | 乌克兰少妇xxxx做受 | 超碰97人人做人人爱少妇 | 亚洲a无码综合a国产av中文 | 精品一区二区不卡无码av | 亚洲成av人综合在线观看 | 午夜男女很黄的视频 | 狂野欧美性猛xxxx乱大交 | 97色伦图片97综合影院 | 色综合久久久无码网中文 | 欧美人与牲动交xxxx | 玩弄人妻少妇500系列视频 | 国产亚洲精品精品国产亚洲综合 | 亚洲精品午夜无码电影网 | 内射老妇bbwx0c0ck | 久久www免费人成人片 | 亚洲狠狠色丁香婷婷综合 | 国产一区二区三区四区五区加勒比 | 国产一区二区三区日韩精品 | 国产精品人妻一区二区三区四 | 久久久国产精品无码免费专区 | 国产精品成人av在线观看 | 亚洲成av人影院在线观看 | 亚洲国产一区二区三区在线观看 | 色综合久久久无码网中文 | 中文字幕av伊人av无码av | 天天爽夜夜爽夜夜爽 | 麻豆人妻少妇精品无码专区 | 2020久久超碰国产精品最新 | 免费视频欧美无人区码 | 欧美人与善在线com | 欧美 丝袜 自拍 制服 另类 | 十八禁真人啪啪免费网站 | 国产美女极度色诱视频www | 欧美三级不卡在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 久久久久久国产精品无码下载 | 日韩欧美中文字幕公布 | 少妇无码av无码专区在线观看 | 久久久精品456亚洲影院 | 日韩在线不卡免费视频一区 | 日日碰狠狠躁久久躁蜜桃 | 欧美一区二区三区视频在线观看 | 少女韩国电视剧在线观看完整 | 最近的中文字幕在线看视频 | 欧美日本免费一区二区三区 | 牛和人交xxxx欧美 | 欧美丰满熟妇xxxx性ppx人交 | а√天堂www在线天堂小说 | 日本精品少妇一区二区三区 | a在线观看免费网站大全 | 久久精品人人做人人综合 | 亚洲欧美中文字幕5发布 | 欧美精品一区二区精品久久 | 人妻人人添人妻人人爱 | 无码一区二区三区在线 | 国产精华av午夜在线观看 | 亚洲欧美精品伊人久久 | 国产av无码专区亚洲awww | 国产精品无码久久av | 丰满少妇高潮惨叫视频 | 中文字幕乱码亚洲无线三区 | 图片区 小说区 区 亚洲五月 | 精品无人国产偷自产在线 | 国产精品久久久久7777 | 偷窥日本少妇撒尿chinese | 色欲av亚洲一区无码少妇 | 日本精品人妻无码免费大全 | 少妇性l交大片欧洲热妇乱xxx | 无码成人精品区在线观看 | 欧洲极品少妇 | 中文亚洲成a人片在线观看 | 永久免费观看国产裸体美女 | 荡女精品导航 | 无码任你躁久久久久久久 | 55夜色66夜色国产精品视频 | 精品久久8x国产免费观看 | 亚洲日韩av一区二区三区四区 | 暴力强奷在线播放无码 | 中文字幕色婷婷在线视频 | 无码人妻丰满熟妇区五十路百度 | www国产精品内射老师 | 伊人久久大香线蕉午夜 | 精品人人妻人人澡人人爽人人 | 成人免费无码大片a毛片 | 国产xxx69麻豆国语对白 | 婷婷五月综合缴情在线视频 | 亚洲综合另类小说色区 | 水蜜桃色314在线观看 | 久久国产自偷自偷免费一区调 | 国产va免费精品观看 | 国产亚洲人成a在线v网站 | 免费国产成人高清在线观看网站 | 丝袜 中出 制服 人妻 美腿 | 国产美女极度色诱视频www | 欧洲极品少妇 | 亚洲精品国产精品乱码视色 | 亚洲精品成人福利网站 | 亚洲性无码av中文字幕 | 国产精品久久久久久无码 | 欧美成人免费全部网站 | 少妇性荡欲午夜性开放视频剧场 | 亚洲爆乳大丰满无码专区 | 久久天天躁狠狠躁夜夜免费观看 | 呦交小u女精品视频 | 亚洲欧美国产精品久久 | 成人精品天堂一区二区三区 | 国产亚洲精品久久久久久国模美 | 日本丰满熟妇videos | 国产亚洲日韩欧美另类第八页 | 亚洲国产精品久久久天堂 | 成 人 网 站国产免费观看 | 大肉大捧一进一出视频出来呀 | 国产成人精品视频ⅴa片软件竹菊 | 桃花色综合影院 | 久久精品女人天堂av免费观看 | 99久久精品国产一区二区蜜芽 | 西西人体www44rt大胆高清 | 日本一本二本三区免费 | 亚洲日韩av一区二区三区中文 | 日本熟妇大屁股人妻 | 国精产品一品二品国精品69xx | 国内精品久久毛片一区二区 | 国产农村乱对白刺激视频 | 亚洲欧美综合区丁香五月小说 | 国产成人亚洲综合无码 | 亚洲精品国产品国语在线观看 | 久久午夜无码鲁丝片秋霞 | 亚洲成av人片天堂网无码】 | 精品 日韩 国产 欧美 视频 | 亚洲の无码国产の无码影院 | 亚洲欧美日韩国产精品一区二区 | 亚洲人亚洲人成电影网站色 | 中文字幕精品av一区二区五区 | 久久久久se色偷偷亚洲精品av | 欧美精品一区二区精品久久 | 欧美乱妇无乱码大黄a片 | 人妻互换免费中文字幕 | 澳门永久av免费网站 | 国产明星裸体无码xxxx视频 | 真人与拘做受免费视频 | 欧美日韩视频无码一区二区三 | 妺妺窝人体色www婷婷 | 国产超级va在线观看视频 | 精品一区二区三区无码免费视频 | 欧美精品无码一区二区三区 | 色综合久久88色综合天天 | 免费看男女做好爽好硬视频 | 在线欧美精品一区二区三区 | 欧洲熟妇精品视频 | 国产精品亚洲lv粉色 | 欧美国产日韩久久mv | 国产猛烈高潮尖叫视频免费 | 国产精品久久福利网站 | 福利一区二区三区视频在线观看 | 精品久久久无码中文字幕 | 伊人久久大香线蕉av一区二区 | 午夜精品久久久内射近拍高清 | 丁香花在线影院观看在线播放 | 十八禁视频网站在线观看 | 亚洲一区二区三区含羞草 | 久久久精品国产sm最大网站 | 国产精品久久久久久亚洲毛片 | 国产激情无码一区二区app | 夜夜躁日日躁狠狠久久av | 亚洲一区二区三区国产精华液 | 无套内谢的新婚少妇国语播放 | 日韩欧美群交p片內射中文 | 亚洲熟妇色xxxxx亚洲 | a片免费视频在线观看 | 人妻中文无码久热丝袜 | 日本在线高清不卡免费播放 | 一本色道婷婷久久欧美 | 婷婷综合久久中文字幕蜜桃三电影 | 性欧美熟妇videofreesex | 最新版天堂资源中文官网 | 丰满少妇女裸体bbw | 精品久久8x国产免费观看 | 性史性农村dvd毛片 | 激情亚洲一区国产精品 | 国产激情无码一区二区 | 亚洲成a人片在线观看无码3d | 大地资源中文第3页 | 伊人久久婷婷五月综合97色 | 十八禁真人啪啪免费网站 | 欧美人与物videos另类 | 人人妻人人藻人人爽欧美一区 | 亚洲啪av永久无码精品放毛片 | 99麻豆久久久国产精品免费 | 中文毛片无遮挡高清免费 | 国产麻豆精品精东影业av网站 | 日本护士xxxxhd少妇 | 国产人妻精品一区二区三区 | 午夜性刺激在线视频免费 | 国语精品一区二区三区 | 亚洲色欲久久久综合网东京热 | 精品国产成人一区二区三区 | 成人精品视频一区二区 | 亚洲乱亚洲乱妇50p | 亚洲欧洲中文日韩av乱码 | 欧美黑人性暴力猛交喷水 | 大地资源网第二页免费观看 | 色狠狠av一区二区三区 | 真人与拘做受免费视频 | 亚洲男女内射在线播放 | 亚洲欧美综合区丁香五月小说 | 波多野结衣一区二区三区av免费 | 欧美熟妇另类久久久久久多毛 | 男女性色大片免费网站 | 久久99精品久久久久久 | 久久精品国产亚洲精品 | 欧美激情综合亚洲一二区 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品国偷拍自产在线麻豆 | 熟女俱乐部五十路六十路av | 久久亚洲中文字幕精品一区 | 国产亚洲美女精品久久久2020 | 国产人妻精品一区二区三区不卡 | 乌克兰少妇xxxx做受 | 99视频精品全部免费免费观看 | 久久人人爽人人人人片 | 狠狠色色综合网站 | 天天拍夜夜添久久精品 | 在线精品亚洲一区二区 | 中文字幕久久久久人妻 | 精品国产成人一区二区三区 | 亚洲熟悉妇女xxx妇女av | 一二三四在线观看免费视频 | 国产超碰人人爽人人做人人添 | 久久97精品久久久久久久不卡 | 亚洲区小说区激情区图片区 | 免费无码一区二区三区蜜桃大 | 久久久久久久久888 | 国产激情艳情在线看视频 | 性啪啪chinese东北女人 | 亚洲日韩中文字幕在线播放 | 国产精品美女久久久 | 无码毛片视频一区二区本码 | 国产绳艺sm调教室论坛 | 一本大道伊人av久久综合 | 熟妇人妻激情偷爽文 | 久久99精品久久久久婷婷 | 亚洲区小说区激情区图片区 | 日韩少妇内射免费播放 | 午夜不卡av免费 一本久久a久久精品vr综合 | 乱码av麻豆丝袜熟女系列 | 综合网日日天干夜夜久久 | 国产偷抇久久精品a片69 | 久久www免费人成人片 | 扒开双腿疯狂进出爽爽爽视频 | 四十如虎的丰满熟妇啪啪 | 欧美黑人巨大xxxxx | 99久久精品无码一区二区毛片 | 真人与拘做受免费视频 | 国产精品亚洲一区二区三区喷水 | 国产免费久久精品国产传媒 | 国产内射爽爽大片视频社区在线 | 欧美丰满少妇xxxx性 | 男女猛烈xx00免费视频试看 | 日本精品少妇一区二区三区 | 欧美黑人性暴力猛交喷水 | 美女极度色诱视频国产 | 久久综合网欧美色妞网 | 日韩成人一区二区三区在线观看 | 中文字幕无线码 | 亚洲男女内射在线播放 | 亚洲欧洲中文日韩av乱码 | 未满小14洗澡无码视频网站 | 国产97色在线 | 免 | 久久久中文久久久无码 | 又湿又紧又大又爽a视频国产 | 熟妇女人妻丰满少妇中文字幕 | 在线视频网站www色 | 青青久在线视频免费观看 | 性欧美熟妇videofreesex | 精品人妻人人做人人爽夜夜爽 | 国产午夜福利亚洲第一 | 男人和女人高潮免费网站 | 日本丰满护士爆乳xxxx | 国产人妻精品一区二区三区不卡 | 欧美 日韩 人妻 高清 中文 | 欧美精品国产综合久久 | 中文无码成人免费视频在线观看 | 三上悠亚人妻中文字幕在线 | 国内精品一区二区三区不卡 | 99视频精品全部免费免费观看 | 国产精品无码一区二区桃花视频 | 国产成人精品久久亚洲高清不卡 | 色婷婷久久一区二区三区麻豆 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 永久黄网站色视频免费直播 | 久久99精品国产.久久久久 | 国产亚洲精品久久久久久大师 | 国产精品内射视频免费 | 色综合久久久无码网中文 | 在线播放无码字幕亚洲 | 鲁鲁鲁爽爽爽在线视频观看 | 中文字幕无码热在线视频 | 精品无码一区二区三区的天堂 | 国产精品丝袜黑色高跟鞋 | 成 人 网 站国产免费观看 | 美女黄网站人色视频免费国产 | 真人与拘做受免费视频 | 中文字幕+乱码+中文字幕一区 | 日韩av无码一区二区三区 | 国产人妻人伦精品 | 中文字幕中文有码在线 | 秋霞特色aa大片 | 国产成人一区二区三区在线观看 | av在线亚洲欧洲日产一区二区 | 国产三级精品三级男人的天堂 | 在线精品亚洲一区二区 | 伊人久久大香线蕉av一区二区 | 久久精品一区二区三区四区 | 国产香蕉97碰碰久久人人 | 波多野42部无码喷潮在线 | 国产精品久久久久久亚洲影视内衣 | 无码一区二区三区在线 | 亚洲欧美日韩成人高清在线一区 | 两性色午夜视频免费播放 | 沈阳熟女露脸对白视频 | 亚洲成av人片在线观看无码不卡 | 天天拍夜夜添久久精品大 | 国产成人精品优优av | 日本一区二区三区免费高清 | 国产午夜亚洲精品不卡 | 亚洲一区二区三区在线观看网站 | 一本久久a久久精品亚洲 | 日产精品高潮呻吟av久久 | 久久天天躁狠狠躁夜夜免费观看 | 成人免费无码大片a毛片 | 老子影院午夜精品无码 | 在线视频网站www色 | 亚洲精品中文字幕久久久久 | 国产三级精品三级男人的天堂 | 精品国产一区二区三区四区在线看 | 在线播放免费人成毛片乱码 | 色欲av亚洲一区无码少妇 | 亚洲中文字幕va福利 | 性做久久久久久久久 | 台湾无码一区二区 | 国产69精品久久久久app下载 | 骚片av蜜桃精品一区 | 天堂久久天堂av色综合 | 成人免费无码大片a毛片 | 国产精品无码一区二区桃花视频 | 亚洲中文字幕成人无码 | 一个人看的www免费视频在线观看 | 日本护士xxxxhd少妇 | 蜜臀av无码人妻精品 | 亚洲熟妇色xxxxx欧美老妇y | 无码国产乱人伦偷精品视频 | 丰满少妇高潮惨叫视频 | 国产精品久久福利网站 | 久久精品人人做人人综合试看 | 亚拍精品一区二区三区探花 | 国产精品va在线观看无码 | 日本精品高清一区二区 | 在线欧美精品一区二区三区 | 国产精品久免费的黄网站 | 精品久久久无码人妻字幂 | 色综合久久久久综合一本到桃花网 | 久久成人a毛片免费观看网站 | 乱人伦人妻中文字幕无码 | 大肉大捧一进一出好爽视频 | 国产精品免费大片 | 天堂а√在线中文在线 | 又色又爽又黄的美女裸体网站 | 亚洲国产精品无码一区二区三区 | 久久精品国产亚洲精品 | 欧美日韩在线亚洲综合国产人 | 99久久无码一区人妻 | 天海翼激烈高潮到腰振不止 | 国产小呦泬泬99精品 | 久久久精品欧美一区二区免费 | 亚洲七七久久桃花影院 | 亚洲精品中文字幕久久久久 | 俺去俺来也www色官网 | 天堂а√在线中文在线 | 国产凸凹视频一区二区 | 人妻体内射精一区二区三四 | 给我免费的视频在线观看 | 欧美刺激性大交 | 性开放的女人aaa片 | 国产99久久精品一区二区 | 精品亚洲成av人在线观看 | 国产亚洲欧美日韩亚洲中文色 | 好男人社区资源 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 蜜桃臀无码内射一区二区三区 | 午夜成人1000部免费视频 | 久久久久亚洲精品中文字幕 | 一区二区传媒有限公司 | 国产超碰人人爽人人做人人添 | 欧美日韩一区二区综合 | 精品国产麻豆免费人成网站 | 国产精品国产三级国产专播 | 久久伊人色av天堂九九小黄鸭 | 成人精品视频一区二区三区尤物 | 妺妺窝人体色www婷婷 | 中文无码伦av中文字幕 | 中文字幕人成乱码熟女app | 又黄又爽又色的视频 | 伊在人天堂亚洲香蕉精品区 | 久久久久国色av免费观看性色 | 亚洲日本一区二区三区在线 | 67194成是人免费无码 | a国产一区二区免费入口 | 在线观看欧美一区二区三区 | 亚洲欧美综合区丁香五月小说 | 亚洲午夜无码久久 | 国产69精品久久久久app下载 | 最新国产乱人伦偷精品免费网站 | 一个人免费观看的www视频 | 无码福利日韩神码福利片 | 国产美女精品一区二区三区 | 丁香啪啪综合成人亚洲 | 国内精品久久毛片一区二区 | 老太婆性杂交欧美肥老太 | 欧美刺激性大交 | 色狠狠av一区二区三区 | 亚洲国产精品无码久久久久高潮 | 亚洲精品午夜无码电影网 | 欧美精品一区二区精品久久 | 亚洲爆乳无码专区 | 一区二区三区高清视频一 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 婷婷色婷婷开心五月四房播播 | 成人欧美一区二区三区黑人免费 | 欧美日韩色另类综合 | 中文无码精品a∨在线观看不卡 | 亚洲第一无码av无码专区 | 精品厕所偷拍各类美女tp嘘嘘 | 精品久久久久香蕉网 | 亚洲啪av永久无码精品放毛片 | 亚洲欧美国产精品久久 | 国产9 9在线 | 中文 | 日本精品人妻无码免费大全 | 国产精品久久国产三级国 | 亚洲人成网站色7799 | 日日夜夜撸啊撸 | 久久亚洲中文字幕无码 | 日韩成人一区二区三区在线观看 | 国产成人综合美国十次 | 97人妻精品一区二区三区 | 欧洲精品码一区二区三区免费看 | 国产欧美精品一区二区三区 | 国产性生交xxxxx无码 | 无码午夜成人1000部免费视频 | 99久久婷婷国产综合精品青草免费 | 国产后入清纯学生妹 | 青青草原综合久久大伊人精品 | 国产亚洲欧美日韩亚洲中文色 | 秋霞特色aa大片 | 久久99热只有频精品8 | 精品国产aⅴ无码一区二区 | 亚洲精品午夜无码电影网 | 亚洲精品一区三区三区在线观看 | 女人被爽到呻吟gif动态图视看 | 伊人久久大香线蕉亚洲 | 国产午夜精品一区二区三区嫩草 | 图片区 小说区 区 亚洲五月 | 无码人妻出轨黑人中文字幕 | 午夜成人1000部免费视频 | 日韩精品a片一区二区三区妖精 | 131美女爱做视频 | 亚洲区欧美区综合区自拍区 | 成人亚洲精品久久久久软件 | 老熟女重囗味hdxx69 | 日本成熟视频免费视频 | 欧美精品免费观看二区 | 国产在线aaa片一区二区99 | 欧美精品国产综合久久 | 久久亚洲精品成人无码 | 亚洲一区av无码专区在线观看 | 超碰97人人做人人爱少妇 | 麻豆md0077饥渴少妇 | 亚洲爆乳无码专区 | 精品久久久无码中文字幕 | 亚洲精品欧美二区三区中文字幕 | 国产婷婷色一区二区三区在线 | 欧美精品一区二区精品久久 | 少妇被黑人到高潮喷出白浆 | 波多野结衣av一区二区全免费观看 | 国产激情艳情在线看视频 | 日日橹狠狠爱欧美视频 | 日韩人妻无码一区二区三区久久99 | 牲交欧美兽交欧美 | 人妻插b视频一区二区三区 | 在线观看欧美一区二区三区 | 狠狠躁日日躁夜夜躁2020 | 欧美国产亚洲日韩在线二区 | 中文字幕 亚洲精品 第1页 | 黑人大群体交免费视频 | 人人妻人人澡人人爽欧美精品 | 精品无人区无码乱码毛片国产 | 熟女少妇在线视频播放 | 精品久久久中文字幕人妻 | 高中生自慰www网站 | 鲁大师影院在线观看 | 色 综合 欧美 亚洲 国产 | 久久99精品久久久久久动态图 | 久久国语露脸国产精品电影 | 少妇无码av无码专区在线观看 | 欧美日韩一区二区综合 | 国产成人精品视频ⅴa片软件竹菊 | 国产真人无遮挡作爱免费视频 | 亚洲毛片av日韩av无码 | 国产精品永久免费视频 | 丰满人妻被黑人猛烈进入 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美人与禽猛交狂配 | 在线а√天堂中文官网 | 美女张开腿让人桶 | 国产成人无码专区 | 无码国内精品人妻少妇 | 丝袜人妻一区二区三区 | 国内少妇偷人精品视频 | 强伦人妻一区二区三区视频18 | 日韩av无码一区二区三区 | 国产97色在线 | 免 | 中文字幕无码av波多野吉衣 | 99麻豆久久久国产精品免费 | 97无码免费人妻超级碰碰夜夜 | 国产成人精品久久亚洲高清不卡 | 中文字幕 人妻熟女 | 国产精品久久精品三级 | 亚洲天堂2017无码 | 国产口爆吞精在线视频 | 久久国产精品偷任你爽任你 | 国产精品亚洲一区二区三区喷水 | 99久久精品无码一区二区毛片 | 亚洲熟悉妇女xxx妇女av | 宝宝好涨水快流出来免费视频 | 国语精品一区二区三区 | 亚洲欧洲日本综合aⅴ在线 | 国产又粗又硬又大爽黄老大爷视 | 欧美熟妇另类久久久久久不卡 | 久久精品一区二区三区四区 | 欧美成人高清在线播放 | 成 人影片 免费观看 | 亚洲国产精品成人久久蜜臀 | 久久精品中文字幕大胸 | 水蜜桃亚洲一二三四在线 | 国产精品香蕉在线观看 | 亚洲爆乳大丰满无码专区 | 精品无码国产一区二区三区av | 午夜不卡av免费 一本久久a久久精品vr综合 | 久久午夜夜伦鲁鲁片无码免费 | 欧美午夜特黄aaaaaa片 | 成人精品视频一区二区 | 日本饥渴人妻欲求不满 | 偷窥日本少妇撒尿chinese | 无码乱肉视频免费大全合集 | 无码吃奶揉捏奶头高潮视频 | 久久综合狠狠综合久久综合88 | 大肉大捧一进一出好爽视频 | 欧洲vodafone精品性 | 欧美一区二区三区视频在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久精品中文字幕大胸 | 久久久精品456亚洲影院 | 18禁止看的免费污网站 | 大胆欧美熟妇xx | 噜噜噜亚洲色成人网站 | 久久亚洲中文字幕无码 | 久久综合激激的五月天 | 亚洲中文字幕乱码av波多ji | 国产精品国产三级国产专播 | 欧美性生交xxxxx久久久 | 亚洲中文字幕无码中字 | 免费国产黄网站在线观看 | 成人免费视频视频在线观看 免费 | 国产精品美女久久久久av爽李琼 | 老熟女重囗味hdxx69 | 免费观看的无遮挡av | 99久久人妻精品免费一区 | 国产人妻精品午夜福利免费 | 久久亚洲日韩精品一区二区三区 | 中文字幕无码av波多野吉衣 | 捆绑白丝粉色jk震动捧喷白浆 | 久久精品女人天堂av免费观看 | 欧美黑人巨大xxxxx | 中文字幕人妻无码一区二区三区 | 国产偷抇久久精品a片69 | 亚洲色欲色欲天天天www | 狂野欧美性猛交免费视频 | 18禁黄网站男男禁片免费观看 | 国产深夜福利视频在线 | 久久精品中文字幕一区 | 狠狠cao日日穞夜夜穞av | 纯爱无遮挡h肉动漫在线播放 | 日本在线高清不卡免费播放 | 无码播放一区二区三区 | 亚洲国产综合无码一区 | 免费国产成人高清在线观看网站 | 帮老师解开蕾丝奶罩吸乳网站 | 国产亚洲精品久久久久久大师 | 无码国模国产在线观看 | 无码国产色欲xxxxx视频 | 国产国产精品人在线视 | 7777奇米四色成人眼影 | 丝袜足控一区二区三区 | 久久婷婷五月综合色国产香蕉 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品无码国产自产拍在线观看蜜 | 噜噜噜亚洲色成人网站 | 久久亚洲中文字幕无码 | 久久成人a毛片免费观看网站 | 亚洲国产精品美女久久久久 | 国产乱人无码伦av在线a | 日本xxxx色视频在线观看免费 | 又紧又大又爽精品一区二区 | 亚洲自偷精品视频自拍 | 成熟女人特级毛片www免费 | 日韩av无码一区二区三区不卡 | 国产深夜福利视频在线 | 国产精品99久久精品爆乳 | 永久免费观看国产裸体美女 | 丰满人妻被黑人猛烈进入 | 99久久人妻精品免费二区 | 国产成人精品必看 | 婷婷综合久久中文字幕蜜桃三电影 | 色窝窝无码一区二区三区色欲 | ass日本丰满熟妇pics | 国产亚洲人成a在线v网站 | 亚洲欧美精品伊人久久 | 啦啦啦www在线观看免费视频 | 乱中年女人伦av三区 | 中文字幕 亚洲精品 第1页 | 日日噜噜噜噜夜夜爽亚洲精品 | 性生交片免费无码看人 | 一本久道久久综合婷婷五月 | 久久综合给合久久狠狠狠97色 | 波多野结衣乳巨码无在线观看 | 天堂а√在线中文在线 | 精品一区二区不卡无码av | 精品无码国产一区二区三区av | 丰满人妻一区二区三区免费视频 | 久久久久亚洲精品男人的天堂 | 中文字幕人妻丝袜二区 | 午夜熟女插插xx免费视频 | 女人和拘做爰正片视频 | 内射后入在线观看一区 | 久久成人a毛片免费观看网站 | 久久久久免费看成人影片 | 日韩人妻无码中文字幕视频 | 亚洲成a人片在线观看无码3d | 国产精品美女久久久网av | 国产香蕉尹人视频在线 | 国产黄在线观看免费观看不卡 | 亚洲一区二区观看播放 | 国产成人无码区免费内射一片色欲 | 久久精品人妻少妇一区二区三区 | 日韩欧美群交p片內射中文 | 中文字幕乱妇无码av在线 | 欧美猛少妇色xxxxx | 久久久久成人精品免费播放动漫 | 超碰97人人做人人爱少妇 | 久久天天躁夜夜躁狠狠 | 丰满人妻精品国产99aⅴ | 亚洲а∨天堂久久精品2021 | 日日夜夜撸啊撸 | 久久人人97超碰a片精品 | 色综合久久久无码中文字幕 | 国产情侣作爱视频免费观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 成年美女黄网站色大免费全看 | 亚洲精品久久久久久久久久久 | 99久久久无码国产aaa精品 | 黑人粗大猛烈进出高潮视频 | 国产精品视频免费播放 | 国产成人综合在线女婷五月99播放 | 亚洲日本va午夜在线电影 | 国产av无码专区亚洲a∨毛片 | 最新国产麻豆aⅴ精品无码 | 亚洲熟妇色xxxxx欧美老妇 | 无码国内精品人妻少妇 | 东京热无码av男人的天堂 | 亚洲а∨天堂久久精品2021 | 中文字幕中文有码在线 | 午夜福利试看120秒体验区 | 樱花草在线社区www | 国产精品人人爽人人做我的可爱 | 日本va欧美va欧美va精品 | 成人性做爰aaa片免费看 | 亚洲色偷偷偷综合网 | 中国女人内谢69xxxxxa片 | 亚洲国产精品久久久天堂 | 久久精品国产一区二区三区肥胖 | 免费无码av一区二区 | 亚洲成av人片在线观看无码不卡 | 亚洲va中文字幕无码久久不卡 | 爽爽影院免费观看 | 久久久国产一区二区三区 | 亚洲欧美日韩国产精品一区二区 | 亚洲 a v无 码免 费 成 人 a v | 国产免费久久久久久无码 | 无码午夜成人1000部免费视频 | 亚洲精品中文字幕 | 青青青手机频在线观看 | 亚洲精品久久久久avwww潮水 | 无码一区二区三区在线观看 | 久久国产精品二国产精品 | 国产精品永久免费视频 | 欧美熟妇另类久久久久久不卡 | 天堂久久天堂av色综合 | 少妇人妻偷人精品无码视频 | 99久久精品午夜一区二区 | 俄罗斯老熟妇色xxxx | 无码国产乱人伦偷精品视频 | 西西人体www44rt大胆高清 | 奇米影视7777久久精品 | 妺妺窝人体色www婷婷 | 国产人妻大战黑人第1集 | 最近的中文字幕在线看视频 | 国产黑色丝袜在线播放 | 国产片av国语在线观看 | 成人片黄网站色大片免费观看 | 人妻天天爽夜夜爽一区二区 | 狠狠噜狠狠狠狠丁香五月 | 国产精品久久久一区二区三区 | 亚洲综合精品香蕉久久网 | www成人国产高清内射 | 无码国产激情在线观看 | 人妻体内射精一区二区三四 | 亚洲欧美综合区丁香五月小说 | 久久99精品久久久久久动态图 | 色噜噜亚洲男人的天堂 | 国产特级毛片aaaaaaa高清 | 一个人看的www免费视频在线观看 | 国产免费无码一区二区视频 | 国产精品久久久久9999小说 | 欧美激情一区二区三区成人 | 亚洲色大成网站www | 日本一区二区更新不卡 | 性欧美熟妇videofreesex | 成人性做爰aaa片免费看不忠 | 国产精品99久久精品爆乳 | 亚洲熟妇色xxxxx欧美老妇 | 久久亚洲中文字幕精品一区 | 性欧美大战久久久久久久 | 大地资源中文第3页 | 国产特级毛片aaaaaa高潮流水 | 欧美精品国产综合久久 | 中文字幕无码热在线视频 | 丰满少妇高潮惨叫视频 | 真人与拘做受免费视频 | 国产极品美女高潮无套在线观看 | 一本久道久久综合婷婷五月 | 精品久久久久久亚洲精品 | 久久99精品久久久久久动态图 | 成人欧美一区二区三区黑人免费 | 精品一区二区三区无码免费视频 | 在线а√天堂中文官网 | 免费观看黄网站 | 亚洲精品鲁一鲁一区二区三区 | 99久久人妻精品免费二区 | 国产乡下妇女做爰 | 亚洲成a人一区二区三区 | 天天躁日日躁狠狠躁免费麻豆 | 久久午夜无码鲁丝片秋霞 | 日本在线高清不卡免费播放 | 午夜精品一区二区三区的区别 | 一本色道久久综合亚洲精品不卡 | 大乳丰满人妻中文字幕日本 | 午夜无码人妻av大片色欲 | 伊人久久婷婷五月综合97色 | 欧美国产亚洲日韩在线二区 | 日本护士xxxxhd少妇 | 97夜夜澡人人双人人人喊 | 久久久久亚洲精品中文字幕 | 欧美日韩视频无码一区二区三 | 女人高潮内射99精品 | 亚洲无人区一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 在线 国产 欧美 亚洲 天堂 | 成熟女人特级毛片www免费 | 国产成人久久精品流白浆 | 在教室伦流澡到高潮hnp视频 | 国产成人一区二区三区在线观看 | 久久精品人人做人人综合试看 | 久久久久久久人妻无码中文字幕爆 | 国产激情精品一区二区三区 | 久久www免费人成人片 | 成人性做爰aaa片免费看 | 中文久久乱码一区二区 | 女人和拘做爰正片视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 中文字幕乱码人妻二区三区 | 国产在线精品一区二区三区直播 | 清纯唯美经典一区二区 | 久久精品国产亚洲精品 | 久久久久免费看成人影片 | 欧美日韩一区二区三区自拍 | а√天堂www在线天堂小说 | 曰本女人与公拘交酡免费视频 | 乱人伦人妻中文字幕无码久久网 | 日本www一道久久久免费榴莲 | 久久精品国产99久久6动漫 | 日日摸日日碰夜夜爽av | 小鲜肉自慰网站xnxx | 日本在线高清不卡免费播放 | 福利一区二区三区视频在线观看 | 久久精品中文字幕一区 | 无套内谢的新婚少妇国语播放 | 成熟女人特级毛片www免费 | 亚洲一区二区三区无码久久 | 亚洲精品www久久久 | 麻豆国产人妻欲求不满 | 免费无码的av片在线观看 | 狠狠色欧美亚洲狠狠色www | 久激情内射婷内射蜜桃人妖 | 国内少妇偷人精品视频 | 中国大陆精品视频xxxx | 精品国产青草久久久久福利 | 天堂а√在线地址中文在线 | 成人免费视频一区二区 | 四虎影视成人永久免费观看视频 | 亚洲欧洲日本无在线码 | 国内少妇偷人精品视频 | 日韩少妇内射免费播放 | 日日躁夜夜躁狠狠躁 | 人人爽人人爽人人片av亚洲 | 国产精品自产拍在线观看 | 日日碰狠狠丁香久燥 | 亚洲人成网站免费播放 | 18禁黄网站男男禁片免费观看 | 欧美亚洲日韩国产人成在线播放 | 国内精品一区二区三区不卡 | 国精产品一品二品国精品69xx | 国产艳妇av在线观看果冻传媒 | 色婷婷av一区二区三区之红樱桃 | 少妇性俱乐部纵欲狂欢电影 | 亚洲s色大片在线观看 | 国产成人午夜福利在线播放 | 亚洲精品国产a久久久久久 | 亚洲自偷精品视频自拍 | 麻豆国产人妻欲求不满谁演的 | 丰满人妻翻云覆雨呻吟视频 | 婷婷综合久久中文字幕蜜桃三电影 | 一本一道久久综合久久 | 亚洲日韩乱码中文无码蜜桃臀网站 | 又黄又爽又色的视频 | 亚洲 a v无 码免 费 成 人 a v | 日韩精品无码一本二本三本色 | 黄网在线观看免费网站 | 国产精品人人妻人人爽 | 亚洲热妇无码av在线播放 | 国产av久久久久精东av | 日韩精品一区二区av在线 | 成熟妇人a片免费看网站 | 国产在线aaa片一区二区99 | 麻豆md0077饥渴少妇 | 亚洲国产欧美国产综合一区 | 亚洲中文字幕无码一久久区 | 久久久久免费精品国产 | 老太婆性杂交欧美肥老太 | 欧美三级a做爰在线观看 | 国产艳妇av在线观看果冻传媒 | 熟妇女人妻丰满少妇中文字幕 | 日韩精品一区二区av在线 | 性色欲情网站iwww九文堂 | 精品乱码久久久久久久 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 成人精品视频一区二区 | 强伦人妻一区二区三区视频18 | 国产av无码专区亚洲awww | 红桃av一区二区三区在线无码av | 男女下面进入的视频免费午夜 | 青春草在线视频免费观看 | 人人妻人人澡人人爽欧美一区九九 | 国产suv精品一区二区五 | 麻豆果冻传媒2021精品传媒一区下载 | 色婷婷香蕉在线一区二区 | 国产人妻人伦精品 | 精品夜夜澡人妻无码av蜜桃 | 精品国产麻豆免费人成网站 | 亚洲aⅴ无码成人网站国产app | 无码av中文字幕免费放 | 国产亚洲精品久久久久久 | 黑人巨大精品欧美黑寡妇 | 玩弄人妻少妇500系列视频 | 亚洲日韩一区二区 | 中文字幕乱码中文乱码51精品 | 国产人妖乱国产精品人妖 | 丰满少妇人妻久久久久久 | 亚洲精品一区二区三区婷婷月 | 久久99精品国产麻豆 | 久久人人爽人人人人片 | 少妇太爽了在线观看 | 国产又爽又猛又粗的视频a片 | 久久久久久av无码免费看大片 | 国产精品igao视频网 | 麻豆md0077饥渴少妇 | 日韩人妻无码中文字幕视频 | 成人精品视频一区二区 | 久久久久av无码免费网 | 亚洲成熟女人毛毛耸耸多 | 国产成人精品一区二区在线小狼 | a在线观看免费网站大全 | 美女扒开屁股让男人桶 | 日本又色又爽又黄的a片18禁 | 精品夜夜澡人妻无码av蜜桃 | 色婷婷久久一区二区三区麻豆 | 97久久精品无码一区二区 | 在线播放免费人成毛片乱码 | 免费国产成人高清在线观看网站 | 亚洲精品国产品国语在线观看 | 国产成人一区二区三区在线观看 | 亚洲欧美日韩综合久久久 | 成人欧美一区二区三区 | 超碰97人人射妻 | 四虎影视成人永久免费观看视频 | 色情久久久av熟女人妻网站 | 综合人妻久久一区二区精品 | 99国产精品白浆在线观看免费 | 国语精品一区二区三区 | 成人片黄网站色大片免费观看 | 国产另类ts人妖一区二区 | 熟女体下毛毛黑森林 | 亚洲自偷精品视频自拍 | 国产精品亚洲五月天高清 | 爱做久久久久久 | 中文字幕无码av激情不卡 | 国产激情无码一区二区 | 中国大陆精品视频xxxx | 国产av一区二区精品久久凹凸 | 无码av最新清无码专区吞精 | 青草视频在线播放 | 妺妺窝人体色www婷婷 | 国产成人精品必看 | 麻豆国产人妻欲求不满谁演的 | 成人无码视频免费播放 | 国产成人无码av一区二区 | 女人高潮内射99精品 | 国产精品-区区久久久狼 | 色偷偷人人澡人人爽人人模 | 日本xxxx色视频在线观看免费 | 精品久久久久久人妻无码中文字幕 | 国产va免费精品观看 | 一个人免费观看的www视频 | 少妇人妻偷人精品无码视频 | 999久久久国产精品消防器材 | 国产乱人伦偷精品视频 | 国产在线一区二区三区四区五区 | 亚洲爆乳精品无码一区二区三区 | 成人精品天堂一区二区三区 | 亚洲一区二区三区含羞草 | 乱人伦人妻中文字幕无码久久网 | 55夜色66夜色国产精品视频 | 日本一卡二卡不卡视频查询 | 亚洲国产精品无码久久久久高潮 | 亚洲精品欧美二区三区中文字幕 | 日本免费一区二区三区最新 | 粉嫩少妇内射浓精videos | 久久久精品人妻久久影视 | 欧洲极品少妇 | 精品国偷自产在线视频 | 少妇无套内谢久久久久 | 伊人久久婷婷五月综合97色 | 97资源共享在线视频 | 色爱情人网站 | 妺妺窝人体色www婷婷 | 免费观看的无遮挡av | 亚洲高清偷拍一区二区三区 | 一本大道久久东京热无码av | 国产成人人人97超碰超爽8 | 欧美 亚洲 国产 另类 | 亲嘴扒胸摸屁股激烈网站 | 无码av最新清无码专区吞精 | 亚洲理论电影在线观看 | 伊在人天堂亚洲香蕉精品区 | 97资源共享在线视频 | 高中生自慰www网站 | 男女性色大片免费网站 | 性欧美牲交xxxxx视频 | 国产精品久久久久无码av色戒 | 国产精品无码一区二区桃花视频 | 爆乳一区二区三区无码 | 色窝窝无码一区二区三区色欲 | 精品一区二区三区波多野结衣 | 国产无套内射久久久国产 | 久9re热视频这里只有精品 | 欧美性猛交内射兽交老熟妇 | 乱码av麻豆丝袜熟女系列 | 300部国产真实乱 | 日本熟妇大屁股人妻 | 亚洲中文字幕av在天堂 | 亚洲成a人片在线观看无码3d | 青青青手机频在线观看 | 国内精品久久久久久中文字幕 | 精品国产一区二区三区四区 | 搡女人真爽免费视频大全 | 中文字幕无码免费久久99 | 午夜时刻免费入口 | aⅴ亚洲 日韩 色 图网站 播放 | 国产欧美熟妇另类久久久 | 性生交大片免费看女人按摩摩 | 色欲久久久天天天综合网精品 | 久久精品国产亚洲精品 | 国产一区二区三区四区五区加勒比 | 日韩无码专区 | 精品午夜福利在线观看 | 久久久久久国产精品无码下载 | 中文字幕乱码人妻二区三区 | 欧美黑人性暴力猛交喷水 | 国产av无码专区亚洲awww | 国产精品毛片一区二区 | 俄罗斯老熟妇色xxxx | 日韩精品一区二区av在线 | 国产精品久久国产精品99 | 国产精品亚洲а∨无码播放麻豆 | 久久97精品久久久久久久不卡 | 欧美国产日韩久久mv | 国产乱人伦偷精品视频 | 久久久久久a亚洲欧洲av冫 | 任你躁国产自任一区二区三区 | 久久亚洲日韩精品一区二区三区 | 亚洲熟妇色xxxxx欧美老妇y | 精品aⅴ一区二区三区 | 999久久久国产精品消防器材 | 日日躁夜夜躁狠狠躁 | 狂野欧美激情性xxxx | 精品乱子伦一区二区三区 | 内射巨臀欧美在线视频 | 亚洲日本va中文字幕 | 性生交片免费无码看人 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 日韩欧美中文字幕在线三区 | 久久久久国色av免费观看性色 | 丰满人妻被黑人猛烈进入 | 成人综合网亚洲伊人 | 国产精品人人爽人人做我的可爱 | ass日本丰满熟妇pics | 少妇激情av一区二区 | 黑人巨大精品欧美黑寡妇 | 日韩精品无码一区二区中文字幕 | 图片小说视频一区二区 | 波多野结衣aⅴ在线 | 亚洲国精产品一二二线 | 国内精品久久毛片一区二区 | 在线观看国产午夜福利片 | 国产精品国产三级国产专播 | 99久久精品无码一区二区毛片 | 青草青草久热国产精品 | 久久午夜夜伦鲁鲁片无码免费 | 久久97精品久久久久久久不卡 | 日本高清一区免费中文视频 | 狠狠色欧美亚洲狠狠色www | 中国女人内谢69xxxx | 日韩av无码一区二区三区不卡 | 欧美 日韩 亚洲 在线 | 色老头在线一区二区三区 | 男人的天堂av网站 | 性生交大片免费看l | 性色欲网站人妻丰满中文久久不卡 | 欧美性色19p | 少妇的肉体aa片免费 | 亚洲国产一区二区三区在线观看 | 国产精品亚洲专区无码不卡 | 欧美日本精品一区二区三区 | 亚洲国产成人av在线观看 | 麻豆国产97在线 | 欧洲 | 97se亚洲精品一区 | 男女作爱免费网站 | 精品国产国产综合精品 | 一本大道伊人av久久综合 | 亚洲中文字幕久久无码 | 日本一区二区更新不卡 | 久久www免费人成人片 | 国内老熟妇对白xxxxhd | 亚洲s码欧洲m码国产av | 无码免费一区二区三区 | 国产麻豆精品一区二区三区v视界 | 精品国产一区二区三区四区在线看 | 中文字幕亚洲情99在线 | 精品一区二区三区无码免费视频 | 日产精品高潮呻吟av久久 | 日本va欧美va欧美va精品 | 亚洲中文字幕无码中文字在线 | 国产无av码在线观看 | 中文字幕无码免费久久99 | 人妻少妇精品久久 | 天天摸天天碰天天添 | www国产亚洲精品久久久日本 | 国产福利视频一区二区 | 成人一区二区免费视频 | 国产成人精品三级麻豆 | 真人与拘做受免费视频 | 欧美熟妇另类久久久久久多毛 | 人妻aⅴ无码一区二区三区 | 国产精品嫩草久久久久 | 久久无码人妻影院 | 精品水蜜桃久久久久久久 | 97久久国产亚洲精品超碰热 | 国产三级精品三级男人的天堂 | 亚洲aⅴ无码成人网站国产app | 亚洲自偷自偷在线制服 | 国产9 9在线 | 中文 | 天下第一社区视频www日本 | 亚洲国产高清在线观看视频 | 亚洲成在人网站无码天堂 | 又紧又大又爽精品一区二区 | 天堂а√在线地址中文在线 | 国内精品一区二区三区不卡 | 国产熟女一区二区三区四区五区 | 无码免费一区二区三区 | 久久无码专区国产精品s | 国产黑色丝袜在线播放 | 色综合久久中文娱乐网 | 亚洲国产av精品一区二区蜜芽 | 狠狠躁日日躁夜夜躁2020 | 精品无人区无码乱码毛片国产 | 欧美日韩亚洲国产精品 | 女人高潮内射99精品 | 国产免费观看黄av片 | 久久国产精品二国产精品 | 丰满少妇高潮惨叫视频 | 欧美 日韩 亚洲 在线 | 成人欧美一区二区三区黑人免费 | 极品尤物被啪到呻吟喷水 | 少妇无码一区二区二三区 | 日产精品99久久久久久 | 偷窥日本少妇撒尿chinese | 国内精品人妻无码久久久影院蜜桃 | 伊在人天堂亚洲香蕉精品区 | 永久免费观看美女裸体的网站 | 小鲜肉自慰网站xnxx | 奇米影视7777久久精品人人爽 | 久久精品中文闷骚内射 | 性欧美熟妇videofreesex | 亚洲自偷精品视频自拍 | 丰满少妇熟乱xxxxx视频 | 无码一区二区三区在线观看 | av小次郎收藏 | 国产亚洲人成在线播放 | 中文字幕无码免费久久99 | 国产激情一区二区三区 | 久久久久免费精品国产 | 国产麻豆精品一区二区三区v视界 | 亚洲人成网站色7799 | 3d动漫精品啪啪一区二区中 | 中文字幕乱妇无码av在线 | 色婷婷香蕉在线一区二区 | 国产精品内射视频免费 | 精品亚洲韩国一区二区三区 | 99久久久无码国产精品免费 | 激情亚洲一区国产精品 | 国产特级毛片aaaaaaa高清 | 亚洲无人区一区二区三区 | 99久久99久久免费精品蜜桃 | 麻豆国产97在线 | 欧洲 | 少妇高潮喷潮久久久影院 | 国产精品人人爽人人做我的可爱 | 日韩精品a片一区二区三区妖精 | 亚洲色欲久久久综合网东京热 | 俄罗斯老熟妇色xxxx | 又粗又大又硬毛片免费看 | 牲欲强的熟妇农村老妇女视频 | 亚洲精品国产第一综合99久久 | 人妻无码αv中文字幕久久琪琪布 | 正在播放老肥熟妇露脸 | 午夜丰满少妇性开放视频 | 午夜精品一区二区三区的区别 | 99er热精品视频 | 久久久亚洲欧洲日产国码αv | 欧美成人高清在线播放 | 啦啦啦www在线观看免费视频 | 超碰97人人做人人爱少妇 | 亚洲s色大片在线观看 | 一本大道伊人av久久综合 | 色欲久久久天天天综合网精品 | 天天躁日日躁狠狠躁免费麻豆 | 东京无码熟妇人妻av在线网址 | 精品无码国产自产拍在线观看蜜 | 久久亚洲精品成人无码 | 久久无码中文字幕免费影院蜜桃 | 伊人久久大香线蕉亚洲 | 国产9 9在线 | 中文 | 波多野结衣高清一区二区三区 | 国产亚洲人成a在线v网站 | 无码中文字幕色专区 | 国产激情艳情在线看视频 | 亚洲精品中文字幕乱码 | 国产激情无码一区二区app | 亚洲综合伊人久久大杳蕉 | 少妇性l交大片欧洲热妇乱xxx | 任你躁在线精品免费 | 亚洲а∨天堂久久精品2021 | 一本精品99久久精品77 | 狂野欧美性猛交免费视频 | 久久午夜夜伦鲁鲁片无码免费 | 欧美色就是色 | 久久综合香蕉国产蜜臀av | 久久久av男人的天堂 | 人妻中文无码久热丝袜 | 亚洲成a人片在线观看无码 | 97se亚洲精品一区 | 国产人成高清在线视频99最全资源 | 无码av最新清无码专区吞精 | 精品一区二区三区无码免费视频 | 成人片黄网站色大片免费观看 | 国产精品对白交换视频 | 久久久中文字幕日本无吗 | 福利一区二区三区视频在线观看 | 精品国产青草久久久久福利 | 欧美三级不卡在线观看 | 久久综合激激的五月天 | 久久久久免费精品国产 | 一区二区三区乱码在线 | 欧洲 | 一本色道久久综合亚洲精品不卡 | 妺妺窝人体色www在线小说 | 国产精品久久久久久亚洲毛片 | 无码人妻丰满熟妇区毛片18 | 亚洲国产精品久久人人爱 | 国产激情无码一区二区 | 天堂а√在线中文在线 | 红桃av一区二区三区在线无码av | 精品久久久中文字幕人妻 | 东京无码熟妇人妻av在线网址 | 午夜精品久久久久久久久 | 亚洲欧美日韩成人高清在线一区 | 九九综合va免费看 | 中文字幕无线码 | 狂野欧美激情性xxxx | 亚洲色偷偷男人的天堂 | 亚洲另类伦春色综合小说 | 亚洲另类伦春色综合小说 | 亚洲一区av无码专区在线观看 | 亚洲小说图区综合在线 | 国产在线aaa片一区二区99 | 十八禁视频网站在线观看 | 麻豆国产丝袜白领秘书在线观看 | 伦伦影院午夜理论片 | 国产精品亚洲а∨无码播放麻豆 | 免费网站看v片在线18禁无码 | 性色欲网站人妻丰满中文久久不卡 | 熟妇人妻中文av无码 | 成人性做爰aaa片免费看不忠 | 成熟女人特级毛片www免费 | 亚洲综合无码一区二区三区 | 黑人巨大精品欧美黑寡妇 | 国产97色在线 | 免 | 中文字幕无码乱人伦 | 久久aⅴ免费观看 | 久久午夜无码鲁丝片 | 国产高潮视频在线观看 | 亚洲一区二区三区播放 | 55夜色66夜色国产精品视频 | 色综合视频一区二区三区 | 国产综合久久久久鬼色 | 波多野结衣 黑人 | 久久综合久久自在自线精品自 | 亚洲自偷自拍另类第1页 | 日日鲁鲁鲁夜夜爽爽狠狠 | 97精品人妻一区二区三区香蕉 |