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

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

?? disp_conn.c

?? 開源的防火墻代碼
?? C
字號:
/* Copyright (c) 2002-2005 Vladislav Goncharov.
*
* Redistribution and use in source forms, with and without modification,
* are permitted provided that this entire comment appears intact.
*
* Redistribution in binary form may occur without any restrictions.
*
* This software is provided ``AS IS'' without any warranties of any kind.
*/

// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// $Id: disp_conn.c,v 1.11 2005/03/14 18:28:26 vlad Exp $

/*
* This file contains TDI_CONNECT & TDI_DISCONNECT handlers
*/

#include <ntddk.h>
#include <tdikrnl.h>
#include "sock.h"

#include "conn_state.h"
#include "dispatch.h"
#include "events.h"
#include "memtrack.h"
#include "obj_tbl.h"
#include "sids.h"
#include "tdi_fw.h"

struct delayed_ucn_param
{
	WORK_QUEUE_ITEM	item;
	PDEVICE_OBJECT	devobj;
	PFILE_OBJECT	fileobj;
};

struct uci_param
{
	PFILE_OBJECT	connobj;
	char			address[];
};

static void		delayed_ucn(PVOID p);
static NTSTATUS	update_conn_info_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);


static NTSTATUS	tdi_connect_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);
static NTSTATUS	tdi_disconnect_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);

//----------------------------------------------------------------------------

/*
* TDI_CONNECT handler
*/

int	tdi_connect(PIRP irp, PIO_STACK_LOCATION irps, struct completion *completion)
{
	PTDI_REQUEST_KERNEL_CONNECT param = (PTDI_REQUEST_KERNEL_CONNECT)(&irps->Parameters);
	TA_ADDRESS *remote_addr = ((TRANSPORT_ADDRESS *)(param->RequestConnectionInformation->RemoteAddress))->Address;
	PFILE_OBJECT addrobj;
	NTSTATUS status;
	TA_ADDRESS *local_addr;
	int result = FILTER_DENY, ipproto;
	struct ot_entry *ote_conn = NULL, *ote_addr;
	KIRQL irql;
	struct flt_request request;
	struct flt_rule rule;
	
	memset(&request, 0, sizeof(request));
	
	KdPrint(("[tdi_fw] tdi_connect: connobj 0x%x, to address %x:%u\n",
		irps->FileObject,
		ntohl(((TDI_ADDRESS_IP *)(remote_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(remote_addr->Address))->sin_port)));
	
	// check device object: TCP or UDP
	if (irps->DeviceObject != g_tcpfltobj && irps->DeviceObject != g_udpfltobj)
		{
		KdPrint(("[tdi_fw] tdi_connect: unknown DeviceObject 0x%x!\n", irps->DeviceObject));
		goto done;
		}
	
	ote_conn = ot_find_fileobj(irps->FileObject, &irql);
	if (ote_conn == NULL)
		{
		KdPrint(("[tdi_fw] tdi_connect: ot_find_fileobj(0x%x)!\n", irps->FileObject));
		goto done;
		}
	
	if (get_original_devobj(irps->DeviceObject, &ipproto) == NULL ||
		(ipproto != IPPROTO_TCP && ipproto != IPPROTO_UDP))
		{
		// invalid device object!
		KdPrint(("[tdi_fw] tdi_connect: invalid device object 0x%x!\n", irps->DeviceObject));
		goto done;
		}
	
	if (ipproto == IPPROTO_TCP)
		{
		/*
		* For TCP: get addrobj by connobj and get local address by it
		*/
		
		addrobj = ote_conn->associated_fileobj;
		if (addrobj == NULL)
			{
			KdPrint(("[tdi_fw] tdi_connect: empty addrobj!\n"));
			goto done;
			}
		
		ote_addr = ot_find_fileobj(addrobj, NULL); // we're already in spinlock
		if (ote_addr == NULL)
			{
			KdPrint(("[tdi_fw] tdi_connect: ot_find_fileobj(0x%x)!\n", addrobj));
			goto done;
			}
		
		}
	else	{
		/*
		* For UDP: connobj and addrobj are the same
		*/
		KdPrint(("[tdi_fw] tdi_connect: connected UDP socket detected\n"));
		
		// for connected UDP sockets connobj and addrobj are the same
		addrobj= irps->FileObject;
		ote_addr = ote_conn;
		}
	
	local_addr = (TA_ADDRESS *)(ote_addr->local_addr);
	
	// sanity check
	if (local_addr->AddressLength != remote_addr->AddressLength)
		{
		KdPrint(("[tdi_fw] tdi_connect: different addr lengths! (%u != %u)\n",
			local_addr->AddressLength, remote_addr->AddressLength));
		goto done;
		}
	
	// set remote address with connobj
	
	if (remote_addr->AddressLength > sizeof(ote_conn->remote_addr))
		{
		KdPrint(("[tdi_fw] tdi_connect: address too long! (%u)\n", remote_addr->AddressLength));
		goto done;
		}
	memcpy(ote_conn->remote_addr, remote_addr, remote_addr->AddressLength);
	
	// set local address with connobj
	
	if (local_addr->AddressLength > sizeof(ote_conn->local_addr))
		{
		KdPrint(("[tdi_fw] tdi_connect: address to long! (%u)\n", local_addr->AddressLength));
		goto done;
		}
	memcpy(ote_conn->local_addr, local_addr, local_addr->AddressLength);
	
	KdPrint(("[tdi_fw] tdi_connect(pid:%u/%u): %x:%u -> %x:%u (ipproto = %d)\n",
		ote_conn->pid, PsGetCurrentProcessId(),
		ntohl(((TDI_ADDRESS_IP *)(local_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(local_addr->Address))->sin_port),
	ntohl(((TDI_ADDRESS_IP *)(remote_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(remote_addr->Address))->sin_port), ipproto));
	
	/*
	* Call quick_filter
	*/
	
	request.struct_size = sizeof(request);
	
	request.type = TYPE_CONNECT;
	request.direction = DIRECTION_OUT;
	request.proto = ipproto;
	
	// don't use ote_conn->pid because one process can create connection object
	// but another one can connect
	request.pid = (ULONG)PsGetCurrentProcessId();
	if (request.pid == 0)
		{
		// avoid idle process pid (XXX do we need this?)
		request.pid = ote_addr->pid;
		}
	
	// get user SID & attributes (can't call get_current_sid_a at DISPATCH_LEVEL)
	if ((request.sid_a = copy_sid_a(ote_addr->sid_a, ote_addr->sid_a_size)) != NULL)
		request.sid_a_size = ote_addr->sid_a_size;
	
	memcpy(&request.addr.from, &local_addr->AddressType, sizeof(struct sockaddr));
	memcpy(&request.addr.to, &remote_addr->AddressType, sizeof(struct sockaddr));
	request.addr.len = sizeof(struct sockaddr_in);
	
	memset(&rule, 0, sizeof(rule));
	
	result = quick_filter(&request, &rule);
	
	memcpy(request.log_rule_id, rule.rule_id, RULE_ID_SIZE);
	
	if (result == FILTER_ALLOW && ipproto == IPPROTO_TCP)
		{
		struct flt_request *context_req = NULL;
		
		// add connection with state "SYN_SENT"
		status = add_tcp_conn(ote_conn, TCP_STATE_SYN_SENT);
		if (status != STATUS_SUCCESS)
			{
			KdPrint(("[tdi_fw] tdi_connect: add_conn: 0x%x!\n", status));
			
			result = FILTER_DENY;
			goto done;				// don't log this failure
			}
		
		if (rule.log >= RULE_LOG_LOG)
			{
			// set ote_conn->log_disconnect
			ote_conn->log_disconnect = (rule.log >= RULE_LOG_COUNT);
			
			// copy request for completion (LOG success or not)
			context_req = (struct flt_request *)malloc_np(sizeof(*context_req));
			if (context_req != NULL)
				{
				memcpy(context_req, &request, sizeof(*context_req));
				
				// don't free SID
				request.sid_a = NULL;
				
				// don't log request in this time
				rule.log = RULE_LOG_NOLOG;
				}
			}
		
		// set completion to add connection info to connection table
		completion->routine = tdi_connect_complete;
		completion->context = context_req;
		}
	
	// if logging is needed log request
	if (rule.log >= RULE_LOG_LOG)
		log_request(&request);
	
	done:
	// cleanup
	if (ote_conn != NULL)
		KeReleaseSpinLock(&g_ot_hash_guard, irql);
	if (request.sid_a != NULL)
		free(request.sid_a);
	
	if (result != FILTER_ALLOW)
		{
		irp->IoStatus.Status = STATUS_REMOTE_NOT_LISTENING;	// set fake status
		}
	
	return result;
}

NTSTATUS	tdi_connect_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
	NTSTATUS status;
	struct flt_request *request = (struct flt_request *)Context;
	PIO_STACK_LOCATION irps = IoGetCurrentIrpStackLocation(Irp);
	
	KdPrint(("[tdi_fw] tdi_connect_complete: status 0x%x\n", Irp->IoStatus.Status));
	
	if (Irp->IoStatus.Status == STATUS_SUCCESS)
		{
		
		if (request != NULL)
			log_request(request);		// log successful connection
		
		// very good! set connection state to "ESTABLISHED"
		status = set_tcp_conn_state(irps->FileObject, TCP_STATE_ESTABLISHED_OUT);
		if (status != STATUS_SUCCESS)
			{
			KdPrint(("[tdi_fw] tdi_connect_complete: set_tcp_conn_state: 0x%x!\n", status));
			
			// set fake status
			Irp->IoStatus.Status = STATUS_REMOTE_NOT_LISTENING;
			// TDI client will close connection object and connection will not "hang" (maybe)
			goto done;
			}
		
		// and update local address for this connection in state table
		update_conn_info(DeviceObject, irps->FileObject);
		
		}
	else	{
		
		if (request != NULL)
			{
			
			switch (Irp->IoStatus.Status)
				{		// are status codes correct?
				case STATUS_CONNECTION_REFUSED:
				case STATUS_CONNECTION_RESET:
					request->type = TYPE_CONNECT_RESET;
					break;
				case STATUS_CONNECTION_ABORTED:
				case STATUS_CANCELLED:
					request->type = TYPE_CONNECT_CANCELED;
					break;
				case STATUS_IO_TIMEOUT:
					request->type = TYPE_CONNECT_TIMEOUT;
					break;
				case STATUS_NETWORK_UNREACHABLE:
				case STATUS_HOST_UNREACHABLE:
				case STATUS_PROTOCOL_UNREACHABLE:
				case STATUS_PORT_UNREACHABLE:
					request->type = TYPE_CONNECT_UNREACH;
					break;
				default:
					request->type = TYPE_CONNECT_ERROR;
				}
			
			// anyway save status
			request->status = Irp->IoStatus.Status;
			
			log_request(request);
			}
		
		del_tcp_conn(irps->FileObject, FALSE);
		}
	
	done:
	if (request != NULL)
		{
		if (request->sid_a != NULL)
			free(request->sid_a);
		free(request);
		}
	return tdi_generic_complete(DeviceObject, Irp, Context);
}

void	delayed_ucn(PVOID p)
{
	struct delayed_ucn_param *ucn_param = (struct delayed_ucn_param *)p;
	
	update_conn_info(ucn_param->devobj, ucn_param->fileobj);
	
	free(ucn_param);
}

/* query local address and port for connection */
void	update_conn_info(PDEVICE_OBJECT devobj, PFILE_OBJECT connobj)
{
	PIRP query_irp;
	PMDL mdl = NULL;
	struct uci_param *uci_param = NULL;
	
	// MUST be executed at PASSIVE_LEVEL
	
	if (KeGetCurrentIrql() != PASSIVE_LEVEL)
		{
		// do it a bit later :-)
		struct delayed_ucn_param *ucn_param = (struct delayed_ucn_param *)malloc_np(sizeof(*ucn_param));
		if (ucn_param != NULL)
			{
			
			memset(ucn_param, 0, sizeof(*ucn_param));
			
			ucn_param->devobj = devobj;
			ucn_param->fileobj = connobj;
			
			ExInitializeWorkItem(&ucn_param->item, delayed_ucn, ucn_param);
			ExQueueWorkItem(&ucn_param->item, DelayedWorkQueue);	// DelayedWorkQueue a good value?
			
			}
		else	{
			KdPrint(("[ndis_hk] tdi_connect_complete: malloc_np!\n"));
			// so we'll live without known local address :-(
			}
		return;
		}
	
	// we're at PASSIVE_LEVEL
	
	query_irp = TdiBuildInternalDeviceControlIrp(TDI_QUERY_INFORMATION, devobj, connobj, NULL, NULL);
	if (query_irp == NULL)
		{
		KdPrint(("[tdi_fw] update_conn_info: TdiBuildInternalDeviceControlIrp!\n"));
		goto done;
		}
	
	uci_param = (struct uci_param *)malloc_np(sizeof(*uci_param) + TDI_ADDRESS_INFO_MAX);
	if (uci_param == NULL)
		{
		KdPrint(("[tdi_fw] update_conn_info: malloc_np!\n"));
		goto done;
		}
	
	memset(uci_param, 0, sizeof(*uci_param) + TDI_ADDRESS_INFO_MAX);
	uci_param->connobj = connobj;
	
	mdl = IoAllocateMdl(uci_param->address, TDI_ADDRESS_INFO_MAX, FALSE, FALSE, NULL);
	if (mdl == NULL)
		{
		KdPrint(("[tdi_fw] update_conn_info: IoAllocateMdl!\n"));
		goto done;
		}
	MmBuildMdlForNonPagedPool(mdl);
	
	TdiBuildQueryInformation(query_irp, devobj, connobj,
				 update_conn_info_complete, uci_param,
				 TDI_QUERY_ADDRESS_INFO, mdl);
	
	IoCallDriver(devobj, query_irp);
	
	query_irp = NULL;
	mdl = NULL;
	uci_param = NULL;
	
	done:
	// cleanup
	if (mdl != NULL)
		IoFreeMdl(mdl);
	if (uci_param != NULL)
		ExFreePool(uci_param);
	if (query_irp != NULL)
		IoCompleteRequest(query_irp, IO_NO_INCREMENT);
}

NTSTATUS	update_conn_info_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
	struct uci_param *param = (struct uci_param *)Context;
	TA_ADDRESS *addr = ((TDI_ADDRESS_INFO *)(param->address))->Address.Address;
	NTSTATUS status;
	
	status = set_tcp_conn_local(param->connobj, addr);
	if (status != STATUS_SUCCESS)
		KdPrint(("[tdi_fw] update_conn_info_complete: set_tcp_conn_local: 0x%x!\n", status));
	
	// cleanup MDL to avoid unlocking pages from NonPaged pool
	if (Irp->MdlAddress != NULL)
		{
		IoFreeMdl(Irp->MdlAddress);
		Irp->MdlAddress = NULL;
		}
	
	free(param);
	return STATUS_SUCCESS;
}

//----------------------------------------------------------------------------

/*
* TDI_DISCONNECT handler
*/

int	tdi_disconnect(PIRP irp, PIO_STACK_LOCATION irps, struct completion *completion)
{
	TDI_REQUEST_KERNEL_DISCONNECT *param = (TDI_REQUEST_KERNEL_DISCONNECT *)(&irps->Parameters);
	
	KdPrint(("[tdi_fw] tdi_disconnect: connobj 0x%x (flags: 0x%x)\n",
		irps->FileObject, param->RequestFlags));
	
	if (param->RequestFlags & TDI_DISCONNECT_RELEASE)
		{
		int state = get_tcp_conn_state_by_obj(irps->FileObject), new_state;
		
		if (state == TCP_STATE_ESTABLISHED_IN || state == TCP_STATE_ESTABLISHED_OUT)
			new_state = TCP_STATE_FIN_WAIT1;
		else if (state == TCP_STATE_CLOSE_WAIT)
			new_state = TCP_STATE_LAST_ACK;
		else
			KdPrint(("[tdi_fw] tdi_disconnect: weird conn state: %d\n", state));
		
		set_tcp_conn_state(irps->FileObject, new_state);
		
		completion->routine = tdi_disconnect_complete;
		completion->context = (PVOID)new_state;
		
		}
	else	{
		
		// set TCP_STATE_CLOSED and delete object in completion
		
		set_tcp_conn_state(irps->FileObject, TCP_STATE_CLOSED);
		
		completion->routine = tdi_disconnect_complete;
		completion->context = (PVOID)TCP_STATE_CLOSED;
		
		}
	
	return FILTER_ALLOW;
}

NTSTATUS	tdi_disconnect_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
	PIO_STACK_LOCATION irps = IoGetCurrentIrpStackLocation(Irp);
	int state = (int)Context;
	
	KdPrint(("[tdi_fw] tdi_disconnect_complete: connobj 0x%x; status: 0x%x\n",
		irps->FileObject, Irp->IoStatus.Status));
	
	if (Irp->IoStatus.Status == STATUS_SUCCESS)
		{
		
		// update TCP state table
		
		if (state == TCP_STATE_FIN_WAIT1)
			set_tcp_conn_state(irps->FileObject, TCP_STATE_FIN_WAIT2);
		else if (state == TCP_STATE_LAST_ACK)
			del_tcp_conn(irps->FileObject, TRUE);
		else if (state == TCP_STATE_CLOSED)
			del_tcp_conn(irps->FileObject, TRUE);
		else
			KdPrint(("[tdi_fw] tdi_disconnect_complete: weird conn state: %d\n", state));
		}
	
	return tdi_generic_complete(DeviceObject, Irp, Context);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情欧美一区二区| 精品久久久久久久久久久院品网| 亚洲一区在线观看免费| 欧美一区二区三区喷汁尤物| 国产成人欧美日韩在线电影| 亚洲一区二区三区视频在线播放| 26uuu色噜噜精品一区二区| 色噜噜偷拍精品综合在线| 麻豆精品精品国产自在97香蕉| 亚洲欧洲99久久| 日韩欧美一级在线播放| 91蝌蚪国产九色| 国产在线一区二区综合免费视频| 国产一区二区中文字幕| 一区二区视频在线| 国产三级精品三级| 日韩视频免费观看高清完整版在线观看 | 欧美性色综合网| 成人午夜电影网站| 精品一二三四在线| 婷婷中文字幕一区三区| 国产精品久久影院| 国产亚洲成aⅴ人片在线观看| 欧美美女一区二区| 在线观看视频一区二区欧美日韩| 国产69精品一区二区亚洲孕妇| 麻豆一区二区在线| 亚洲成人av一区| 亚洲激情自拍视频| 亚洲色大成网站www久久九九| 国产亚洲一区二区三区四区| 日韩美女视频在线| 91精品国产欧美日韩| 欧美日韩高清在线| 欧美视频一区二区在线观看| 欧洲在线/亚洲| 一本高清dvd不卡在线观看| 成人av在线一区二区三区| 国产福利一区二区三区在线视频| 久久精品国产免费| 久久se精品一区精品二区| 麻豆精品在线视频| 久久66热re国产| 麻豆国产91在线播放| 日本午夜精品一区二区三区电影| 天天做天天摸天天爽国产一区 | 国产成人精品1024| 成人国产精品免费网站| 成人久久视频在线观看| 99综合影院在线| 色猫猫国产区一区二在线视频| 在线观看精品一区| 欧美日韩一级片在线观看| 欧美日韩一级片网站| 欧美日本高清视频在线观看| 91精品国产免费| 精品精品国产高清a毛片牛牛| 26uuu另类欧美亚洲曰本| 国产欧美日韩另类一区| 亚洲欧美一区二区在线观看| 亚洲欧美区自拍先锋| 亚洲韩国一区二区三区| 青青草精品视频| 狠狠色丁香久久婷婷综合丁香| 国产精品88av| 91日韩在线专区| 欧美亚洲国产bt| 日韩一二三四区| 国产性做久久久久久| 亚洲乱码中文字幕| 成人免费看片app下载| av电影在线观看不卡| 91精品1区2区| 日韩欧美一二区| 中文字幕乱码亚洲精品一区 | 精品一二三四区| 成人午夜激情影院| 欧美吻胸吃奶大尺度电影 | 国产成人精品亚洲午夜麻豆| 成人激情av网| 欧美人xxxx| 国产欧美日韩另类一区| 亚洲电影中文字幕在线观看| 极品少妇一区二区三区精品视频 | 成人性生交大片免费看视频在线 | 欧美日韩一区二区三区免费看| 日韩欧美在线综合网| 国产精品拍天天在线| 午夜视频一区二区三区| 精品一区二区三区蜜桃| 欧洲一区在线观看| 久久天堂av综合合色蜜桃网| 亚洲一区二区欧美日韩| 国产盗摄一区二区| 欧美三级乱人伦电影| 精品国产凹凸成av人导航| 亚洲精品v日韩精品| 国精品**一区二区三区在线蜜桃| 91无套直看片红桃| 精品国产免费一区二区三区四区| 亚洲色图欧美激情| 国产麻豆精品95视频| 欧美日韩精品免费| 国产精品二三区| 国产自产v一区二区三区c| 91成人在线免费观看| 国产日产精品一区| 日一区二区三区| 色综合久久综合网97色综合| 久久综合狠狠综合| 亚洲成人自拍网| 一本色道久久综合亚洲精品按摩| 久久夜色精品国产噜噜av| 婷婷六月综合网| 日韩一区二区免费电影| 一片黄亚洲嫩模| 不卡av在线免费观看| xnxx国产精品| 久久精品国产亚洲a| 精品视频在线免费看| 亚洲人妖av一区二区| 成人精品国产一区二区4080| 久久天堂av综合合色蜜桃网| 久久99精品视频| 日韩免费观看2025年上映的电影| 午夜影视日本亚洲欧洲精品| 色综合夜色一区| 国产精品久久久久久户外露出| 国产成人自拍网| 久久久精品一品道一区| 国内精品国产成人| 2021久久国产精品不只是精品| 日韩高清不卡在线| 91精品国产欧美一区二区18| 日韩中文字幕91| 欧美一区二区三区白人| 日韩福利电影在线| 欧美一区二区三区人| 美脚の诱脚舐め脚责91| 日韩欧美你懂的| 韩国女主播成人在线| 久久久综合九色合综国产精品| 国内精品久久久久影院色| 国产三级欧美三级日产三级99| 国产美女精品在线| 国产女人aaa级久久久级| 粉嫩av一区二区三区粉嫩 | 热久久免费视频| 欧美一级夜夜爽| 经典三级一区二区| 久久一二三国产| 成人一区二区三区中文字幕| 国产精品毛片大码女人| 91老司机福利 在线| 亚洲国产精品视频| 欧美一区二区三区啪啪| 精久久久久久久久久久| 国产免费观看久久| 99免费精品在线观看| 亚洲午夜电影在线| 欧美一级国产精品| 国产激情一区二区三区桃花岛亚洲| 欧美国产欧美亚州国产日韩mv天天看完整 | 丁香六月综合激情| 亚洲婷婷综合久久一本伊一区| 欧洲亚洲精品在线| 蜜臀av一级做a爰片久久| 国产日韩影视精品| 欧美色图激情小说| 美脚の诱脚舐め脚责91 | 91国产福利在线| 蜜臀久久99精品久久久久宅男| 久久久不卡影院| 91麻豆国产在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 国产欧美日韩不卡| 欧美私模裸体表演在线观看| 国产一区二区在线看| 亚洲欧美日韩电影| 精品欧美一区二区三区精品久久| 成人精品一区二区三区中文字幕| 亚洲午夜久久久久| 欧美精品一区二区蜜臀亚洲| 色偷偷88欧美精品久久久| 蜜臀av一区二区| 亚洲女性喷水在线观看一区| 51精品视频一区二区三区| 成人午夜私人影院| 日韩av在线播放中文字幕| 中文字幕乱码一区二区免费| 欧美一区二区三区四区高清| av一区二区三区四区| 美女在线观看视频一区二区| 亚洲三级电影网站| 精品99一区二区| 欧美三级视频在线观看| 懂色av一区二区三区蜜臀| 日本视频免费一区| 亚洲男同1069视频| 久久久久久9999|