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

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

?? if.c

?? linux下的撥號程序rp-pppoe.3.7
?? C
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************************* if.c** Implementation of user-space PPPoE redirector for Linux.** Functions for opening a raw socket and reading/writing raw Ethernet frames.** Copyright (C) 2000 by Roaring Penguin Software Inc.** This program may be distributed according to the terms of the GNU* General Public License, version 2 or (at your option) any later version.** LIC: GPL************************************************************************/static char const RCSID[] ="$Id: if.c,v 1.17 2005/08/08 03:51:35 dfs Exp $";#include "pppoe.h"#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#ifdef HAVE_NETPACKET_PACKET_H#include <netpacket/packet.h>#elif defined(HAVE_LINUX_IF_PACKET_H)#include <linux/if_packet.h>#endif#ifdef HAVE_NET_ETHERNET_H#include <net/ethernet.h>#endif#ifdef HAVE_ASM_TYPES_H#include <asm/types.h>#endif#ifdef HAVE_SYS_IOCTL_H#include <sys/ioctl.h>#endif#ifdef HAVE_SYSLOG_H#include <syslog.h>#endif#include <errno.h>#include <stdlib.h>#include <string.h>#ifdef HAVE_NET_IF_ARP_H#include <net/if_arp.h>#endif#ifdef USE_DLPI#include <limits.h>#include <fcntl.h>#include <stdlib.h>#include <sys/types.h>#include <sys/time.h>#include <sys/stream.h>#include <sys/stropts.h>#include <sys/dlpi.h>#include <sys/bufmod.h>#include <stdio.h>#include <signal.h>#include <stropts.h>/* function declarations */void dlpromisconreq( int fd, u_long  level);void dlinforeq(int fd);void dlunitdatareq(int fd, u_char *addrp, int addrlen, u_long minpri, u_long maxpri, u_char *datap, int datalen);void dlinfoack(int fd, char *bufp);void dlbindreq(int fd, u_long sap, u_long max_conind, u_long service_mode, u_long conn_mgmt, u_long xidtest);void dlattachreq(int fd, u_long ppa);void dlokack(int fd, char *bufp);void dlbindack(int fd, char *bufp);int strioctl(int fd, int cmd, int timout, int len, char *dp);void strgetmsg(int fd, struct strbuf *ctlp, struct strbuf *datap, int *flagsp, char *caller);void sigalrm(int sig);void expecting(int prim, union DL_primitives *dlp);char *dlprim(u_long prim);/* #define DL_DEBUG */static	int     dl_abssaplen;static	int     dl_saplen;static	int	dl_addrlen;#endif#ifdef USE_BPF#include <net/bpf.h>#include <fcntl.h>unsigned char *bpfBuffer;	/* Packet filter buffer */int bpfLength = 0;		/* Packet filter buffer length */int bpfSize = 0;		/* Number of unread bytes in buffer */int bpfOffset = 0;		/* Current offset in bpfBuffer */#endif/* Initialize frame types to RFC 2516 values.  Some broken peers apparently   use different frame types... sigh... */UINT16_t Eth_PPPOE_Discovery = ETH_PPPOE_DISCOVERY;UINT16_t Eth_PPPOE_Session   = ETH_PPPOE_SESSION;/***********************************************************************%FUNCTION: etherType*%ARGUMENTS:* packet -- a received PPPoE packet*%RETURNS:* ethernet packet type (see /usr/include/net/ethertypes.h)*%DESCRIPTION:* Checks the ethernet packet header to determine its type.* We should only be receveing DISCOVERY and SESSION types if the BPF* is set up correctly.  Logs an error if an unexpected type is received.* Note that the ethernet type names come from "pppoe.h" and the packet* packet structure names use the LINUX dialect to maintain consistency* with the rest of this file.  See the BSD section of "pppoe.h" for* translations of the data structure names.***********************************************************************/UINT16_tetherType(PPPoEPacket *packet){    UINT16_t type = (UINT16_t) ntohs(packet->ethHdr.h_proto);    if (type != Eth_PPPOE_Discovery && type != Eth_PPPOE_Session) {	syslog(LOG_ERR, "Invalid ether type 0x%x", type);    }    return type;}#ifdef USE_BPF/***********************************************************************%FUNCTION: getHWaddr*%ARGUMENTS:* ifname -- name of interface* hwaddr -- buffer for ehthernet address*%RETURNS:* Nothing*%DESCRIPTION:* Locates the Ethernet hardware address for an interface.***********************************************************************/voidgetHWaddr(int sock, char const *ifname, unsigned char *hwaddr){    char inbuf[8192];    const struct sockaddr_dl *sdl;    struct ifconf ifc;    struct ifreq ifreq, *ifr;    int i;    int found = 0;    ifc.ifc_len = sizeof(inbuf);    ifc.ifc_buf = inbuf;    if (ioctl(sock, SIOCGIFCONF, &ifc) < 0) {	fatalSys("SIOCGIFCONF");    }    ifr = ifc.ifc_req;    ifreq.ifr_name[0] = '\0';    for (i = 0; i < ifc.ifc_len; ) {	ifr = (struct ifreq *)((caddr_t)ifc.ifc_req + i);	i += sizeof(ifr->ifr_name) +		    (ifr->ifr_addr.sa_len > sizeof(struct sockaddr)		    ? ifr->ifr_addr.sa_len		    : sizeof(struct sockaddr));	if (ifr->ifr_addr.sa_family == AF_LINK) {	    sdl = (const struct sockaddr_dl *) &ifr->ifr_addr;	    if ((sdl->sdl_type == IFT_ETHER) &&		(sdl->sdl_alen == ETH_ALEN) &&		!strncmp(ifname, ifr->ifr_name, sizeof(ifr->ifr_name))) {		if (found) {		    char buffer[256];		    sprintf(buffer, "interface %.16s has more than one ethernet address", ifname);		    rp_fatal(buffer);		} else {		    found = 1;		    memcpy(hwaddr, LLADDR(sdl), ETH_ALEN);		}	    }	}    }    if (!found) {	char buffer[256];	sprintf(buffer, "interface %.16s has no ethernet address", ifname);	rp_fatal(buffer);    }}/***********************************************************************%FUNCTION: initFilter*%ARGUMENTS:* fd -- file descriptor of BSD device* type -- Ethernet frame type (0 for watch mode)* hwaddr -- buffer with ehthernet address*%RETURNS:* Nothing*%DESCRIPTION:* Initializes the packet filter rules.***********************************************************************/voidinitFilter(int fd, UINT16_t type, unsigned char *hwaddr){    /* Packet Filter Instructions:     * Note that the ethernet type names come from "pppoe.h" and are     * used here to maintain consistency with the rest of this file. */    static struct bpf_insn bpfRun[] = {         /* run PPPoE */	BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),     /* ethernet type */	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETH_PPPOE_SESSION, 5, 0),	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETH_PPPOE_DISCOVERY, 0, 9),	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),      /* first word of dest. addr */#define PPPOE_BCAST_CMPW 4                     /* offset of word compare */	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0, 0, 2),	BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 4),      /* next 1/2 word of dest. */#define PPPOE_BCAST_CMPH 6                     /* offset of 1/2 word compare */	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0, 4, 0),	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),      /* first word of dest. addr */#define PPPOE_FILTER_CMPW 8                     /* offset of word compare */	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0, 0, 3),	BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 4),      /* next 1/2 word of dest. */#define PPPOE_FILTER_CMPH 10                    /* offset of 1/rd compare */	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0, 0, 1),	BPF_STMT(BPF_RET+BPF_K, (u_int) -1),    /* keep packet */	BPF_STMT(BPF_RET+BPF_K, 0),             /* drop packet */    };    /* Fix the potentially varying parts */    bpfRun[1].code = (u_short) BPF_JMP+BPF_JEQ+BPF_K;    bpfRun[1].jt   = 5;    bpfRun[1].jf   = 0;    bpfRun[1].k    = Eth_PPPOE_Session;    bpfRun[2].code = (u_short) BPF_JMP+BPF_JEQ+BPF_K;    bpfRun[2].jt   = 0;    bpfRun[2].jf   = 9;    bpfRun[2].k    = Eth_PPPOE_Discovery;    {      struct bpf_insn bpfInsn[sizeof(bpfRun) / sizeof(bpfRun[0])];      struct bpf_program bpfProgram;      memcpy(bpfInsn, bpfRun, sizeof(bpfRun));      bpfInsn[PPPOE_BCAST_CMPW].k = ((0xff << 24) | (0xff << 16) |				     (0xff << 8) | 0xff);      bpfInsn[PPPOE_BCAST_CMPH].k = ((0xff << 8) | 0xff);      bpfInsn[PPPOE_FILTER_CMPW].k = ((hwaddr[0] << 24) | (hwaddr[1] << 16) |				      (hwaddr[2] << 8) | hwaddr[3]);      bpfInsn[PPPOE_FILTER_CMPH].k = ((hwaddr[4] << 8) | hwaddr[5]);      bpfProgram.bf_len = (sizeof(bpfInsn) / sizeof(bpfInsn[0]));      bpfProgram.bf_insns = &bpfInsn[0];      /* Apply the filter */      if (ioctl(fd, BIOCSETF, &bpfProgram) < 0) {	fatalSys("ioctl(BIOCSETF)");      }    }}/***********************************************************************%FUNCTION: openInterface*%ARGUMENTS:* ifname -- name of interface* type -- Ethernet frame type (0 for any frame type)* hwaddr -- if non-NULL, set to the hardware address*%RETURNS:* A file descriptor for talking with the Ethernet card.  Exits on error.* Note that the Linux version of this routine returns a socket instead.*%DESCRIPTION:* Opens a BPF on an interface for all PPPoE traffic (discovery and* session).  If 'type' is 0, uses promiscuous mode to watch any PPPoE* traffic on this network.***********************************************************************/intopenInterface(char const *ifname, UINT16_t type, unsigned char *hwaddr){    static int fd = -1;    char bpfName[32];    u_int optval;    struct bpf_version bpf_ver;    struct ifreq ifr;    int sock;    int i;    /* BSD only opens one socket for both Discovery and Session packets */    if (fd >= 0) {	return fd;    }    /* Find a free BPF device */    for (i = 0; i < 256; i++) {	sprintf(bpfName, "/dev/bpf%d", i);	if (((fd = open(bpfName, O_RDWR, 0)) >= 0) ||	    (errno != EBUSY)) {	    break;	}    }    if (fd < 0) {	switch (errno) {	case EACCES:		/* permission denied */	    {		char buffer[256];		sprintf(buffer, "Cannot open %.32s -- pppoe must be run as root.", bpfName);		rp_fatal(buffer);	    }	    break;	case EBUSY:	case ENOENT:		/* no such file */	    if (i == 0) {		rp_fatal("No /dev/bpf* devices (check your kernel configuration for BPF support)");	    } else {		rp_fatal("All /dev/bpf* devices are in use");	    }	    break;	}	fatalSys(bpfName);    }    if ((sock = socket(AF_LOCAL, SOCK_DGRAM, 0)) < 0) {	fatalSys("socket");    }    /* Check that the interface is up */    strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));    if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {	fatalSys("ioctl(SIOCGIFFLAGS)");    }    if ((ifr.ifr_flags & IFF_UP) == 0) {	char buffer[256];	sprintf(buffer, "Interface %.16s is not up\n", ifname);	rp_fatal(buffer);    }    /* Fill in hardware address and initialize the packet filter rules */    if (hwaddr == NULL) {	rp_fatal("openInterface: no hwaddr arg.");    }    getHWaddr(sock, ifname, hwaddr);    initFilter(fd, type, hwaddr);    /* Sanity check on MTU -- apparently does not work on OpenBSD */#if !defined(__OpenBSD__)    strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));    if (ioctl(sock, SIOCGIFMTU, &ifr) < 0) {	fatalSys("ioctl(SIOCGIFMTU)");    }    if (ifr.ifr_mtu < ETH_DATA_LEN) {	char buffer[256];	sprintf(buffer, "Interface %.16s has MTU of %d -- should be %d.  You may have serious connection problems.",		ifname, ifr.ifr_mtu, ETH_DATA_LEN);	printErr(buffer);    }#endif    /* done with the socket */    if (close(sock) < 0) {	fatalSys("close");    }    /* Check the BPF version number */    if (ioctl(fd, BIOCVERSION, &bpf_ver) < 0) {	fatalSys("ioctl(BIOCVERSION)");    }    if ((bpf_ver.bv_major != BPF_MAJOR_VERSION) ||	(bpf_ver.bv_minor < BPF_MINOR_VERSION)) {	char buffer[256];	sprintf(buffer, "Unsupported BPF version: %d.%d (kernel: %d.%d)",			BPF_MAJOR_VERSION, BPF_MINOR_VERSION,			bpf_ver.bv_major, bpf_ver.bv_minor);	rp_fatal(buffer);    }    /* allocate a receive packet buffer */    if (ioctl(fd, BIOCGBLEN, &bpfLength) < 0) {	fatalSys("ioctl(BIOCGBLEN)");    }    if (!(bpfBuffer = (unsigned char *) malloc(bpfLength))) {	rp_fatal("malloc");    }    /* reads should return as soon as there is a packet available */    optval = 1;    if (ioctl(fd, BIOCIMMEDIATE, &optval) < 0) {	fatalSys("ioctl(BIOCIMMEDIATE)");    }    /* Bind the interface to the filter */    strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));    if (ioctl(fd, BIOCSETIF, &ifr) < 0) {	char buffer[256];	sprintf(buffer, "ioctl(BIOCSETIF) can't select interface %.16s",		ifname);	rp_fatal(buffer);    }    syslog(LOG_INFO, "Interface=%.16s HWaddr=%02X:%02X:%02X:%02X:%02X:%02X Device=%.32s Buffer size=%d",	   ifname,	   hwaddr[0], hwaddr[1], hwaddr[2],	   hwaddr[3], hwaddr[4], hwaddr[5],	   bpfName, bpfLength);    return fd;}#endif /* USE_BPF */#ifdef USE_LINUX_PACKET/***********************************************************************%FUNCTION: openInterface*%ARGUMENTS:* ifname -- name of interface* type -- Ethernet frame type* hwaddr -- if non-NULL, set to the hardware address*%RETURNS:* A raw socket for talking to the Ethernet card.  Exits on error.*%DESCRIPTION:* Opens a raw Ethernet socket***********************************************************************/intopenInterface(char const *ifname, UINT16_t type, unsigned char *hwaddr){    int optval=1;    int fd;    struct ifreq ifr;    int domain, stype;#ifdef HAVE_STRUCT_SOCKADDR_LL    struct sockaddr_ll sa;#else    struct sockaddr sa;#endif    memset(&sa, 0, sizeof(sa));#ifdef HAVE_STRUCT_SOCKADDR_LL    domain = PF_PACKET;    stype = SOCK_RAW;#else    domain = PF_INET;    stype = SOCK_PACKET;#endif    if ((fd = socket(domain, stype, htons(type))) < 0) {	/* Give a more helpful message for the common error case */	if (errno == EPERM) {	    rp_fatal("Cannot create raw socket -- pppoe must be run as root.");	}	fatalSys("socket");    }    if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)) < 0) {	fatalSys("setsockopt");    }    /* Fill in hardware address */    if (hwaddr) {	strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));	if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {	    fatalSys("ioctl(SIOCGIFHWADDR)");	}	memcpy(hwaddr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);#ifdef ARPHRD_ETHER	if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {	    char buffer[256];	    sprintf(buffer, "Interface %.16s is not Ethernet", ifname);	    rp_fatal(buffer);	}#endif	if (NOT_UNICAST(hwaddr)) {	    char buffer[256];	    sprintf(buffer,		    "Interface %.16s has broadcast/multicast MAC address??",		    ifname);	    rp_fatal(buffer);	}    }    /* Sanity check on MTU */    strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));    if (ioctl(fd, SIOCGIFMTU, &ifr) < 0) {	fatalSys("ioctl(SIOCGIFMTU)");    }    if (ifr.ifr_mtu < ETH_DATA_LEN) {	char buffer[256];	sprintf(buffer, "Interface %.16s has MTU of %d -- should be %d.  You may have serious connection problems.",		ifname, ifr.ifr_mtu, ETH_DATA_LEN);	printErr(buffer);    }#ifdef HAVE_STRUCT_SOCKADDR_LL    /* Get interface index */    sa.sll_family = AF_PACKET;    sa.sll_protocol = htons(type);    strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));    if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0) {	fatalSys("ioctl(SIOCFIGINDEX): Could not get interface index");    }    sa.sll_ifindex = ifr.ifr_ifindex;#else    strcpy(sa.sa_data, ifname);#endif    /* We're only interested in packets on specified interface */    if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {	fatalSys("bind");    }    return fd;}#endif /* USE_LINUX *//************************************************************************%FUNCTION: sendPacket*%ARGUMENTS:* sock -- socket to send to* pkt -- the packet to transmit* size -- size of packet (in bytes)*%RETURNS:* 0 on success; -1 on failure*%DESCRIPTION:* Transmits a packet***********************************************************************/intsendPacket(PPPoEConnection *conn, int sock, PPPoEPacket *pkt, int size){#if defined(USE_BPF)    if (write(sock, pkt, size) < 0) {	sysErr("write (sendPacket)");	return -1;    }#elif defined(HAVE_STRUCT_SOCKADDR_LL)    if (send(sock, pkt, size, 0) < 0 && (errno != ENOBUFS)) {	sysErr("send (sendPacket)");	return -1;    }#else#ifdef USE_DLPI#define ABS(x)          ((x) < 0 ? -(x) : (x))	u_char  addr[MAXDLADDR];	u_char  phys[MAXDLADDR];	u_char  sap[MAXDLADDR];	u_char    xmitbuf[MAXDLBUF];	int	data_size;	short	tmp_sap;	tmp_sap = htons(pkt->ethHdr.h_proto);	data_size = size - sizeof(struct ethhdr);	memcpy((char *)phys, (char *)pkt->ethHdr.h_dest, ETHERADDRL);	memcpy((char *)sap,  (char *)&tmp_sap, sizeof(ushort_t));	memcpy((char *)xmitbuf, (char *)pkt + sizeof(struct ethhdr), data_size);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品系列在线播放| 日韩免费成人网| 日韩三级在线观看| 亚洲欧洲精品成人久久奇米网| 午夜久久久久久电影| 成人免费毛片高清视频| 日韩一区二区在线看片| 亚洲欧美日韩在线不卡| 国产99久久久国产精品潘金| 欧美一卡二卡三卡四卡| 一区二区在线电影| 国产98色在线|日韩| 日韩欧美亚洲国产另类| 夜夜嗨av一区二区三区网页| 成人激情免费电影网址| 精品国产1区2区3区| 日本不卡的三区四区五区| 欧美视频一区在线| 亚洲免费观看高清完整版在线 | 综合激情成人伊人| 国产精品一级黄| 欧美成人欧美edvon| 日本一不卡视频| 欧美一区二区三区四区高清| 亚洲福利一区二区| 欧洲精品在线观看| 亚洲男人的天堂av| 91老师片黄在线观看| 国产精品乱码一区二区三区软件| 久久er精品视频| 日韩精品在线网站| 激情深爱一区二区| 久久这里只有精品6| 国产露脸91国语对白| 久久亚洲春色中文字幕久久久| 激情小说亚洲一区| 久久久久青草大香线综合精品| 久草精品在线观看| 26uuu国产日韩综合| 北条麻妃国产九九精品视频| 日本一区二区三区dvd视频在线| 国产成a人无v码亚洲福利| 久久亚洲一区二区三区四区| 国产成人综合网站| 亚洲欧美综合色| 欧美在线观看18| 美女视频免费一区| 久久人人爽爽爽人久久久| 国产91精品一区二区麻豆亚洲| 国产精品色一区二区三区| 一本在线高清不卡dvd| 亚洲精品高清视频在线观看| 欧美日本在线看| 激情综合网av| 亚洲欧美国产毛片在线| 欧美放荡的少妇| 国内精品免费**视频| 国产精品国产精品国产专区不蜜| 欧美调教femdomvk| 精品一区二区免费在线观看| 日本一区二区高清| 欧美视频一区二区三区四区 | 中文字幕在线观看不卡| 欧美在线观看一区二区| 久久精品国产一区二区三 | 日韩午夜在线影院| 成人涩涩免费视频| 五月天欧美精品| 中文av一区特黄| 欧美二区乱c少妇| k8久久久一区二区三区 | 日韩一区二区高清| 国产成人av资源| 久久国产精品免费| 亚洲欧美日韩国产手机在线| 日韩欧美一二三区| 色8久久人人97超碰香蕉987| 久久97超碰国产精品超碰| 亚洲同性gay激情无套| 欧美一区日本一区韩国一区| 成人激情图片网| 精品一区二区在线观看| 亚洲午夜久久久久久久久久久| 久久久精品国产99久久精品芒果| 欧美三级中文字| 成人黄色一级视频| 毛片基地黄久久久久久天堂| 亚洲欧美日韩国产手机在线| 国产亚洲精久久久久久| 欧美高清dvd| 91官网在线免费观看| 成人免费视频视频在线观看免费 | 久久99精品国产| 亚洲国产aⅴ成人精品无吗| 亚洲国产成人午夜在线一区| 日韩一级完整毛片| 欧美人成免费网站| 在线精品视频小说1| 99热在这里有精品免费| 风间由美一区二区av101| 麻豆91精品91久久久的内涵| 首页国产欧美日韩丝袜| 亚洲综合在线观看视频| 成人免费小视频| 中文字幕一区av| 亚洲国产成人自拍| 日本一区二区视频在线| 国产欧美日韩在线视频| 国产亚洲欧美日韩在线一区| 精品久久久久一区二区国产| 日韩三级在线观看| 日韩一区二区在线观看视频| 欧美一区永久视频免费观看| 欧美日本一道本在线视频| 欧美亚洲另类激情小说| 在线观看视频一区二区| 欧美在线999| 欧美日韩国产综合草草| 欧美精品在线一区二区三区| 欧美猛男gaygay网站| 5858s免费视频成人| 日韩一区二区在线观看视频播放| 日韩亚洲欧美高清| 亚洲精品在线免费观看视频| 久久―日本道色综合久久| 国产清纯美女被跳蛋高潮一区二区久久w | 成人妖精视频yjsp地址| 成人午夜激情影院| 91蝌蚪porny成人天涯| 色素色在线综合| 欧美精品乱码久久久久久| 欧美电影免费观看高清完整版在线| 日韩视频免费直播| 久久久久9999亚洲精品| 亚洲欧美在线观看| 亚洲综合在线五月| 免费观看日韩av| 粉嫩av一区二区三区在线播放| 91丝袜呻吟高潮美腿白嫩在线观看| 91成人网在线| 欧美成人一区二区三区在线观看| 久久久久久久电影| 一区二区在线免费| 看电视剧不卡顿的网站| 国产·精品毛片| 欧美性色综合网| 久久综合色播五月| 亚洲九九爱视频| 极品少妇xxxx偷拍精品少妇| 成年人午夜久久久| 91精品国产乱| 亚洲色图一区二区| 久久99久久99| 在线观看亚洲成人| 久久中文字幕电影| 亚洲成a人在线观看| 国产精品一区二区在线观看不卡 | 粉嫩欧美一区二区三区高清影视| 欧美综合天天夜夜久久| 精品成人在线观看| 亚洲一区在线观看免费观看电影高清| 蜜臀av性久久久久蜜臀aⅴ四虎| 不卡电影一区二区三区| 日韩欧美亚洲国产另类| 亚洲精品免费播放| 国产乱妇无码大片在线观看| 欧美日韩国产另类不卡| 中文字幕亚洲欧美在线不卡| 久久精品国产免费| 欧美日韩一区二区在线观看| 国产精品乱码一区二区三区软件| 开心九九激情九九欧美日韩精美视频电影| 99综合影院在线| 久久久久国产精品麻豆| 日日夜夜免费精品视频| 色狠狠av一区二区三区| 国产日韩av一区二区| 免费看日韩精品| 欧美精品tushy高清| 亚洲久本草在线中文字幕| 成人免费福利片| 久久久久久久久久久久久久久99 | 亚洲大片在线观看| 91亚洲午夜精品久久久久久| 精品国产一区二区国模嫣然| 三级影片在线观看欧美日韩一区二区| 色视频一区二区| 亚洲天天做日日做天天谢日日欢 | 精品在线你懂的| 欧美一级黄色录像| 首页欧美精品中文字幕| 欧美日韩在线亚洲一区蜜芽| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美在线你懂得| 一区二区三区蜜桃| 在线观看日韩一区| 一区二区三区精品在线| 欧美做爰猛烈大尺度电影无法无天| 国产精品色呦呦| 91视频一区二区三区|