• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大漠落日

            while(!dead) study++;
            posts - 46, comments - 126, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            copy自_Iwin的百度空間: http://hi.baidu.com/peiwenlin/blog/item/be4ba62b454b21f4e6cd40c9.html
            因圖片防盜鏈限制,部分圖片無法正常顯示,請參考上面的原文鏈接。


             

            ASN.1:
            高級數(shù)據(jù)描述語言,描述數(shù)據(jù)類型、結(jié)構(gòu)、組織及編碼方法。包含語法符號和編碼規(guī)則兩大部分。SNMP使用ASN.1描述協(xié)議數(shù)據(jù)單元(PDU)和管理對象信息庫(MIB);

            BER:
            是 ASN.1中的基本編碼規(guī)則。描述具體的ASN.1對象如何編碼成比特流在網(wǎng)絡(luò)上進(jìn)行傳輸。SNMP使用BER作為編碼方案,數(shù)據(jù)首先經(jīng)過BER編碼,再 經(jīng)由傳輸層協(xié)議(一般是UDP)發(fā)送往接收方。接收方在SNMP端口收到PDU后,經(jīng)過BER解碼后,得到具體的SNMP操作數(shù)據(jù)。

            SMI
            是SNMP的描述方法。ASN.1功能很強(qiáng)大,但SNMP只用到其中一小部分,為了方便使用,對這部分內(nèi)容做了描述,限定了范圍,這就是SMI。SMI由ASN.1的一個(gè)子集合和一部分自定義的類型、宏等組成。SMI是ASN.1的一個(gè)子集和超集。

            MIB:
            使用SMI中定義的類型和ASN.1中的基本類型進(jìn)行對象描述,是一個(gè)使用SMI描述的管理信息庫。每一類關(guān)心的事件都有一組MIB,比如網(wǎng)絡(luò)接口有一棵MIB樹,TCP有一棵MIB樹,UDP也有一棵狀態(tài)樹。定義了數(shù)據(jù)格式、類型、順序、意義等;

            PDU
            是網(wǎng)絡(luò)中傳送的數(shù)據(jù)包,SNMP的協(xié)議數(shù)據(jù)單元。每一種SNMP操作物理上都對應(yīng)一個(gè)PDU。PDU是基本的通信格式,使用ASN.1描述,使用BER編碼,通過傳書層協(xié)議傳送; 

            1.什么是ASN.1(抽象語法記法一)?

                    ASN.1是ITU-T的一個(gè)標(biāo)準(zhǔn)集,它用來編碼及表示通用數(shù)據(jù)類型,這些數(shù)據(jù)類型有可打印串值,八位位組串值,位串值,整數(shù)值以及用可移值方式組合而成 的其他類型序列值.簡單的說,ASN.1指定了以何種方式對非平凡的數(shù)據(jù)類型進(jìn)行編碼,以便其他任何平臺及第三方工具都能夠解釋其內(nèi)容.比如,字母a在一 些平臺以ASCII編碼為十進(jìn)制數(shù)值97,而在其他非ASCII平臺上,可能會是另外的編碼.而ASN.1指定了一種編碼方式,在任何平臺上,字母a的編 碼都是統(tǒng)一的.

             

             

            2.ASN.1語法.

                    ASN.1語法遵循傳統(tǒng)的巴科斯范式BNF風(fēng)格.最基本的表達(dá)式如: Name ::= type . 表示為定義某個(gè)名稱為Name的元素,它的類型為type. 例如: MyName ::= IA5String . 表示為定義了一個(gè)名為MyName的元素或變量,其類型為ASN.1類型IA5String (類似于ASCII字符串).

             

            2.1 ASN.1顯式值(Explict Value).

              有些時(shí)候,我們需要定義一種ASN.1類型,它的子集元素包含預(yù)定義值. Name ::= type (Explict Value) .  顯式值(Explict Value).必須是ASN.1類型允許選擇的值,而且也必須是元素所允許的值.例: MyName ::= IA5String (Tom) 表示MyName是字符串Tom的IA5String編碼. 又例如: MyName ::= IA5String(Tom|Joe) 表示字符串的值既可以是Tom, 也可以是Joe.

                    這種語法的使用是為了擴(kuò)展確定的解碼器.例:

                    PublicKey ::= SEQUENCE {

                        KeyType       BOOLEAN(0),

                        Modulus        INTEGER,

                        PubExponent INTEGER

                    }

             

                    PrivateKey ::= SEQUENCE {

                        KeyType       BOOLEAN(1)

                        Modulus         INTEGER,

                        PubExponent  INTEGER,

                        PrivateExponent INTEGER

                      }

             

            2.2 ASN.1容器(container)

                    容器是值一個(gè)包含了其他相同或者不同類型元素的數(shù)據(jù)類型(例如序列值SEQUENCE或集合值SET類型).目的是為了組合一些復(fù) 雜的數(shù)據(jù)類型集.ASN.1規(guī)范定義了4種容器類型:序列,單一序列(SEQUENCE OF),集合和單一集合(SET OF).雖然它們意義不同,但是語法是一樣的.

                    Name ::= Container {Name Type [ Name Type...]}   方括號中的內(nèi)容和容器的元素個(gè)數(shù)都是可選項(xiàng).還可以進(jìn)行嵌套定義.

            例:

              UserRecord ::= SEQUENCE {

                       Name   SEQUENCE {

                           First IA5String,

                           Last  IA5String

                        },

                       DoB     UTCTIME

                    }

            將其粗略的翻譯成C語言中的結(jié)構(gòu)如下:

              struct UserRecord {

                       struct Name {

                         char *First,

                         char *Last

                       };

                      time_t DoB;

                    }

            將其粗略的翻譯成Object Pascal語言中的記錄如下(Object Pascal不支持嵌套記錄):

                   Type

                        Name = record

                          First : String;

                          Last  : String;

                        end;

                        UserRecord = record

                          aName : Name;

                          DoB    : DateTime;

                        end;

             

            2.3ASN.1修改器

                    ASN.1定義了各種修改器,如可選(OPTIONAL),默認(rèn)(DEFAULT),和選擇(CHOICE). 他們可以改變表達(dá)式的聲明.典型地用于定義一種要求編碼靈活,而定義又不繁瑣的類型.

                   <1>.可選(OPTIONAL)。顧名思義,其表示改變一個(gè)元素以便在編碼時(shí)它的類型是可選擇的.即編碼器可以忽略這個(gè)元素,解碼器不能假設(shè)它將出現(xiàn).但當(dāng)鄰接的兩個(gè)元素具有相同的類型時(shí),會給解碼器帶來一些問題.

                    定義: Name ::= Type OPTIONAL

              例如:

                  Float ::= SEQUENCE {

                                                     Exponent     INTEGER OPTIONAL,

                                                     Mantissa     INTEGER,

                                                     Sign             BOOLEAN

                                   }

                     當(dāng)解碼器讀取這個(gè)結(jié)構(gòu)時(shí),在它看來第一個(gè)整數(shù)(INTEGER)可能是Exponent,也有可能認(rèn)為是Mantissa. 一般建議不使用這種方式定義結(jié)構(gòu).

              <2>.默認(rèn)(DEFAULT).默認(rèn)修改器允許容器包含默認(rèn)值.如果待編碼的數(shù)據(jù)值等同于它的默認(rèn)值,那么它將在發(fā)送的數(shù)據(jù)流中被忽略.例如:

                  Command ::= SEQUENCE {

                                                     Token         IA5String(NOP) DEFAULT,

                                                     Parameter   INTEGER

                                   }

                     如果編碼器把Token看成是代表字符串NOP,那么序列將按照定義的那樣編碼為:

                                  Command ::= SEQUENCE {

                                                    Parameter    INTEGER

                                  }

                    <3>.選擇(CHOICE). 選擇修改器允許一個(gè)元素在給定的實(shí)例中可以有多個(gè)可能值.實(shí)質(zhì)上說,解碼器將嘗試所有期望的解碼算法,直到有一個(gè)類型符合為止.當(dāng)一個(gè)復(fù)雜的容器中包含其他容器時(shí),時(shí)候選擇器就十分有用了.例如:

                  UserKey ::= SEQUENCE {

                                                   Name             IA5String,

                                                   StartDate       UTCTIME,

                                                   Expire            UTCTIME,

                                                   KeyData        CHOICE {

                                                          ECCKey        ECCKeyType,

                                                          RSAKey        RSAKeyType

                                                   }

                                    }

                     上例簡單的允許ECC也允許RSA密鑰的公鑰證書.

             

            3.ASN.1數(shù)據(jù)類型

                    ASN.1針對廣泛的應(yīng)用定義了多種數(shù)據(jù)類型,我們這里只討論跟密碼學(xué)應(yīng)用相關(guān)的數(shù)據(jù)類型.我們將討論如下數(shù)據(jù)類型:

                •   布爾型 (Boolean);
                •         八位位組串 (OCTET String);
                •         位串 (BIT String);
                •         IA5String;
                •         可打印字符串 (PrintableString);
                •         整數(shù) (INTEGER);
                •         對象標(biāo)識符 (OBJECT Identifier, OID);
                •         世界協(xié)調(diào)時(shí) (UTCTIME);
                •         空 (NULL);
                •         序列,單一序列;
                •         集合;
                •         單一集合;

             

              任何ASN.1編碼都是以兩個(gè)字節(jié)開始(或者八位位組,含有8個(gè)二進(jìn)制位),不管什么類型,它們都是通用的.第一個(gè)字節(jié)是類型標(biāo)識符,也包含一些修正位;第二各字節(jié)是長度.

             

            3.1 ASN.1頭字節(jié)

                  頭字節(jié)(hearder byte)位于ASN.1編碼的開始,由3部分組成。如下圖:

                 

                    <1>. 類別位。

                             類別位(classification bits)由兩位表示,用來描述數(shù)據(jù)將要解釋的上下文。

                             
            位8 位7 類別
            0 0 通用(Universal)
            0 1 應(yīng)用(Application)
            1 0 上下文特定(Context Specific)
            1 1 專用(Private)

             

                              所有的類型中,通用類別最常用。

                   <2>. 結(jié)構(gòu)化位。

                            結(jié)構(gòu)化位(constructed bit)表示一個(gè)給定的編碼是否是相同類型的多種編碼的結(jié)構(gòu)化。結(jié)構(gòu)化元素是容器類型必需的,因?yàn)樵谶壿嬌希鼈冎皇瞧渌氐募稀?/p>

                           結(jié)構(gòu)化元素有自己的頭字節(jié)和長度字節(jié),之后是元素各個(gè)要素組件的單獨(dú)編碼。也就是說,這些要素組件是獨(dú)立地可解碼ASN.1數(shù)據(jù)類型。

                           嚴(yán)格的說,容器類是唯一允許使用結(jié)構(gòu)化位的數(shù)據(jù)類型。這是因?yàn)閷τ谄渌麛?shù)據(jù)類型,給定內(nèi)容,只允許一種編碼。所以其他所有數(shù)據(jù)類型的結(jié)構(gòu)化位都為0。

                  <3>. 原始類型。

                          ASN.1頭字節(jié)的低5位定義了32種ASN.1的原始類型(primitive type)

             

            代碼 ASN.1類型 作用
            1 布爾型 儲存布爾值
            2 整數(shù) 儲存大整數(shù)
            3 位串 存儲位數(shù)組
            4 八位位串 存儲字節(jié)數(shù)組
            5 預(yù)留位(例如在選擇修改器中)
            6 對象標(biāo)識符 標(biāo)識算法及協(xié)議
            16 序列和單一序列 未分類元素的容器
            17 集合和單一集合 已分類元素的容器
            19 可打印字符串 ASCII編碼(忽略一些不可打印字符)
            22 IA5String ASCII編碼
            23 世界協(xié)調(diào)時(shí) 以統(tǒng)一格式表示的時(shí)間

             

            3.2 ASN.1長度編碼

            根據(jù)編碼的實(shí)際長度,ASN.1定義了兩種長度編碼(length encoding)方法,長編碼和短編碼。

            編碼字節(jié)的最高位代表的是短編碼還是長編碼;而低7位則形成一個(gè)長度立即數(shù)。

            <1>. 短編碼。

                    在短編碼中,負(fù)載的長度必須小于128字節(jié)。長度立即數(shù)用來表示負(fù)載的長度。例如,對于一個(gè)長度為65 (0x41)的負(fù)載進(jìn)行編碼,其長度編碼字節(jié)只需簡單的設(shè)置為0x41即可。因?yàn)槠渥罡呶皇?,則編碼器可以判斷出這是短編碼,而且長度是65。

            <2>. 長編碼。

                    在長編碼中,定義了附加的抽象數(shù)據(jù)來對長度進(jìn)行編碼,它僅適用于所有長度為128字節(jié)或以上的負(fù)載。在這種模式下,長度立即數(shù)存儲的是為了表示負(fù)載長度所 需的字節(jié)數(shù)。這個(gè)長度必須以big-endian格式進(jìn)行編碼。(其實(shí)big endian是指低地址存放最高有效字節(jié)(MSB),而little endian則是低地址存放最低有效字節(jié)(LSB)。)。

                     例如,為一個(gè)長度為47310 (0xB8CE)的負(fù)載進(jìn)行編碼,因?yàn)樗拈L度大于127, 所以要采用長編碼方式。實(shí)際的長度需要兩個(gè)字節(jié)來表示。則,長度編碼字節(jié)為0x82; 然后用big-endian格式存儲的長度值為0xB8 0xCE。則全部長度編碼為 0x82 B8 CE。

             

            3.3 ASN.1布爾類型

                  布爾編碼的負(fù)載或者是全0或者是全1的八位位組。頭字節(jié)以0x01開始,長度編碼字節(jié)為0x01,負(fù)載內(nèi)容取決于布爾值的取值。

            布爾值 編碼
            False 0x01 01 00
            True 0x01 01 FF

             

            3.4 ASN.1整數(shù)類型

                  整數(shù)類型表示一個(gè)有符號的任意精度的標(biāo)量,它的編碼是可移植,平臺無關(guān)的。

                  正整數(shù)的編碼比較簡單。每個(gè)字節(jié)表示的最大整數(shù)是255 (0xFF), 存儲的實(shí)際數(shù)值分成字節(jié)大小的數(shù)字,并且以big-endian格式存儲。例如:

            八位位組{Xk, Xk-1,...., X0}將以遞減的順序從Xk到X0進(jìn)行存儲.編碼規(guī)定正整數(shù)的第一個(gè)字節(jié)的最高位必須是0,即Xk的最高為必須是0,為1的話則為負(fù)數(shù).例如: x = 49468= 193 * 256 + 60 = 0xC1 * 0x FF + 0x3C; 即X1=0xC1, X0 = 0x3C. 按正常規(guī)定,編碼應(yīng)該是 0x02 02 C1 3C, 但是X1的最高位是1, 應(yīng)該被看成負(fù)數(shù).最簡單的方法是用前端零字節(jié)進(jìn)行填充.編碼變?yōu)?0x02 02 00 C1 3C.

              負(fù)整數(shù)的編碼有些復(fù)雜.要先找到一個(gè)最小的256的冪,使它比要編碼的負(fù)數(shù)的絕對值還要大.例如:x = - 1555; 被1555大的256的最小的冪是256^2 = 65536; 然后將這個(gè)數(shù)跟負(fù)數(shù)相加以得到2的補(bǔ)碼. 65536 + (-1555) = 63981 =  0xF9 * 0xFF + 0x ED. 則編碼為 0x02 02 F9 ED.

                  以下是一些常用整數(shù)編碼的例子.

            編碼
            0 0x02 01 00
            1 0x02 01 01
            2 0x02 01 02
            127 0x02 01 7F
            128 0x02 02 00 80
            -1 0x02 01 FF
            -128 0x02 01 80
            -32768 0x02 02 80 00
            1234567890 0x02 04 49 96 02 D2

             

            3.5 ANS.1位串類型

                  位串(BIT STRING)類型以可移植形式表示位數(shù)組.除了ASN.1頭部兩個(gè)字節(jié)之外,還有一個(gè)附加的頭部用來表示填充數(shù)據(jù)(通常是一個(gè)字節(jié),因?yàn)樘畛涫菫榱诵纬?一個(gè)完整的字節(jié)).編碼規(guī)則:位串的第一位放到第一個(gè)負(fù)載字節(jié)的第8位;位串的第二位放到第一個(gè)負(fù)載字節(jié)的第7位; 依此類推.填充滿第一個(gè)負(fù)載字節(jié),就繼續(xù)填充第二個(gè)負(fù)載字節(jié).如果最后一個(gè)負(fù)載字節(jié)未被填充滿,空的位用0來填充, 0的個(gè)數(shù)存放到頭部用來表示填充數(shù)據(jù)的那個(gè)字節(jié)里.

            下面舉例說明:

            有一個(gè)位串{1,0,0,0,1,1,1,0,1,0,0,1},開始填充負(fù)載字節(jié).第一個(gè)字節(jié)填充后為10001110 = 0x 8E; 第二個(gè)字節(jié)填充后為10010000 = 0x90, 低位4個(gè)0為填充的空位.則,負(fù)載為2個(gè)字節(jié)加上表示填充0個(gè)數(shù)的一個(gè)字節(jié)0x04總共3個(gè)字節(jié).則完整的編碼為:0x03 03 04 8E 90.

             

            解碼器通過計(jì)算8 * 負(fù)載長度 - 填充數(shù) 來得到存儲輸出所需要的位數(shù).

             

            3.6 ASN.1八位位組串類型

              八位位組串(OCTET STRING)是保存字節(jié)數(shù)組,它和位串類型(BIT STRING)很相似.這種編碼非常簡單,像其他類型一樣對頭部進(jìn)行編碼,然后直接將八位位組復(fù)制過去即可.例如:對{FE, ED, 6A, B4}編碼;首先存儲類型0x04, 接著是長度0x04,然后是字節(jié)本身0xFE ED 6A B4; 完整的編碼為 0x04 04 FE ED 6A B4.

             

            3.7 空類型

                 空(NULL)類型實(shí)際上是"占位符", 它是含有空白選項(xiàng)的選擇修改器所特有.例如:

                      MyAccount ::= SEQUENCE {

                                Name                            IA5String,

                                Group                           IA5String,

                               Credentials                    CHOICE{

                                                                          rsaKey           RSAPublicKey,

                                                                          passwdHash  OCTET STRING,

                                                                          none               NULL

                                                                     }

                       }

                 在上面這個(gè)結(jié)構(gòu)中,帳號的證書應(yīng)該包含一個(gè)RSA密鑰或一個(gè)密碼散列值或什么都沒有.

             空類型的編碼是 0x05 00.

             

            3.8 ASN.1 對象標(biāo)識符類型

                  對象標(biāo)識符(OBJECT IDENTIFIER, OID)類型用層次的形式來表示標(biāo)準(zhǔn)規(guī)范.標(biāo)識符樹通過一個(gè)點(diǎn)分的十進(jìn)制符號來定義,這個(gè)符號以組織,子部分然后是標(biāo)準(zhǔn)的類型和各自的子標(biāo)識符開始.

                  例如:MD5的OID 是 1.2.840.113549.2.5  表示為"iso(1) member-body (2) US (840) rsadsi(113549) digestAlgorithm (2) md5 (5)", 所以當(dāng)解碼程序看到這個(gè)OID時(shí),就知道是MD5散列.

                  OID在公鑰算法標(biāo)準(zhǔn)中很流行,它指出證書綁定了哪種散列算法. 同樣,也有公鑰算法,分組算法,和操作模式的OID. 它們是一種高效且可移植的表示數(shù)據(jù)包中所選算法的形式.

                  對OID的編碼規(guī)則:

              • 前兩部分如果定義為x.y, 那么它們將合成一個(gè)字40*x + y, 其余部分單獨(dú)作為一個(gè)字節(jié)進(jìn)行編碼.
              • 每個(gè)字首先被分割為最少數(shù)量的沒有頭零數(shù)字的7位數(shù)字.這些數(shù)字以big-endian格式進(jìn)行組織,并且一個(gè)接一個(gè)地組合成字節(jié). 除了編碼的最后一個(gè)字節(jié)外,其他所有字節(jié)的最高位(位8)都為1.

                 舉例: 30331 = 1 * 128^2 + 108 * 128 + 123  分割成7位數(shù)字(0x80)后為{1,108,123}設(shè)置最高位后變成{129,236,123}.如果該字只有一個(gè)7位數(shù)字,那么最高為0.

             

                 MD5 OID的編碼:

                    1. 將1.2.840.113549.2.5轉(zhuǎn)換成字?jǐn)?shù)組 {42, 840, 113549, 2, 5}.

                    2. 然后將每個(gè)字分割為帶有最高位的7位數(shù)字,{{0x2A},{0x86,0x48},{0x86,0xF7,0x0D},{0x02},{0x05}}.

                    3. 最后完整的編碼為 0x06 08 2A 86 48 86 F7 0D 02 05. 

             

            3.9 ASN.1序列和集合類型

              序列(SEQUENCE)和單一序列(SEQUENCE OF)以及相應(yīng)的集合(SET)和單一集合(SET OF)類型叫做"結(jié)構(gòu)"類型或簡單容器.它們是一種用來把相關(guān)數(shù)據(jù)元素收集為一個(gè)獨(dú)立的可解碼元素的簡單方法.

                  序列編碼有以下性質(zhì):

                  1. 編碼是結(jié)構(gòu)化的.即頭字節(jié)的位6必須設(shè)置. 

              2. 編碼的內(nèi)容是由ASN.1序列類型定義列表中的所有數(shù)據(jù)類型值的完全編碼所組成,并且按照它們出現(xiàn)的順序進(jìn)行編碼,除非這些類型被可選(OPTIONAL)或默認(rèn)(DEFAULT)關(guān)鍵字所引用.

              例:考慮如下序列

              User ::== SEQUENCE{

                      ID        INTEGER,

                      Active BOOLEAN

                  }

                 當(dāng)取值為{32,TRUE}時(shí),編碼為 0x 30 06 02 01 20 01 01 FF} 在ASN.1文檔里,使用空格來表示編碼的屬性.

             0x30 06

                           02 01 20

                           01 01 FF

             

            3.10 ASN.1可打印字符串和IA5String類型

                    可打印字符串(PrintableString)和IA5String類型定義了一種獨(dú)立于本地代碼頁和字符集定義,在任何平臺上都可以將ASCII字符串編碼為可讀字符串的可移植方法.

                   可打印字符串對象是ASCII集合的一個(gè)有限子集,這個(gè)子集包括32,39,40~41,43~58,61,63以及65~122.

                   IA5String類型的編碼對象是ASCII集合中的大多數(shù).包括NULL,BEL,TAB,NL,LF,CR以及32~126.

                   可打印字符串和IA5String的編碼和八位位組串相似.可打印字符串的頭字節(jié)是0x13, IA5String的是0x16. 例如:"Hello World"的編碼為0x13 0B 48 65 6D 6D 6F 20 57 6F 72 6D 64.

             

            3.11 ASN.1世界協(xié)調(diào)時(shí)類型

                    世界協(xié)調(diào)時(shí)(UTCTIME)定義了一種相對GMT時(shí)間的標(biāo)準(zhǔn)時(shí)間(以日期)編碼.它使用"YYMMDDHHMMSSZ"的格式分別表示年,月,日,時(shí), 分,秒. 其中"Z"是遺留自初始的UTCTIME. 如果沒有"Z",就允許兩種附加組"[+/-]hh 'mm'",其中"hh"和"mm"分別為與GMT的時(shí)差和分差. 如果有"Z",則時(shí)間是以Zulu或GMT時(shí)間表示.

                    字符串的編碼按照IA5String編碼規(guī)則進(jìn)行轉(zhuǎn)換(ASCII字符集),其頭字節(jié)為0x17而不是0x16. 例如:

                    July 4,2003 at 11:33 and 28 seconds編碼為"030704113328Z", 再編碼0x17 0D 30 33 30 37 30 34 31 31 33 33 32 38 5A.

            久久久久久久久久久久中文字幕| 亚洲中文字幕无码久久精品1| 精品无码久久久久久尤物| 国产69精品久久久久777| 久久国产精品99久久久久久老狼| 四虎国产精品免费久久5151| 国产一区二区精品久久凹凸| 狠狠色丁香婷婷久久综合| 亚洲va久久久噜噜噜久久男同| 99久久国产热无码精品免费| 久久夜色精品国产www| 亚洲AV无码1区2区久久| 久久电影网2021| 中文字幕久久久久人妻| 国产成人精品久久综合 | 久久精品嫩草影院| 久久久午夜精品福利内容| 精品国际久久久久999波多野| 日本久久中文字幕| 亚洲国产精品人久久| 国产免费久久精品99re丫y| 成人免费网站久久久| 亚洲精品乱码久久久久久蜜桃图片| 99久久精品国产综合一区| 久久天堂AV综合合色蜜桃网| 久久午夜综合久久| 国产L精品国产亚洲区久久| 国产成人精品白浆久久69| 亚洲伊人久久大香线蕉综合图片| 久久久久国色AV免费观看| 国产成人综合久久久久久| 人妻精品久久久久中文字幕一冢本| 欧美伊人久久大香线蕉综合69| 99久久国产综合精品网成人影院| 2021少妇久久久久久久久久| 久久亚洲精品无码AV红樱桃| 亚洲AV无码久久精品蜜桃| 久久天天躁狠狠躁夜夜躁2O2O| 久久精品www人人爽人人| 精品无码久久久久久尤物| 久久亚洲国产欧洲精品一|