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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? obsdrdr.c

?? miniupnpd可以在嵌入式linux中實(shí)現(xiàn)upnp功能
?? C
字號(hào):
/* $Id: obsdrdr.c,v 1.45 2008/04/12 20:35:42 nanard Exp $ *//* MiniUPnP project * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ * (c) 2006-2008 Thomas Bernard  * This software is subject to the conditions detailed * in the LICENCE file provided within the distribution */#include <sys/types.h>#include <sys/socket.h>#include <net/if.h>#include <netinet/in.h>#include <netinet/tcp.h>#include <arpa/inet.h>#include <net/pfvar.h>#include <fcntl.h>#include <sys/ioctl.h>#include <unistd.h>#include <string.h>#include <syslog.h>#include <stdio.h>#include <stdlib.h>#include "../config.h"#include "obsdrdr.h"#include "../upnpglobalvars.h"/* anchor name */static const char anchor_name[] = "miniupnpd";/* /dev/pf when opened */static int dev = -1;/* shutdown_redirect() : * close the /dev/pf device */voidshutdown_redirect(void){	if(close(dev)<0)		syslog(LOG_ERR, "close(\"/dev/pf\"): %m");	dev = -1;}/* open the device */intinit_redirect(void){	struct pf_status status;	if(dev>=0)		shutdown_redirect();	dev = open("/dev/pf", O_RDWR);	if(dev<0) {		syslog(LOG_ERR, "open(\"/dev/pf\"): %m");		return -1;	}	if(ioctl(dev, DIOCGETSTATUS, &status)<0) {		syslog(LOG_ERR, "DIOCGETSTATUS: %m");		return -1;	}	if(!status.running) {		syslog(LOG_ERR, "pf is disabled");		return -1;	}	return 0;}#if 0/* for debug */intclear_redirect_rules(void){	struct pfioc_trans io;	struct pfioc_trans_e ioe;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	memset(&ioe, 0, sizeof(ioe));	io.size = 1;	io.esize = sizeof(ioe);	io.array = &ioe;	ioe.rs_num = PF_RULESET_RDR;	strlcpy(ioe.anchor, anchor_name, MAXPATHLEN);	if(ioctl(dev, DIOCXBEGIN, &io) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCXBEGIN, ...): %m");		goto error;	}	if(ioctl(dev, DIOCXCOMMIT, &io) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCXCOMMIT, ...): %m");		goto error;	}	return 0;error:	return -1;}#endif/* add_redirect_rule2() : * create a rdr rule */intadd_redirect_rule2(const char * ifname, unsigned short eport,                   const char * iaddr, unsigned short iport, int proto,				   const char * desc){	int r;	struct pfioc_rule pcr;	struct pfioc_pooladdr pp;	struct pf_pooladdr *a;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	r = 0;	memset(&pcr, 0, sizeof(pcr));	strlcpy(pcr.anchor, anchor_name, MAXPATHLEN);	memset(&pp, 0, sizeof(pp));	strlcpy(pp.anchor, anchor_name, MAXPATHLEN);	if(ioctl(dev, DIOCBEGINADDRS, &pp) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCBEGINADDRS, ...): %m");		r = -1;	}	else	{		pcr.pool_ticket = pp.ticket;				pcr.rule.dst.port_op = PF_OP_EQ;		pcr.rule.dst.port[0] = htons(eport);		pcr.rule.dst.port[1] = htons(eport);		pcr.rule.action = PF_RDR;#ifndef PF_ENABLE_FILTER_RULES		pcr.rule.natpass = 1;#else		pcr.rule.natpass = 0;#endif		pcr.rule.af = AF_INET;		strlcpy(pcr.rule.ifname, ifname, IFNAMSIZ);		pcr.rule.proto = proto;		pcr.rule.log = (GETFLAG(LOGPACKETSMASK))?1:0;	/*logpackets;*/#ifdef PFRULE_HAS_RTABLEID		pcr.rule.rtableid = -1;	/* first appeared in OpenBSD 4.0 */#endif		if(tag)			strlcpy(pcr.rule.tagname, tag, PF_TAG_NAME_SIZE);		pcr.rule.rpool.proxy_port[0] = iport;		pcr.rule.rpool.proxy_port[1] = iport;		TAILQ_INIT(&pcr.rule.rpool.list);		a = calloc(1, sizeof(struct pf_pooladdr));		inet_pton(AF_INET, iaddr, &a->addr.v.a.addr.v4.s_addr);		a->addr.v.a.mask.v4.s_addr = htonl(INADDR_NONE);		TAILQ_INSERT_TAIL(&pcr.rule.rpool.list, a, entries);		memcpy(&pp.addr, a, sizeof(struct pf_pooladdr));		strlcpy(pcr.rule.label, desc, PF_RULE_LABEL_SIZE);		if(ioctl(dev, DIOCADDADDR, &pp) < 0)		{			syslog(LOG_ERR, "ioctl(dev, DIOCADDADDR, ...): %m");			r = -1;		}		else		{			pcr.action = PF_CHANGE_GET_TICKET;        	if(ioctl(dev, DIOCCHANGERULE, &pcr) < 0)			{            	syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_GET_TICKET: %m");				r = -1;			}			else			{				pcr.action = PF_CHANGE_ADD_TAIL;				if(ioctl(dev, DIOCCHANGERULE, &pcr) < 0)				{					syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_ADD_TAIL: %m");					r = -1;				}			}		}		free(a);	}	return r;}/* thanks to Seth Mos for this function */intadd_filter_rule2(const char * ifname, const char * iaddr,                 unsigned short eport, unsigned short iport,				 int proto, const char * desc){#ifndef PF_ENABLE_FILTER_RULES	return 0;#else	int r;	struct pfioc_rule pcr;	struct pfioc_pooladdr pp;	struct pf_pooladdr *a;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	r = 0;	memset(&pcr, 0, sizeof(pcr));	strlcpy(pcr.anchor, anchor_name, MAXPATHLEN);	memset(&pp, 0, sizeof(pp));	strlcpy(pp.anchor, anchor_name, MAXPATHLEN);	if(ioctl(dev, DIOCBEGINADDRS, &pp) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCBEGINADDRS, ...): %m");		r = -1;	}	else	{		pcr.pool_ticket = pp.ticket;				pcr.rule.dst.port_op = PF_OP_EQ;		pcr.rule.dst.port[0] = htons(eport);		pcr.rule.direction = PF_IN;		pcr.rule.action = PF_PASS;		pcr.rule.af = AF_INET;		strlcpy(pcr.rule.ifname, ifname, IFNAMSIZ);		pcr.rule.proto = proto;		pcr.rule.quick = (GETFLAG(PFNOQUICKRULESMASK))?0:1;		pcr.rule.log = (GETFLAG(LOGPACKETSMASK))?1:0;	/*logpackets;*//* see the discussion on the forum : * http://miniupnp.tuxfamily.org/forum/viewtopic.php?p=638 */		pcr.rule.flags = TH_SYN;		pcr.rule.flagset = (TH_SYN|TH_ACK);#ifdef PFRULE_HAS_RTABLEID		pcr.rule.rtableid = -1;	/* first appeared in OpenBSD 4.0 */ #endif		pcr.rule.keep_state = 1;		strlcpy(pcr.rule.label, desc, PF_RULE_LABEL_SIZE);		if(queue)			strlcpy(pcr.rule.qname, queue, PF_QNAME_SIZE);		if(tag)			strlcpy(pcr.rule.tagname, tag, PF_TAG_NAME_SIZE);		pcr.rule.rpool.proxy_port[0] = eport;		a = calloc(1, sizeof(struct pf_pooladdr));		inet_pton(AF_INET, iaddr, &a->addr.v.a.addr.v4.s_addr);		a->addr.v.a.mask.v4.s_addr = htonl(INADDR_NONE);		memcpy(&pp.addr, a, sizeof(struct pf_pooladdr));		TAILQ_INIT(&pcr.rule.rpool.list);		inet_pton(AF_INET, iaddr, &a->addr.v.a.addr.v4.s_addr);		TAILQ_INSERT_TAIL(&pcr.rule.rpool.list, a, entries);				/* we have any - any port = # keep state label */		/* we want any - iaddr port = # keep state label */		/* memcpy(&pcr.rule.dst, a, sizeof(struct pf_pooladdr)); */		memcpy(&pp.addr, a, sizeof(struct pf_pooladdr));		strlcpy(pcr.rule.label, desc, PF_RULE_LABEL_SIZE);		if(ioctl(dev, DIOCADDADDR, &pp) < 0)		{			syslog(LOG_ERR, "ioctl(dev, DIOCADDADDR, ...): %m");			r = -1;		}		else		{			pcr.action = PF_CHANGE_GET_TICKET;        	if(ioctl(dev, DIOCCHANGERULE, &pcr) < 0)			{            	syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_GET_TICKET: %m");				r = -1;			}			else			{				pcr.action = PF_CHANGE_ADD_TAIL;				if(ioctl(dev, DIOCCHANGERULE, &pcr) < 0)				{					syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_ADD_TAIL: %m");					r = -1;				}			}		}		free(a);	}	return r;#endif}/* get_redirect_rule() * return value : 0 success (found) * -1 = error or rule not found */intget_redirect_rule(const char * ifname, unsigned short eport, int proto,                  char * iaddr, int iaddrlen, unsigned short * iport,                  char * desc, int desclen,                  u_int64_t * packets, u_int64_t * bytes){	int i, n;	struct pfioc_rule pr;	struct pfioc_pooladdr pp;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	memset(&pr, 0, sizeof(pr));	strlcpy(pr.anchor, anchor_name, MAXPATHLEN);	pr.rule.action = PF_RDR;	if(ioctl(dev, DIOCGETRULES, &pr) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETRULES, ...): %m");		goto error;	}	n = pr.nr;	for(i=0; i<n; i++)	{		pr.nr = i;		if(ioctl(dev, DIOCGETRULE, &pr) < 0)		{			syslog(LOG_ERR, "ioctl(dev, DIOCGETRULE): %m");			goto error;		}		if( (eport == ntohs(pr.rule.dst.port[0]))		  && (eport == ntohs(pr.rule.dst.port[1]))		  && (pr.rule.proto == proto) )		{			*iport = pr.rule.rpool.proxy_port[0];			if(desc)				strlcpy(desc, pr.rule.label, desclen);#ifdef PFRULE_INOUT_COUNTS			if(packets)				*packets = pr.rule.packets[0] + pr.rule.packets[1];			if(bytes)				*bytes = pr.rule.bytes[0] + pr.rule.bytes[1];#else			if(packets)				*packets = pr.rule.packets;			if(bytes)				*bytes = pr.rule.bytes;#endif			memset(&pp, 0, sizeof(pp));			strlcpy(pp.anchor, anchor_name, MAXPATHLEN);			pp.r_action = PF_RDR;			pp.r_num = i;			pp.ticket = pr.ticket;			if(ioctl(dev, DIOCGETADDRS, &pp) < 0)			{				syslog(LOG_ERR, "ioctl(dev, DIOCGETADDRS, ...): %m");				goto error;			}			if(pp.nr != 1)			{				syslog(LOG_NOTICE, "No address associated with pf rule");				goto error;			}			pp.nr = 0;	/* first */			if(ioctl(dev, DIOCGETADDR, &pp) < 0)			{				syslog(LOG_ERR, "ioctl(dev, DIOCGETADDR, ...): %m");				goto error;			}			inet_ntop(AF_INET, &pp.addr.addr.v.a.addr.v4.s_addr,			          iaddr, iaddrlen);			return 0;		}	}error:	return -1;}intdelete_redirect_rule(const char * ifname, unsigned short eport, int proto){	int i, n;	struct pfioc_rule pr;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	memset(&pr, 0, sizeof(pr));	strlcpy(pr.anchor, anchor_name, MAXPATHLEN);	pr.rule.action = PF_RDR;	if(ioctl(dev, DIOCGETRULES, &pr) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETRULES, ...): %m");		goto error;	}	n = pr.nr;	for(i=0; i<n; i++)	{		pr.nr = i;		if(ioctl(dev, DIOCGETRULE, &pr) < 0)		{			syslog(LOG_ERR, "ioctl(dev, DIOCGETRULE): %m");			goto error;		}		if( (eport == ntohs(pr.rule.dst.port[0]))		  && (eport == ntohs(pr.rule.dst.port[1]))		  && (pr.rule.proto == proto) )		{			pr.action = PF_CHANGE_GET_TICKET;        	if(ioctl(dev, DIOCCHANGERULE, &pr) < 0)			{            	syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_GET_TICKET: %m");				goto error;			}			pr.action = PF_CHANGE_REMOVE;			pr.nr = i;			if(ioctl(dev, DIOCCHANGERULE, &pr) < 0)			{				syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_REMOVE: %m");				goto error;			}			return 0;		}	}error:	return -1;}intdelete_filter_rule(const char * ifname, unsigned short eport, int proto){#ifndef PF_ENABLE_FILTER_RULES	return 0;#else	int i, n;	struct pfioc_rule pr;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	memset(&pr, 0, sizeof(pr));	strlcpy(pr.anchor, anchor_name, MAXPATHLEN);	pr.rule.action = PF_PASS;	if(ioctl(dev, DIOCGETRULES, &pr) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETRULES, ...): %m");		goto error;	}	n = pr.nr;	for(i=0; i<n; i++)	{		pr.nr = i;		if(ioctl(dev, DIOCGETRULE, &pr) < 0)		{			syslog(LOG_ERR, "ioctl(dev, DIOCGETRULE): %m");			goto error;		}		if( (eport == ntohs(pr.rule.dst.port[0]))		  && (pr.rule.proto == proto) )		{			pr.action = PF_CHANGE_GET_TICKET;        	if(ioctl(dev, DIOCCHANGERULE, &pr) < 0)			{            	syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_GET_TICKET: %m");				goto error;			}			pr.action = PF_CHANGE_REMOVE;			pr.nr = i;			if(ioctl(dev, DIOCCHANGERULE, &pr) < 0)			{				syslog(LOG_ERR, "ioctl(dev, DIOCCHANGERULE, ...) PF_CHANGE_REMOVE: %m");				goto error;			}			return 0;		}	}error:	return -1;#endif}intget_redirect_rule_by_index(int index,                           char * ifname, unsigned short * eport,                           char * iaddr, int iaddrlen, unsigned short * iport,                           int * proto, char * desc, int desclen,                           u_int64_t * packets, u_int64_t * bytes){	int n;	struct pfioc_rule pr;	struct pfioc_pooladdr pp;	if(index < 0)		return -1;	if(dev<0) {		syslog(LOG_ERR, "pf device is not open");		return -1;	}	memset(&pr, 0, sizeof(pr));	strlcpy(pr.anchor, anchor_name, MAXPATHLEN);	pr.rule.action = PF_RDR;	if(ioctl(dev, DIOCGETRULES, &pr) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETRULES, ...): %m");		goto error;	}	n = pr.nr;	if(index >= n)		goto error;	pr.nr = index;	if(ioctl(dev, DIOCGETRULE, &pr) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETRULE): %m");		goto error;	}	*proto = pr.rule.proto;	*eport = ntohs(pr.rule.dst.port[0]);	*iport = pr.rule.rpool.proxy_port[0];	if(ifname)		strlcpy(ifname, pr.rule.ifname, IFNAMSIZ);	if(desc)		strlcpy(desc, pr.rule.label, desclen);#ifdef PFRULE_INOUT_COUNTS	if(packets)		*packets = pr.rule.packets[0] + pr.rule.packets[1];	if(bytes)		*bytes = pr.rule.bytes[0] + pr.rule.bytes[1];#else	if(packets)		*packets = pr.rule.packets;	if(bytes)		*bytes = pr.rule.bytes;#endif	memset(&pp, 0, sizeof(pp));	strlcpy(pp.anchor, anchor_name, MAXPATHLEN);	pp.r_action = PF_RDR;	pp.r_num = index;	pp.ticket = pr.ticket;	if(ioctl(dev, DIOCGETADDRS, &pp) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETADDRS, ...): %m");		goto error;	}	if(pp.nr != 1)	{		syslog(LOG_NOTICE, "No address associated with pf rule");		goto error;	}	pp.nr = 0;	/* first */	if(ioctl(dev, DIOCGETADDR, &pp) < 0)	{		syslog(LOG_ERR, "ioctl(dev, DIOCGETADDR, ...): %m");		goto error;	}	inet_ntop(AF_INET, &pp.addr.addr.v.a.addr.v4.s_addr,	          iaddr, iaddrlen);	return 0;error:	return -1;}/* this function is only for testing */#if 0voidlist_rules(void){	char buf[32];	int i, n;	struct pfioc_rule pr;	struct pfioc_pooladdr pp;    if(dev<0)    {        perror("pf dev not open");        return ;    }	memset(&pr, 0, sizeof(pr));	strlcpy(pr.anchor, anchor_name, MAXPATHLEN);	pr.rule.action = PF_RDR;	if(ioctl(dev, DIOCGETRULES, &pr) < 0)		perror("DIOCGETRULES");	printf("ticket = %d, nr = %d\n", pr.ticket, pr.nr);	n = pr.nr;	for(i=0; i<n; i++)	{		printf("-- rule %d --\n", i);		pr.nr = i;		if(ioctl(dev, DIOCGETRULE, &pr) < 0)			perror("DIOCGETRULE");		printf(" %s %d:%d -> %d:%d  proto %d\n",			pr.rule.ifname,			(int)ntohs(pr.rule.dst.port[0]),			(int)ntohs(pr.rule.dst.port[1]),			(int)pr.rule.rpool.proxy_port[0],			(int)pr.rule.rpool.proxy_port[1],			(int)pr.rule.proto);		printf("  description: \"%s\"\n", pr.rule.label);		memset(&pp, 0, sizeof(pp));		strlcpy(pp.anchor, anchor_name, MAXPATHLEN);		pp.r_action = PF_RDR;		pp.r_num = i;		pp.ticket = pr.ticket;		if(ioctl(dev, DIOCGETADDRS, &pp) < 0)			perror("DIOCGETADDRS");		printf("  nb pool addr = %d ticket=%d\n", pp.nr, pp.ticket);		/*if(ioctl(dev, DIOCGETRULE, &pr) < 0)			perror("DIOCGETRULE"); */		pp.nr = 0;	/* first */		if(ioctl(dev, DIOCGETADDR, &pp) < 0)			perror("DIOCGETADDR");		/* addr.v.a.addr.v4.s_addr */		printf("  %s\n", inet_ntop(AF_INET, &pp.addr.addr.v.a.addr.v4.s_addr, buf, 32));	}}#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜激情网站| 成人精品电影在线观看| 亚洲高清免费在线| 亚洲伦理在线精品| 亚洲精品亚洲人成人网在线播放| 亚洲国产电影在线观看| 久久精品无码一区二区三区| 久久亚区不卡日本| 久久女同精品一区二区| 久久久久综合网| 欧美激情在线一区二区三区| 国产欧美一区二区三区鸳鸯浴 | 青青草原综合久久大伊人精品优势| 一区二区三区久久久| 亚洲国产精品一区二区久久恐怖片| 亚洲一区二区三区四区中文字幕| 亚洲国产精品人人做人人爽| 午夜久久久久久久久久一区二区| 偷拍与自拍一区| 日韩av高清在线观看| 精品一区二区三区久久| 国产在线日韩欧美| 成人免费视频app| 91浏览器入口在线观看| 欧美少妇bbb| 欧美成人一区二区三区在线观看| 久久婷婷久久一区二区三区| 国产精品卡一卡二| 亚洲精选视频在线| 日韩激情视频在线观看| 久久成人精品无人区| 国产91精品在线观看| 一本大道久久a久久精二百| 欧美中文字幕亚洲一区二区va在线| 欧美男人的天堂一二区| 精品国产百合女同互慰| 中文字幕在线免费不卡| 午夜伊人狠狠久久| 国产在线国偷精品免费看| www.日韩精品| 在线播放视频一区| 久久综合狠狠综合久久综合88| 欧美激情资源网| 亚洲国产日韩一区二区| 国产一区在线观看麻豆| 97久久精品人人爽人人爽蜜臀| 欧美日韩精品久久久| 久久综合色一综合色88| 亚洲欧洲性图库| 午夜伦理一区二区| 成人午夜在线播放| 欧美精品123区| 亚洲国产经典视频| 丝袜亚洲另类丝袜在线| 丁香婷婷综合激情五月色| 欧美激情艳妇裸体舞| 亚洲高清在线视频| 国产精品99久久久久久久vr| 91久久精品一区二区二区| 亚洲精品一区二区三区在线观看 | 日本三级亚洲精品| 波多野结衣在线一区| 在线播放亚洲一区| 亚洲日穴在线视频| 狠狠色丁香婷婷综合| 欧美亚日韩国产aⅴ精品中极品| 精品国产一区二区三区av性色| 一区二区三区国产豹纹内裤在线| 国精产品一区一区三区mba桃花| 成人18视频日本| 精品乱码亚洲一区二区不卡| 亚洲综合视频在线| 波多野结衣的一区二区三区| 欧美大白屁股肥臀xxxxxx| 亚洲在线视频网站| jizzjizzjizz欧美| 久久久久青草大香线综合精品| 午夜精品免费在线| 91麻豆国产自产在线观看| 久久精品无码一区二区三区| 奇米影视一区二区三区小说| 欧美日韩综合色| 亚洲婷婷国产精品电影人久久| 国产自产2019最新不卡| 91精品国产综合久久精品图片| 日韩码欧中文字| 成人黄页毛片网站| 国产欧美日韩视频在线观看| 久久超碰97中文字幕| 欧美一区午夜视频在线观看| 亚洲综合丝袜美腿| 色婷婷一区二区| 中文字幕一区二区三区四区| 国产精品一区二区无线| 精品国产乱码久久久久久浪潮| 人人爽香蕉精品| 欧美人妖巨大在线| 婷婷综合久久一区二区三区| 欧美网站大全在线观看| 一片黄亚洲嫩模| 91麻豆自制传媒国产之光| 中文字幕一区二区三区色视频| 国产v综合v亚洲欧| 中文字幕欧美国产| 成人sese在线| 亚洲欧洲国产日韩| av资源网一区| 国产精品成人免费| 不卡一二三区首页| 成人免费在线观看入口| 99riav一区二区三区| 中文字幕一区二区三区在线不卡| 99久久伊人精品| 亚洲视频一区在线观看| 色婷婷激情综合| 洋洋av久久久久久久一区| 色av成人天堂桃色av| 亚洲在线中文字幕| 欧美精品久久99久久在免费线| 日本不卡一区二区三区高清视频| 欧美一区二区免费| 国产一区二区三区免费看| 久久影院视频免费| 不卡高清视频专区| 一区二区三区丝袜| 91 com成人网| 国产综合久久久久久鬼色| 日本一区二区在线不卡| 99视频热这里只有精品免费| 一区二区三区中文字幕电影 | 91麻豆精品在线观看| 亚洲aⅴ怡春院| 日韩精品资源二区在线| 国产成人av网站| 亚洲精品免费在线播放| 在线不卡a资源高清| 国产九色sp调教91| 亚洲视频你懂的| 欧美精品成人一区二区三区四区| 久久99精品久久久久久久久久久久| 国产欧美中文在线| 欧美性极品少妇| 激情综合网激情| 亚洲色图一区二区| 91精品福利在线一区二区三区| 国产一区二区三区久久久 | 亚洲视频精选在线| 欧美精品在线一区二区| 国产精品91xxx| 亚洲最大的成人av| 26uuu久久天堂性欧美| 色悠久久久久综合欧美99| 热久久久久久久| 欧美极品aⅴ影院| 欧美精品久久天天躁| 懂色av一区二区夜夜嗨| 婷婷丁香久久五月婷婷| 亚洲国产激情av| 欧美日韩1区2区| 波多野洁衣一区| 美女视频黄a大片欧美| 日韩美女啊v在线免费观看| 欧美一激情一区二区三区| 91在线视频18| 加勒比av一区二区| 亚洲国产aⅴ成人精品无吗| 欧美激情一区二区三区不卡| 88在线观看91蜜桃国自产| www.亚洲人| 狠狠色伊人亚洲综合成人| 亚洲午夜一区二区三区| 国产婷婷色一区二区三区四区| 欧美日韩国产在线观看| a级高清视频欧美日韩| 国产一区二区三区最好精华液| 午夜视频一区二区| 亚洲日本一区二区| 国产亚洲欧美在线| 日韩视频在线一区二区| 欧美亚洲综合色| 99国产麻豆精品| 高清shemale亚洲人妖| 久久精品国产**网站演员| 亚洲福利一区二区三区| 1区2区3区欧美| 欧美经典一区二区| 欧美精品一区二区三区蜜桃| 欧美日韩国产小视频| 色综合色狠狠天天综合色| 成人激情黄色小说| 国产精品白丝av| 精品伊人久久久久7777人| 日本一区中文字幕| 性做久久久久久久久| 亚洲一区在线观看免费观看电影高清| 成人免费一区二区三区视频 | 国产精品二区一区二区aⅴ污介绍| 久久综合色综合88| 精品成人a区在线观看| 欧美tickling网站挠脚心|