亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dhcp.c

?? OpenVPN is a robust and highly flexible tunneling application that uses all of the encryption, authe
?? C
字號:
/* *  TAP-Win32 -- A kernel driver to provide virtual tap device functionality *               on Windows.  Originally derived from the CIPE-Win32 *               project by Damion K. Wilson, with extensive modifications by *               James Yonan. * *  All source code which derives from the CIPE-Win32 project is *  Copyright (C) Damion K. Wilson, 2003, and is released under the *  GPL version 2 (see below). * *  All other source code is Copyright (C) James Yonan, 2003-2004, *  and is released under the GPL version 2 (see below). * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *///=========================// Code to set DHCP options//=========================VOIDSetDHCPOpt (DHCPMsg *m, void *data, unsigned int len){  if (!m->overflow)    {      if (m->optlen + len <= DHCP_OPTIONS_BUFFER_SIZE)	{	  if (len)	    {	      NdisMoveMemory (m->msg.options + m->optlen, data, len);	      m->optlen += len;	    }	}      else	{	  m->overflow = TRUE;	}    }}VOIDSetDHCPOpt0 (DHCPMsg *msg, int type){  DHCPOPT0 opt;  opt.type = (UCHAR) type;  SetDHCPOpt (msg, &opt, sizeof (opt));}VOIDSetDHCPOpt8 (DHCPMsg *msg, int type, ULONG data){  DHCPOPT8 opt;  opt.type = (UCHAR) type;  opt.len = sizeof (opt.data);  opt.data = (UCHAR) data;  SetDHCPOpt (msg, &opt, sizeof (opt));}VOIDSetDHCPOpt32 (DHCPMsg *msg, int type, ULONG data){  DHCPOPT32 opt;  opt.type = (UCHAR) type;  opt.len = sizeof (opt.data);  opt.data = data;  SetDHCPOpt (msg, &opt, sizeof (opt));}//==============// Checksum code//==============USHORTip_checksum (const UCHAR *buf, const int len_ip_header){  USHORT word16;  ULONG sum = 0;  int i;      // make 16 bit words out of every two adjacent 8 bit words in the packet  // and add them up  for (i = 0; i < len_ip_header - 1; i += 2) {    word16 = ((buf[i] << 8) & 0xFF00) + (buf[i+1] & 0xFF);    sum += (ULONG) word16;  }  // take only 16 bits out of the 32 bit sum and add up the carries  while (sum >> 16)    sum = (sum & 0xFFFF) + (sum >> 16);  // one's complement the result  return ((USHORT) ~sum);}USHORTudp_checksum (const UCHAR *buf,	      const int len_udp,	      const UCHAR *src_addr,	      const UCHAR *dest_addr){  USHORT word16;  ULONG sum = 0;  int i;	  // make 16 bit words out of every two adjacent 8 bit words and   // calculate the sum of all 16 bit words  for (i = 0; i < len_udp; i += 2){    word16 = ((buf[i] << 8) & 0xFF00) + ((i + 1 < len_udp) ? (buf[i+1] & 0xFF) : 0);    sum += word16;  }  // add the UDP pseudo header which contains the IP source and destination addresses  for (i = 0; i < 4; i += 2){    word16 =((src_addr[i] << 8) & 0xFF00) + (src_addr[i+1] & 0xFF);    sum += word16;  }  for (i = 0; i < 4; i += 2){    word16 =((dest_addr[i] << 8) & 0xFF00) + (dest_addr[i+1] & 0xFF);    sum += word16; 	  }  // the protocol number and the length of the UDP packet  sum += (USHORT) IPPROTO_UDP + (USHORT) len_udp;  // keep only the last 16 bits of the 32 bit calculated sum and add the carries  while (sum >> 16)    sum = (sum & 0xFFFF) + (sum >> 16);		  // Take the one's complement of sum  return ((USHORT) ~sum);}//================================// Set IP and UDP packet checksums//================================VOIDSetChecksumDHCPMsg (DHCPMsg *m){  // Set IP checksum  m->msg.pre.ip.check = htons (ip_checksum ((UCHAR *) &m->msg.pre.ip, sizeof (IPHDR)));  // Set UDP Checksum  m->msg.pre.udp.check = htons (udp_checksum ((UCHAR *) &m->msg.pre.udp, 					      sizeof (UDPHDR) + sizeof (DHCP) + m->optlen,					      (UCHAR *)&m->msg.pre.ip.saddr,					      (UCHAR *)&m->msg.pre.ip.daddr));}//===================// DHCP message tests//===================intGetDHCPMessageType (const DHCP *dhcp, const int optlen){  const UCHAR *p = (UCHAR *) (dhcp + 1);  int i;  for (i = 0; i < optlen; ++i)    {      const UCHAR type = p[i];      const int room = optlen - i - 1;      if (type == DHCP_END)           // didn't find what we were looking for	return -1;      else if (type == DHCP_PAD)      // no-operation	;      else if (type == DHCP_MSG_TYPE) // what we are looking for	{	  if (room >= 2)	    {	      if (p[i+1] == 1)        // message length should be 1		return p[i+2];        // return message type	    }	  return -1;	}      else                            // some other message	{	  if (room >= 1)	    {	      const int len = p[i+1]; // get message length	      i += (len + 1);         // advance to next message	    }	}    }  return -1;}BOOLEANDHCPMessageOurs (const TapAdapterPointer p_Adapter,		 const ETH_HEADER *eth,		 const IPHDR *ip,		 const UDPHDR *udp,		 const DHCP *dhcp){  // Must be UDPv4 protocol  if (!(eth->proto == htons (ETH_P_IP) && ip->protocol == IPPROTO_UDP))    return FALSE;  // Source MAC must be our adapter  if (!MAC_EQUAL (eth->src, p_Adapter->m_MAC))    return FALSE;  // Dest MAC must be either broadcast or our virtual DHCP server  if (!(MAC_EQUAL (eth->dest, p_Adapter->m_MAC_Broadcast)	|| MAC_EQUAL (eth->dest, p_Adapter->m_dhcp_server_mac)))    return FALSE;  // Port numbers must be correct  if (!(udp->dest == htons (BOOTPS_PORT)	&& udp->source == htons (BOOTPC_PORT)))    return FALSE;  // Hardware address must be MAC addr sized  if (!(dhcp->hlen == sizeof (MACADDR)))    return FALSE;  // Hardware address must match our adapter  if (!MAC_EQUAL (eth->src, dhcp->chaddr))    return FALSE;  return TRUE;}//=====================================================// Build all of DHCP packet except for DHCP options.// Assume that *p has been zeroed before we are called.//=====================================================VOIDBuildDHCPPre (const TapAdapterPointer a,	      DHCPPre *p,	      const ETH_HEADER *eth,	      const IPHDR *ip,	      const UDPHDR *udp,	      const DHCP *dhcp,	      const int optlen,	      const int type){  // Should we broadcast or direct to a specific MAC / IP address?  const BOOLEAN broadcast = (type == DHCPNAK			     || MAC_EQUAL (eth->dest, a->m_MAC_Broadcast));  // Build ethernet header  COPY_MAC (p->eth.src, a->m_dhcp_server_mac);  if (broadcast)    COPY_MAC (p->eth.dest, a->m_MAC_Broadcast);  else    COPY_MAC (p->eth.dest, eth->src);  p->eth.proto = htons (ETH_P_IP);  // Build IP header  p->ip.version_len = (4 << 4) | (sizeof (IPHDR) >> 2);  p->ip.tos = 0;  p->ip.tot_len = htons (sizeof (IPHDR) + sizeof (UDPHDR) + sizeof (DHCP) + optlen);  p->ip.id = 0;  p->ip.frag_off = 0;  p->ip.ttl = 16;  p->ip.protocol = IPPROTO_UDP;  p->ip.check = 0;  p->ip.saddr = a->m_dhcp_server_ip;  if (broadcast)    p->ip.daddr = ~0;  else    p->ip.daddr = a->m_dhcp_addr;  // Build UDP header  p->udp.source = htons (BOOTPS_PORT);  p->udp.dest = htons (BOOTPC_PORT);  p->udp.len = htons (sizeof (UDPHDR) + sizeof (DHCP) + optlen);  p->udp.check = 0;  // Build DHCP response  p->dhcp.op = BOOTREPLY;  p->dhcp.htype = 1;  p->dhcp.hlen = sizeof (MACADDR);  p->dhcp.hops = 0;  p->dhcp.xid = dhcp->xid;  p->dhcp.secs = 0;  p->dhcp.flags = 0;  p->dhcp.ciaddr = 0;  if (type == DHCPNAK)    p->dhcp.yiaddr = 0;  else    p->dhcp.yiaddr = a->m_dhcp_addr;  p->dhcp.siaddr = a->m_dhcp_server_ip;  p->dhcp.giaddr = 0;  COPY_MAC (p->dhcp.chaddr, eth->src);  p->dhcp.magic = htonl (0x63825363);}//=============================// Build specific DHCP messages//=============================VOIDSendDHCPMsg (const TapAdapterPointer a,	     const int type,	     const ETH_HEADER *eth,	     const IPHDR *ip,	     const UDPHDR *udp,	     const DHCP *dhcp){  DHCPMsg *pkt;  if (!(type == DHCPOFFER || type == DHCPACK || type == DHCPNAK))    {      DEBUGP (("[TAP] SendDHCPMsg: Bad DHCP type: %d\n", type));      return;    }  pkt = (DHCPMsg *) MemAlloc (sizeof (DHCPMsg), TRUE);  if (pkt)    {      //-----------------------      // Build DHCP options      //-----------------------      // Message Type      SetDHCPOpt8 (pkt, DHCP_MSG_TYPE, type);      // Server ID      SetDHCPOpt32 (pkt, DHCP_SERVER_ID, a->m_dhcp_server_ip);      if (type == DHCPOFFER || type == DHCPACK)	{	  // Lease Time	  SetDHCPOpt32 (pkt, DHCP_LEASE_TIME, htonl (a->m_dhcp_lease_time));	  // Netmask	  SetDHCPOpt32 (pkt, DHCP_NETMASK, a->m_dhcp_netmask);	  // Other user-defined options	  SetDHCPOpt (pkt,		      a->m_dhcp_user_supplied_options_buffer,		      a->m_dhcp_user_supplied_options_buffer_len);	}      // End      SetDHCPOpt0 (pkt, DHCP_END);      if (!DHCPMSG_OVERFLOW (pkt))	{	  // The initial part of the DHCP message (not including options) gets built here	  BuildDHCPPre (a,			&pkt->msg.pre,			eth,			ip,			udp,			dhcp,			DHCPMSG_LEN_OPT (pkt),			type);	  SetChecksumDHCPMsg (pkt);	  DUMP_PACKET ("DHCPMsg",		       DHCPMSG_BUF (pkt),		       DHCPMSG_LEN_FULL (pkt));	  // Return DHCP response to kernel	  InjectPacket (a,			DHCPMSG_BUF (pkt),			DHCPMSG_LEN_FULL (pkt));	}      else	{	  DEBUGP (("[TAP] SendDHCPMsg: DHCP buffer overflow\n"));	}      MemFree (pkt, sizeof (DHCPMsg));    }}//===================================================================// Handle a BOOTPS packet produced by the local system to// resolve the address/netmask of this adapter.// If we are in TAP_IOCTL_CONFIG_DHCP_MASQ mode, reply// to the message.  Return TRUE if we processed the passed// message, so that downstream stages can ignore it.//===================================================================BOOLEANProcessDHCP (TapAdapterPointer p_Adapter,	     const ETH_HEADER *eth,	     const IPHDR *ip,	     const UDPHDR *udp,	     const DHCP *dhcp,	     int optlen){  int msg_type;  // Sanity check IP header  if (!(ntohs (ip->tot_len) == sizeof (IPHDR) + sizeof (UDPHDR) + sizeof (DHCP) + optlen	&& (ntohs (ip->frag_off) & IP_OFFMASK) == 0))    return TRUE;  // Does this message belong to us?  if (!DHCPMessageOurs (p_Adapter, eth, ip, udp, dhcp))    return FALSE;  msg_type = GetDHCPMessageType (dhcp, optlen);  // Drop non-BOOTREQUEST messages  if (dhcp->op != BOOTREQUEST)    return TRUE;  // Drop any messages except DHCPDISCOVER or DHCPREQUEST  if (!(msg_type == DHCPDISCOVER || msg_type == DHCPREQUEST))    return TRUE;  // Should we reply with DHCPOFFER, DHCPACK, or DHCPNAK?  if (msg_type == DHCPREQUEST      && ((dhcp->ciaddr && dhcp->ciaddr != p_Adapter->m_dhcp_addr)	  || !p_Adapter->m_dhcp_received_discover	  || p_Adapter->m_dhcp_bad_requests >= BAD_DHCPREQUEST_NAK_THRESHOLD))    SendDHCPMsg (p_Adapter,		 DHCPNAK,		 eth, ip, udp, dhcp);  else    SendDHCPMsg (p_Adapter,		 (msg_type == DHCPDISCOVER ? DHCPOFFER : DHCPACK),		 eth, ip, udp, dhcp);  // Remember if we received a DHCPDISCOVER  if (msg_type == DHCPDISCOVER)    p_Adapter->m_dhcp_received_discover = TRUE;  // Is this a bad DHCPREQUEST?  if (msg_type == DHCPREQUEST && dhcp->ciaddr != p_Adapter->m_dhcp_addr)    ++p_Adapter->m_dhcp_bad_requests;  return TRUE;}#if DBGconst char *message_op_text (int op){  switch (op)    {    case BOOTREQUEST:      return "BOOTREQUEST";    case BOOTREPLY:      return "BOOTREPLY";    default:      return "???";    }}const char *message_type_text (int type){  switch (type)    {    case DHCPDISCOVER:      return "DHCPDISCOVER";    case DHCPOFFER:      return "DHCPOFFER";    case DHCPREQUEST:      return "DHCPREQUEST";    case DHCPDECLINE:      return "DHCPDECLINE";    case DHCPACK:      return "DHCPACK";    case DHCPNAK:      return "DHCPNAK";    case DHCPRELEASE:      return "DHCPRELEASE";    case DHCPINFORM:      return "DHCPINFORM";    default:      return "???";    }}const char *port_name (int port){  switch (port)    {    case BOOTPS_PORT:      return "BOOTPS";    case BOOTPC_PORT:      return "BOOTPC";    default:      return "unknown";    }}VOIDDumpDHCP (const ETH_HEADER *eth,	  const IPHDR *ip,	  const UDPHDR *udp,	  const DHCP *dhcp,	  const int optlen){  DEBUGP ((" %s", message_op_text (dhcp->op)));  DEBUGP ((" %s ", message_type_text (GetDHCPMessageType (dhcp, optlen))));  PrIP (ip->saddr);  DEBUGP ((":%s[", port_name (ntohs (udp->source))));  PrMac (eth->src);  DEBUGP (("] -> "));  PrIP (ip->daddr);  DEBUGP ((":%s[", port_name (ntohs (udp->dest))));  PrMac (eth->dest);  DEBUGP (("]"));  if (dhcp->ciaddr)    {      DEBUGP ((" ci="));      PrIP (dhcp->ciaddr);    }  if (dhcp->yiaddr)    {      DEBUGP ((" yi="));      PrIP (dhcp->yiaddr);    }  if (dhcp->siaddr)    {      DEBUGP ((" si="));      PrIP (dhcp->siaddr);    }  if (dhcp->hlen == sizeof (MACADDR))    {      DEBUGP ((" ch="));      PrMac (dhcp->chaddr);    }  DEBUGP ((" xid=0x%08x", ntohl (dhcp->xid)));  if (ntohl (dhcp->magic) != 0x63825363)    DEBUGP ((" ma=0x%08x", ntohl (dhcp->magic)));  if (dhcp->htype != 1)    DEBUGP ((" htype=%d", dhcp->htype));  if (dhcp->hops)    DEBUGP ((" hops=%d", dhcp->hops));  if (ntohs (dhcp->secs))    DEBUGP ((" secs=%d", ntohs (dhcp->secs)));  if (ntohs (dhcp->flags))    DEBUGP ((" flags=0x%04x", ntohs (dhcp->flags)));  // extra stuff    if (ip->version_len != 0x45)    DEBUGP ((" vl=0x%02x", ip->version_len));  if (ntohs (ip->tot_len) != sizeof (IPHDR) + sizeof (UDPHDR) + sizeof (DHCP) + optlen)    DEBUGP ((" tl=%d", ntohs (ip->tot_len)));  if (ntohs (udp->len) != sizeof (UDPHDR) + sizeof (DHCP) + optlen)    DEBUGP ((" ul=%d", ntohs (udp->len)));  if (ip->tos)    DEBUGP ((" tos=0x%02x", ip->tos));  if (ntohs (ip->id))    DEBUGP ((" id=0x%04x", ntohs (ip->id)));  if (ntohs (ip->frag_off))    DEBUGP ((" frag_off=0x%04x", ntohs (ip->frag_off)));    DEBUGP ((" ttl=%d", ip->ttl));  DEBUGP ((" ic=0x%04x [0x%04x]", ntohs (ip->check),	    ip_checksum ((UCHAR*)ip, sizeof (IPHDR))));  DEBUGP ((" uc=0x%04x [0x%04x/%d]", ntohs (udp->check),	    udp_checksum ((UCHAR *) udp,			  sizeof (UDPHDR) + sizeof (DHCP) + optlen,			  (UCHAR *) &ip->saddr,			  (UCHAR *) &ip->daddr),	    optlen));  // Options  {    const UCHAR *opt = (UCHAR *) (dhcp + 1);    int i;    DEBUGP ((" OPT"));    for (i = 0; i < optlen; ++i)      {	const UCHAR data = opt[i];	DEBUGP ((".%d", data));      }  }}#endif /* DBG */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区美女| 欧美成人免费网站| 国产精品中文有码| 天堂久久一区二区三区| 一区二区高清在线| 成人免费一区二区三区视频 | 亚洲欧美激情一区二区| 国产精品你懂的| 欧美激情自拍偷拍| 国产三级精品视频| 国产精品女同一区二区三区| 国产精品理伦片| 亚洲蜜臀av乱码久久精品蜜桃| 最新不卡av在线| 国产精品久久久久久亚洲毛片 | 在线精品视频一区二区三四| 91在线国内视频| 欧美又粗又大又爽| 欧美高清dvd| 久久亚洲精品国产精品紫薇| 亚洲小说欧美激情另类| 青青草成人在线观看| 激情五月婷婷综合网| 成人一区二区三区在线观看| 91国偷自产一区二区三区成为亚洲经典| 色av成人天堂桃色av| 欧美美女黄视频| 精品成人一区二区三区四区| 国产精品美女一区二区三区 | 国产一区二区免费在线| 波多野结衣中文字幕一区二区三区| 99精品视频在线播放观看| 欧美午夜寂寞影院| 久久精品一区蜜桃臀影院| 一区二区成人在线| 国产a区久久久| 欧美在线小视频| 国产色婷婷亚洲99精品小说| 亚洲国产综合在线| 粉嫩一区二区三区性色av| 欧美日韩精品欧美日韩精品一综合| 久久日一线二线三线suv| 亚洲精品国产精品乱码不99 | 成人久久18免费网站麻豆| 欧美日韩精品免费观看视频| 国产欧美日韩视频在线观看| 五月天久久比比资源色| 99久久伊人精品| www国产亚洲精品久久麻豆| 亚洲午夜视频在线| 波多野结衣一区二区三区| 日韩欧美国产一区在线观看| 一区二区久久久| 91在线视频观看| 国产日韩欧美精品在线| 日韩avvvv在线播放| 色综合久久久久| 中文av字幕一区| 久久精品免费看| 91精品婷婷国产综合久久| 尤物av一区二区| 99国产精品久久久久久久久久久| 精品久久久久一区二区国产| 婷婷开心久久网| 欧美午夜电影网| 亚洲与欧洲av电影| 91视频com| 亚洲欧洲精品天堂一级| 国产电影精品久久禁18| 久久网站最新地址| 免费一区二区视频| 宅男在线国产精品| 日本vs亚洲vs韩国一区三区二区| 欧美日韩成人在线一区| 亚洲一区二区三区四区的| 91麻豆国产自产在线观看| 亚洲人成精品久久久久久 | 亚洲国产成人tv| 欧美私模裸体表演在线观看| 亚洲精选在线视频| 欧美日韩中文字幕一区| 亚洲高清久久久| 91精品国产色综合久久不卡电影| 天天av天天翘天天综合网色鬼国产| 欧美性受xxxx| 日韩高清一级片| 日韩欧美一级片| 国产凹凸在线观看一区二区| 国产精品女同一区二区三区| eeuss国产一区二区三区| 一区二区欧美视频| 欧美精选在线播放| 国产主播一区二区| 中文子幕无线码一区tr| 91福利精品第一导航| 亚洲成av人片一区二区| 欧美一区二区成人| 国产福利不卡视频| 亚洲一二三四在线观看| 日韩视频中午一区| 成人蜜臀av电影| 亚洲国产精品一区二区www在线 | 91国产视频在线观看| 日本亚洲三级在线| 国产欧美一区二区精品性色超碰| 91蜜桃在线免费视频| 日韩专区欧美专区| 欧美激情一区二区三区蜜桃视频| 欧美性一区二区| 国产精品资源在线看| 一区二区三区欧美亚洲| 精品精品国产高清a毛片牛牛| 波多野结衣在线一区| 麻豆精品久久精品色综合| 亚洲欧美在线另类| 日韩一区二区三区电影在线观看| 成人三级伦理片| 免费av成人在线| 亚洲视频你懂的| 日韩精品一区二区三区视频| 色88888久久久久久影院野外| 日本sm残虐另类| 亚洲激情中文1区| 国产亚洲自拍一区| 777a∨成人精品桃花网| 成人av免费在线播放| 日韩成人一级片| 一区二区三区四区不卡视频| 中国av一区二区三区| 欧美mv和日韩mv国产网站| 欧美日韩国产一级片| 91视频91自| 成人av电影在线观看| 国内精品免费在线观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲女同ⅹxx女同tv| 日本一二三四高清不卡| 欧美精品一区二区三区在线| 欧美精品在欧美一区二区少妇| 97久久精品人人爽人人爽蜜臀| 国产在线播精品第三| 日本中文字幕一区二区视频 | 亚洲人成网站在线| 国产精品美日韩| 国产精品久久777777| 国产欧美日韩在线| 国产午夜亚洲精品不卡| 久久综合网色—综合色88| 日韩欧美二区三区| 日韩欧美国产成人一区二区| 欧美一级黄色大片| 日韩欧美www| 日韩精品最新网址| 日韩免费观看高清完整版| 欧美一区二区三区免费大片| 欧美丰满少妇xxxxx高潮对白| 欧美日韩久久久一区| 欧美视频一区在线观看| 欧美日本乱大交xxxxx| 欧美日本一区二区三区| 欧美一区二区三级| 精品国产乱码久久久久久闺蜜| 精品国产网站在线观看| 久久久久亚洲蜜桃| 亚洲天堂网中文字| 一区二区成人在线| 天天爽夜夜爽夜夜爽精品视频| 日韩黄色在线观看| 国内精品免费在线观看| 99精品欧美一区二区三区小说| 色综合久久88色综合天天6 | 丁香六月久久综合狠狠色| 成人动漫一区二区在线| 欧美在线一二三| 欧美变态凌虐bdsm| 国产欧美精品区一区二区三区 | 色婷婷av一区二区三区gif| 欧美伊人久久大香线蕉综合69 | 国产喷白浆一区二区三区| 亚洲视频在线一区观看| 青青草原综合久久大伊人精品优势| 久久国产欧美日韩精品| 99久久婷婷国产| 欧美电影在线免费观看| 国产色综合久久| 午夜精品福利一区二区蜜股av| 麻豆freexxxx性91精品| 99久久久精品| 91麻豆精品国产91久久久久 | 激情综合一区二区三区| 99久久精品久久久久久清纯| 884aa四虎影成人精品一区| 久久五月婷婷丁香社区| 五月天丁香久久| 国产成人三级在线观看| 欧美精品丝袜久久久中文字幕| 日本一区二区视频在线| 爽好多水快深点欧美视频| av在线不卡观看免费观看| 欧美一区二区三区四区五区|