青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Javen-Studio 咖啡小屋

http://javenstudio.org - C++ Java 分布式 搜索引擎
Naven's Research Laboratory - Thinking of Life, Imagination of Future

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評(píng)論 :: 4 Trackbacks

IP 層的封裝

C++ 通用框架的設(shè)計(jì) 作者: naven

1?????????? IP 層封裝介紹

TCP/UDP 是網(wǎng)絡(luò)編程的基礎(chǔ)技術(shù),分別代表面向連接的穩(wěn)定的網(wǎng)絡(luò)通信技術(shù)和非連接方式的廣播形式的網(wǎng)絡(luò)通信技術(shù),它們都建立在 IP 層之上,所以 IP 層的封裝尤為重要。 IP 層的封裝接口主要包括 DNS 的查詢(xún)、 IP 地址和域名的互查、本地 IP 及名字的查詢(xún)等,目前 IP 層使用的主要實(shí)現(xiàn)技術(shù)是 IPv4 ,但是未來(lái)會(huì)慢慢升級(jí)到容量更大的 IPv6 ,所以 IP 層的封裝需要要同時(shí)支持這兩種協(xié)議。操作系統(tǒng)實(shí)現(xiàn)它們都是通過(guò)增加新的 API 以及新的地址結(jié)構(gòu)實(shí)現(xiàn)的,開(kāi)發(fā)者編寫(xiě)跨協(xié)議的網(wǎng)絡(luò)應(yīng)用需要編寫(xiě)較復(fù)雜的程序來(lái)區(qū)分 IPv4 IPv6 協(xié)議,優(yōu)秀的 ACE 框架則通過(guò)條件編譯來(lái)支持 IPv6 ,好像不能同時(shí)在程序中使用 IPv4 IPv6 協(xié)議。本 C++ 框架參考 Java InetAddress 及相關(guān)類(lèi)實(shí)現(xiàn)了類(lèi)似跨協(xié)議的 IP 層封裝,編寫(xiě)網(wǎng)絡(luò)應(yīng)用基本不用考慮兩種協(xié)議的不同,應(yīng)為它們對(duì)外的接口類(lèi)都是 InetAddress ,另外同時(shí)提供了與 Java 一樣簡(jiǎn)單的域名和 IP 地址互查的接口,使用非常容易。

?

主要有如下一些類(lèi)

?

class AbstraceInetAddress ???????????????????????? IP 地址的抽象類(lèi),定義 IP 類(lèi)的方法

class InetAddress?????????????????????????????????????????? 表示 IP 地址的接口類(lèi)

class Inet4Address?? ?????????????????? ???????? 表示 IPv4 協(xié)議的 IP 地址實(shí)現(xiàn)類(lèi)

class Inet6Address?? ?????????????????? ???????? 表示 IPv6 協(xié)議的 IP 地址實(shí)現(xiàn)類(lèi)

class SocketAddress?????????????????? ??????????????????????????? 表示以域名 /IP/PORT 標(biāo)識(shí)的網(wǎng)絡(luò)地址 Abstract 類(lèi)

class InetSocketAddress???????????????????? 表示以域名 /IP/PORT 標(biāo)識(shí)的網(wǎng)絡(luò)地址實(shí)現(xiàn)類(lèi)

???????? class NameService????????????????????????????????????????? 內(nèi)部使用的訪問(wèn)域名服務(wù)的類(lèi)

?

對(duì)于 IP 尋址,有如下幾個(gè)類(lèi): InetAddress Inet4Address Inet6Address IPv4 的實(shí)現(xiàn)類(lèi) Inet4AddressImpl 使用一個(gè) 32 位的 unsignednumber 標(biāo)識(shí),一個(gè) IPv4 地址形式為 nnn.nnn.nnn.nnn ,其中 n 為一個(gè)整數(shù),例于 129.250.35.250 。而 IPv6 的實(shí)現(xiàn)類(lèi) Inet6AddressImpl 使用一個(gè) 128 位的 unsigned number 標(biāo)識(shí),形式如同 x:x:x:x:x:x:x:x ,其中 x 表示一個(gè)十六進(jìn)制的數(shù)字,例于 1080:0:0:0:8:800:200C:417A

?

對(duì)于 Socket 尋址,有如下兩個(gè)類(lèi): SocketAddress InetSocketAddress 。其中 SocketAddress 是一個(gè) abstract socket 地址,不依賴(lài)于一個(gè)特定的協(xié)議,它提供給實(shí)現(xiàn)特定協(xié)議的子類(lèi)來(lái)使用。 InetSocketAddress SocketAddress 的一個(gè)子類(lèi),它表示一個(gè) IP 類(lèi)的 socket 地址,包括一個(gè) IP 地址(如 129.250.35.250 )和端口(如 80 ),或者包括一個(gè)域名(如 coastnews.com )和一個(gè)端口(如 1000 ),或者僅僅包括一個(gè)端口(如 1010 )。

2?????????? Hello World!

下面的程序示例如何用上面的類(lèi)進(jìn)行 IP 查詢(xún)操作:

?

void ?main()?
{
????
// ?定義IP地址數(shù)組以存儲(chǔ)IP地址列表
????InetAddressArray?iaa;?
????
// ?調(diào)用InetAddress方法獲取此域名的所有IP,并存放到數(shù)組iaa中
???? int ?cnt? = ?InetAddress::getAllByName( " www.google.com " ,?iaa);?
????
????
// ?定義數(shù)組的迭代器
????InetAddressArray::iterator?it(iaa);?
????
// ?遍歷數(shù)組,列出所有IP地址
???? while (? ! it.done()?)? {
????????
// ?輸出IP地址的字符串形式
????????printf( " %s\n " ,?it -> getHostAddress().c_str());?
????????
// ?迭代器向前移一位
????????it.advance();?
????}

}

?

程序輸出如下:

?

66.102.7.99

66.102.7.104

66.102.7.147

?

3?????????? AbstractInetAddress 類(lèi)

此類(lèi)定義一個(gè) Internet Procotol IP )地址類(lèi)的接口,類(lèi)定義如下:

?

?

class ?AbstractInetAddress?
{

protected :?
????
/* *?
?????*?Specify?the?address?family:?Internet?Protocol,?Version?4
?????*?@since?1.4
?????
*/

????
const ? static ? int ?IPv4? = ?INET_FAMILY_IPV4;

????
/* *?
?????*?Specify?the?address?family:?Internet?Protocol,?Version?6
?????*?@since?1.4
?????
*/

????
const ? static ? int ?IPv6? = ?INET_FAMILY_IPV6;

????
/* *?
?????*?Specify?address?family?preference?
?????
*/

????
static ?BOOL?preferIPv6Address;?
????
????
/* *?
?????*?Used?to?store?the?name?service?provider?
?????
*/

????
static ?NameService? & nameService;?

????
/* *?
?????*?Used?to?pointer?to?the?actual?address?implemented?
?????
*/

????
static ?InetAddressImplAutoPtr?_impl;?

????
virtual ?InetAddressAutoPtr?clone()? = ? 0 ;?

public :?
????
/* *
?????*?Destructor?must?implemented.?
?????
*/

????
virtual ? ~ AbstractInetAddress()? {} ?

????
/* *
?????*?Utility?routine?to?check?this?InetAddress.?
?????
*/

????
virtual ?BOOL?isMulticastAddress()? = ? 0 ;?
????
virtual ?BOOL?isAnyLocalAddress()? = ? 0 ;?
????
virtual ?BOOL?isLoopbackAddress()? = ? 0 ;?
????
virtual ?BOOL?isLinkLocalAddress()? = ? 0 ;?
????
virtual ?BOOL?isSiteLocalAddress()? = ? 0 ;?
????
virtual ?BOOL?isMCGlobal()? = ? 0 ;?
????
virtual ?BOOL?isMCNodeLocal()? = ? 0 ;?
????
virtual ?BOOL?isMCLinkLocal()? = ? 0 ;?
????
virtual ?BOOL?isMCSiteLocal()? = ? 0 ;?
????
virtual ?BOOL?isMCOrgLocal()? = ? 0 ;?

????
virtual ?SockAddr?getAddress()? = ? 0 ;?
????
virtual ?String?getHostAddress()? = ? 0 ;?
????
virtual ?BOOL?isUnresolved()? = ? 0 ;?

????
/* *
?????*?Compares?this?object?against?the?specified?object.
?????*?The?result?is?<code>true</code>?if?and?only?if?the?argument?is
?????*?not?<code>null</code>?and?it?represents?the?same?IP?address?as
?????*?this?object.
?????*?<p>
?????*?Two?instances?of?<code>InetAddress</code>?represent?the?same?IP
?????*?address?if?the?length?of?the?byte?arrays?returned?by
?????*?<code>getAddress</code>?is?the?same?for?both,?and?each?of?the
?????*?array?components?is?the?same?for?the?byte?arrays.
?????*
?????*?@param???obj???the?object?to?compare?against.
?????*?@return??<code>true</code>?if?the?objects?are?the?same;
?????*??????????<code>false</code>?otherwise.
?????
*/

????BOOL?equals(AbstractInetAddress?
& addr)?
????
{
????????
return ?getAddress()? == ?addr.getAddress()? ? ?TRUE?:?FALSE;?
????}


}
;

?

4?????????? InetAddress 類(lèi)

此類(lèi)實(shí)現(xiàn)一個(gè) Internet Procotol IP )地址,一個(gè) IP 地址即可以是用一個(gè) 32-bit unsigned 數(shù)來(lái)表示,也可以用一個(gè) 128-bit unsgined 數(shù)來(lái)表示,它內(nèi)部實(shí)現(xiàn)了一個(gè)底層的協(xié)議如 UDP TCP 協(xié)議。 IP 地址的結(jié)構(gòu)定義在 RFC790 Assigned Numbers http://www.ietf.org/rfc/rfc790.txt RFC1918 Address Allocation for Private Internets http://www.ietf.org/rfc/rfc1918.txt RFC2365 Administratively Scoped IP Multicast http://www.ietf.org/rfc/rfc2365.txt RFC2373 Version 6 Addressing Architecture http://www.ietf.org/rfc/rfc2373.txt 。一個(gè) InetAddress 的實(shí)體由一個(gè) IP 地址和一個(gè)可能它通訊的 host name 組成,這個(gè) host name 依賴(lài)于它是否使用一個(gè) host name 來(lái)構(gòu)造,或者它是否已經(jīng)做了 host name 決議的倒裝( reverse host name resolution )。

InetAddress 類(lèi)的定義如下:

?

class ?InetAdress?:? public ?AbstractInetAddress
{
????
/* *
?????*?@serial
?????
*/

????String?_hostName;?

????
/* *
?????*?Specifies?the?address?family?type,?for?instance,?'1'?for?IPv4
?????*?addresses,?and?'2'?for?IPv6?addresses.
?????*
?????*?@serial
?????
*/

????
int ?_family;?

????
/* *?
?????*?Used?to?store?the?best?available?hostname?
?????
*/

????String?_canonicalHostName;?

????
/* *?
?????*?Used?to?pointer?to?the?actual?address?object?
?????
*/

????InetAddressAutoPtr?_ia;
}
;

?

?

5?????????? NameService 類(lèi)

這個(gè)類(lèi)實(shí)現(xiàn)一個(gè)名字服務(wù)的接口供 InetAddress 查詢(xún) IP 及其協(xié)議類(lèi)型使用,它有如下一些方法:

?

class ?NameService
{
????
/* *
?????*?The?gethostbyaddr?function?retrieves?the?host?information?
?????*?corresponding?to?a?network?address.
?????*?
?????*?Note??The?gethostbyaddr?function?has?been?deprecated?by?the?
?????*?introduction?of?the?getnameinfo?function.?Developers?creating?
?????*?socket?applications?are?urged?to?use?the?getnameinfo?function?
?????*?instead?of?the?gethostbyaddr?function.?See?Remarks.
?????
*/

????
int ?getHostByAddr(SockAddr? & addr,?String? & host);?

????
/* *
?????*?Lookup?hostname?in?name?service.?If
?????*?found?return?address?and?return?count,?-1?if?not?found.?
?????*
?????*?@param?host??host?name?to?lookup?
?????*?@param?addrs?return?the?address?list?that?found?
?????*?@return?found?addresses?count,?-1?if?not?found?or?error.?
?????
*/

????
int ?lookupAllHostAddr( const ?String? & host,?InetAddressArray? & addrs);?

????
/* *
?????*?Lookup?host?port?with?service?name?and?protocol?in?name?service.?If
?????*?found?return?port?and?return?count,?-1?if?not?found.?
?????*
?????*?@param?service??host?service?to?lookup?
?????*?@param?protocol?service?protocol,?default?is?"TCP"??
?????*?@return?host?port,?-1?if?not?found?or?error.?
?????
*/

????
int ?lookupHostPort( const ?String? & service,? const ?String? & protocol? = ? " TCP " );
}
;

?

?

6?????????? Inet4Adress 類(lèi)

這個(gè)類(lèi)實(shí)現(xiàn)一個(gè) Internet Protocol version 4 (IPv4) 協(xié)議地址,定義在: RFC790 Assigned Numbers http://www.ietf.org/rfc/rfc790.txt RFC1918 Address Allocation for Private Internets http://www.ietf.org/rfc/rfc1918.txt RFC2365 Administratively Scoped IP Multicast http://www.ietf.org/rfc/rfc2365.txt 。一個(gè) IPv4 地址的文本表示法使用如下一個(gè)格式輸入:

?

d.d.d.d

d.d.d

d.d

d

?

當(dāng)四個(gè)部分都被指定后,每一個(gè)會(huì)被解釋為一個(gè) assigned 字節(jié)的數(shù)據(jù),從左到右,附值給一個(gè)四個(gè)字節(jié)的 IPv4 地址。此類(lèi)的定義如下:

?

class ?Inet4Adress?:? public ?AbstractInetAddress
{
????
/* *
?????*?Holds?a?32-bit?IPv4?address.
?????*
?????*?@serial
?????
*/

????
int ?_address;

}
;

?

7?????????? Inet6Adress 類(lèi)

這個(gè)類(lèi)實(shí)現(xiàn)一個(gè) Internet Protocol version 6 (IPv6) 協(xié)議地址,定義在: RFC2373 IP Version 6 Addressing Architecture http://www.ietf.org/rfc/rfc2373.txt 。一個(gè) IPv6 地址的文本表示法使用如下一個(gè)格式輸入:

首選的格式是 x:x:x:x:x:x:x:x ,其中所有的“ x ”是表示地址的 8 個(gè) 16-bit 塊的 16 進(jìn)制數(shù)值,這是一個(gè)完整的格式,舉例如下:

?

1080:0:0:0:8:800:200C:417A

?

需要注意的是以 0 開(kāi)始的欄位是無(wú)必要寫(xiě)的,然而在每個(gè)欄位中必需有一個(gè)數(shù)字,除了如下描述的情形外:

由于一些分配了確定類(lèi)型的 IPv6 地址的方法,它將為地址容納一個(gè)長(zhǎng)的 zero bit strings 所共有,為了使得寫(xiě)這些包含了 zero bit 的地址更容易,所以使用 :: ”來(lái)表示多個(gè)連續(xù)為 0 的欄位組,而“ :: ”在一個(gè)地址中只能出現(xiàn)一次,“ :: ”還能被用來(lái)壓縮一個(gè)地址中以 0 開(kāi)始到 0 結(jié)尾的欄位組,例如:

?

1080::8:800:200C:417A

?

一種可替換的格式在有時(shí)候更為便利,但處理混合有 IPv4 IPv6 協(xié)議的節(jié)點(diǎn)如 x:x:x:x:x:x:d.d.d.d ,其中所有的“ x ”表示地址的 6 個(gè) high-order 16-bit 部分的十六進(jìn)制數(shù),而其它的“ d ”表示標(biāo)準(zhǔn)的 IPv4 地址的 4 個(gè) low-order 8-bit 部分的十進(jìn)制數(shù),例如:

?

::FFFF:129.144.52.38

::129.144.52.38

?

其中“ ::FFFF:d.d.d.d ”和“ ::d.d.d.d ”分別地表示一個(gè) IPv4-mapped IPv6 地址和一個(gè) IPv4-compatible IPv6 地址,需要注意的是 IPv4 部分必須是 d.d.d.d ”格式,以下的格式都是不正確的:

?

::FFFF:d.d.d

::FFFF:d.d

::d.d.d

::d.d

?

但是下面的格式卻是合法的:

?

::FFFF:d

?

然而它是一個(gè)表示 IPv4-compatible IPv6 地址的非傳統(tǒng)的表示格式,

?

::255.255.0.d

?

其中的“ ::d ”符合一個(gè)通常的 IPv6 地址,如

?

0:0:0:0:0:0:0:d

?

對(duì)于一個(gè)需要返回文本格式的地址的方法, Inet6Address 將返回完整的格式,因?yàn)樗欠浅C鞔_的,當(dāng)在與其他文本數(shù)據(jù)結(jié)合使用的時(shí)候。

?

Inet6Address 類(lèi)定義如下:

?

class ?Inet6Adress?:? public ?AbstractInetAddress
{
????
/* *?
?????*?cached?scope_id?-?for?link-local?address?use?only.
?????
*/

????
int ?_cached_scope_id;?

????
/* *
?????*?Holds?a?128-bit?(16?bytes)?IPv6?address.
?????*
?????
*/

????
int ?_ipaddress[ 16 ];
}
;

?

?

8?????????? SocketAddress 類(lèi)和 InetSocketAddress 類(lèi)

SocketAddress 類(lèi)實(shí)現(xiàn)了一個(gè)不與任何一種協(xié)議綁定的 Socket 地址,它是一個(gè)抽象類(lèi),這表明必須使用它的綁定了特定協(xié)議的子類(lèi)來(lái)表示 Socket 地址的實(shí)現(xiàn)。它為 sockets binding connecting 或者 return values 提供一個(gè)不可變的對(duì)象。

InetSocketAddress 類(lèi)實(shí)現(xiàn)了一個(gè) IP Socket Address (即一個(gè) IP address 加一個(gè) port 端口),它還能是一對(duì) host name 加一個(gè) port 端口,此時(shí)會(huì)嘗試去查找確定 host name 的實(shí)際地址。它的定義如下所示:

?

class ?InetSocketAddress?:? public ?SocketAddress?
{
????
/* *
?????*?The?hostname?of?the?Socket?Address
?????*?@serial
?????
*/
?????
????String?_hostname;?
????
????
/* *?
?????*?The?IP?address?of?the?Socket?Address
?????*?@serial
?????
*/

????InetAddress?_addr;?
????
????
/* *
?????*?The?port?number?of?the?Socket?Address
?????*?@serial
?????
*/
???
????
int ?_port;
}
;

?

?

?

C++ 通用框架的設(shè)計(jì) 作者: naven 日期: 2006-3-19

posted on 2006-03-19 12:54 Javen-Studio 閱讀(2949) 評(píng)論(4)  編輯 收藏 引用

評(píng)論

# re: IP層的封裝(Java的InetAddress類(lèi)的C++實(shí)現(xiàn)) 2006-03-19 22:55 fiestay
看樣子還不錯(cuò),能否提供實(shí)現(xiàn)代碼?  回復(fù)  更多評(píng)論
  

# re: IP層的封裝(Java的InetAddress類(lèi)的C++實(shí)現(xiàn)) 2006-04-17 10:54 Javen-Studio
等我有時(shí)間我先發(fā)布一個(gè)庫(kù)給大家試用看看,謝謝支持!  回復(fù)  更多評(píng)論
  

# re: IP層的封裝(Java的InetAddress類(lèi)的C++實(shí)現(xiàn)) 2006-06-29 21:22 scott
please show us the missing source code. thnx  回復(fù)  更多評(píng)論
  

# re: IP層的封裝(Java的InetAddress類(lèi)的C++實(shí)現(xiàn)) 2006-06-30 09:37 Javen-Studio
快了,我會(huì)發(fā)布一個(gè)windows下的試用版本
  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成人精品三级在线观看| 欧美一二三区在线观看| 国产精品欧美风情| 这里只有精品视频在线| av成人老司机| 国产精品久久网站| 亚洲主播在线| 久久久欧美一区二区| 亚洲国产天堂久久综合网| 国产精品www色诱视频| 久久成人一区| 女人天堂亚洲aⅴ在线观看| 亚洲精品黄色| 亚洲老板91色精品久久| 亚洲国产欧美日韩精品| 国产精品福利在线| 免费h精品视频在线播放| 亚洲女性裸体视频| 亚洲日产国产精品| 亚洲一区视频在线| 亚洲成人在线视频网站| 国产精品日产欧美久久久久| 免费欧美视频| 久久久久久一区| 午夜精品一区二区在线观看 | 在线视频亚洲欧美| 欧美高潮视频| 久久久噜噜噜久噜久久| 欧美成人一二三| 久久精品99| 欧美在线视频免费观看| 亚洲免费在线| 亚洲伊人观看| 亚洲一区久久久| 亚洲精品无人区| 欧美精品v日韩精品v国产精品| 欧美一区二区三区视频| 99精品免费| 日韩午夜一区| 亚洲国产精品高清久久久| 欧美成人午夜77777| 欧美aaa级| 亚洲人成网站在线播| 亚洲精品欧美日韩| 亚洲色图自拍| 亚洲欧美激情一区| 亚洲一区尤物| 欧美一区二区三区免费视频| 99视频一区| 一本色道久久综合狠狠躁的推荐| 99视频在线观看一区三区| 一区二区三区国产在线观看| 99热免费精品| 小嫩嫩精品导航| 久久精品亚洲一区二区三区浴池| 久久精品国产69国产精品亚洲| 亚洲人www| 亚洲视频欧美在线| 午夜亚洲视频| 欧美国产日韩一区二区| 欧美日韩一区二区在线观看视频 | 国产精品久久久久久久久久久久久| 久久精品视频99| 牛牛影视久久网| 国产精品大全| 亚洲国产欧美日韩| 亚洲在线视频网站| 久久字幕精品一区| 亚洲国产乱码最新视频| 亚洲乱码国产乱码精品精天堂| 亚洲午夜黄色| 久久综合婷婷| 国产精品美女久久久久久2018| 激情视频一区二区三区| 亚洲激情欧美| 亚洲专区国产精品| 亚洲一区国产视频| 国产亚洲综合性久久久影院| 亚洲精品影视| 久久一区亚洲| 亚洲午夜精品一区二区| 亚洲人成在线免费观看| 久久一区亚洲| 在线午夜精品| 美女日韩在线中文字幕| 国产精品黄色在线观看| 91久久黄色| 老司机成人在线视频| 欧美一区二区久久久| 亚洲破处大片| 久久精品99久久香蕉国产色戒| 欧美日韩在线播放三区| 在线精品高清中文字幕| 亚洲风情亚aⅴ在线发布| 亚洲一区二区成人| 亚洲国产91精品在线观看| 亚洲欧美不卡| 欧美日韩在线视频首页| 最新中文字幕亚洲| 亚洲一区二区三区精品在线观看| 亚洲国产日本| 你懂的国产精品永久在线| 日韩一区二区电影网| 欧美成人中文字幕在线| 国产精品永久| 欧美一区影院| 欧美另类人妖| 欧美一区二区播放| 欧美黄色网络| 久久躁狠狠躁夜夜爽| 欧美午夜精品理论片a级按摩| 亚洲在线播放| 性色一区二区| 亚洲综合清纯丝袜自拍| 欧美亚洲在线| 亚洲欧洲一区二区三区在线观看| 亚洲欧美日韩精品在线| 国产午夜亚洲精品不卡| 欧美肥婆bbw| 国产精品高潮呻吟视频| 美女91精品| 免费成人黄色av| 亚洲一区二区三区成人在线视频精品 | 国产日韩欧美| 亚洲啪啪91| 亚洲久久一区| 99精品热视频只有精品10| 在线播放精品| 亚洲欧美日韩一区在线| 亚洲女爱视频在线| 欧美日韩精品高清| 亚洲精品影院在线观看| 国产美女高潮久久白浆| 亚洲全部视频| 亚洲综合欧美| 亚洲免费视频观看| 欧美日韩免费视频| 亚洲在线观看视频网站| 欧美激情亚洲国产| 亚洲欧美亚洲| 久久九九全国免费精品观看| 亚洲视频在线播放| 牛牛精品成人免费视频| 亚洲免费视频成人| 欧美片第1页综合| 免费观看成人鲁鲁鲁鲁鲁视频 | av成人老司机| 欧美日韩免费网站| 亚洲视频日本| 欧美一区1区三区3区公司| 国产精品久久毛片a| 亚洲色在线视频| 久久久久久综合| 国产视频一区在线观看| 欧美~级网站不卡| 狠狠综合久久| 亚洲在线视频免费观看| 久久九九久精品国产免费直播| 国产亚洲欧美日韩在线一区| 亚洲破处大片| 亚洲精品日韩精品| 欧美视频在线观看| 久久狠狠一本精品综合网| 亚洲激情啪啪| 国产无遮挡一区二区三区毛片日本| 亚洲在线观看视频网站| 欧美一区二区三区在线看| 欧美日韩国产在线| 亚洲一二三区精品| 先锋影音一区二区三区| 欧美乱妇高清无乱码| 欧美黑人一区二区三区| 极品少妇一区二区三区| 欧美影片第一页| 久久女同精品一区二区| 欧美视频在线看| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲一级在线观看| 在线观看欧美一区| 欧美激情2020午夜免费观看| 亚洲欧美制服中文字幕| 最新国产の精品合集bt伙计| 久久精品久久99精品久久| 伊人狠狠色丁香综合尤物| 欧美一区午夜精品| 久久久久国产精品一区三寸| 国产区欧美区日韩区| 午夜精品一区二区三区四区| 欧美亚洲一区在线| 中文日韩在线视频| 在线观看欧美精品| 国产日产精品一区二区三区四区的观看方式 | 一区二区激情| 精品9999| 欧美成年视频| 亚洲一区二区三区在线播放| 美女91精品| 久久久亚洲国产美女国产盗摄| 亚洲图片在线观看| 国产亚洲精品高潮|