日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Netty自娱自乐之协议栈设计

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Netty自娱自乐之协议栈设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

---恢復內容開始---

  俺工作已經一年又6個月了,想想過的真快,每天寫業務,寫業務,寫業務......。然后就是祈禱著,這次上線不要出現線上bug。繼續這每天無聊的增刪改查,學習學習一下自己感興趣的事,就把自己當作小學生。然后學學習,打發打發時間,如果以后自己能用到呢?這又有誰說的清楚。

?  好了,最近在學習Netty,主要看了這2本書的一些內容,第一本就是《Netty實戰》,第二本就是《Netty權威指南》。然后在看到Netty權威指南上有一章比較感興趣,用了整整一章用來描寫如何取自己定義一個協議。接著閱讀完后,我就按照書本上的相關內容,去實現了一下。糾正了一下書本上的錯誤代碼。工作都是在開發電商項目,基本上對底層傳輸這一塊接觸甚少。如果有機會想去一個游戲公司,這樣看看能不能接觸更多的網絡傳輸相關內容。哎,不知道這樣的去轉有木有要,糾結。。。。。。。。。

  好了,現在開始看書和事件的經歷吧。

  現在,我們設計一個傳輸協議如下

2字節:協議固定值 1字節:主版本號
1字節:副版本號
消息長度 :消息頭 和消息體
4字節
回話ID, 全局唯一
8字節
業務請求消息
1:業務請求消息
2:業務響應消息
3:握手請求消息
4:握手應答消息
5:心跳請求消息
6:心跳應答消息
1字節
優先級別
1字節
附件

code length sessionId type primary attachment

  上面的定義,是來著Netty的權威指南。這個是協議的頭。然后接下來是一個協議體。而協議體在編碼上就是一個Object.

協議頭協議體
customHeader bodyMessage

  根據上面的定義,直接寫出協議定義model.直接上代碼:

1 @Data 2 @ToString 3 public class NettyCustomHeader { 4 /** 5 * code 2字節:netty協議消息, 1字節:主版本號 1字節:副版本號 4 6 */ 7 private int code = 0xABCD0101; 8 9 /** 10 * 消息長度 :消息頭 和消息題 32 11 */ 12 private int length; 13 14 /** 15 * 回話ID, 全局唯一 64 16 */ 17 private long sessionId; 18 19 /** 20 * 業務請求消息 1:業務請求消息 2:業務響應消息 3:握手請求消息 4:握手應答消息 5:心跳請求消息 6:心跳應答消息 21 */ 22 private byte type; 23 24 /** 25 * 優先級別 26 */ 27 private byte primary; 28 29 /** 30 * 附件 31 */ 32 Map<String, Object> attachment; 33 34 } 1 @Data 2 @ToString 3 public class NettyCustomMessage { 4 5 /** 6 * 消息頭 7 */ 8 private NettyCustomHeader customHeader; 9 10 /** 11 * 消息體 12 */ 13 private Object bodyMessage; 14 15 16 }

  學過Netty的同學或者了解的同學知道,Netty是通過ChannelHandler來處理IO消息的。我編碼的Netty版本是4。那么處理消息首先第一步就是解碼,LengthFieldBasedFrameDecoder這個解碼器是基于長度的解碼器,并且能解決TCP/IP包的粘包和拆包問題。代碼如下。

?

1 public class ByteBuf2NettyMessageDecoder extends LengthFieldBasedFrameDecoder { 2 3 // private NettyMarshallingDecoder marshallingDecoder = NettyMarshallingFactory.buildNettyMarshallingDecoder(); 4 5 public ByteBuf2NettyMessageDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength) { 6 super(maxFrameLength, lengthFieldOffset, lengthFieldLength); 7 } 8 9 public ByteBuf2NettyMessageDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) { 10 super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip); 11 } 12 13 public ByteBuf2NettyMessageDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) { 14 super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); 15 } 16 17 public ByteBuf2NettyMessageDecoder(ByteOrder byteOrder, int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) { 18 super(byteOrder, maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); 19 } 20 21 @Override 22 protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { 23 //調用父類decode ,得到整包消息 24 ByteBuf readBuf = (ByteBuf) super.decode(ctx, in); 25 if (readBuf == null) { 26 return null; 27 } 28 NettyCustomMessage customMessage = new NettyCustomMessage(); 29 NettyCustomHeader customHeader = new NettyCustomHeader(); 30 customHeader.setCode(readBuf.readInt()); 31 customHeader.setLength(readBuf.readInt()); 32 customHeader.setSessionId(readBuf.readLong()); 33 customHeader.setType(readBuf.readByte()); 34 customHeader.setPrimary(readBuf.readByte()); 35 36 int attachmentSize = readBuf.readByte(); 37 if (attachmentSize > 0) { 38 Map<String, Object> attachment = new HashMap<String, Object>(); 39 for (int i = 0; i < attachmentSize; i++) { 40 int keySize = readBuf.readInt(); 41 byte[] keyByte = new byte[keySize]; 42 readBuf.readBytes(keyByte); 43 String key = new String(keyByte, CharsetUtil.UTF_8.name()); 44 45 Object value = JavaByteFactory.decode(readBuf); 46 //Object value = marshallingDecoder.decode(ctx, readBuf); 47 attachment.put(key, value); 48 } 49 customHeader.setAttachment(attachment); 50 } 51 52 customMessage.setCustomHeader(customHeader); 53 if (readBuf.readableBytes() > 0) { 54 Object body = JavaByteFactory.decode(readBuf); 55 //Object body = marshallingDecoder.decode(ctx, readBuf); 56 customMessage.setBodyMessage(body); 57 } 58 59 return customMessage; 60 } 61 62 @Override 63 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 64 System.out.println(cause.getStackTrace()); 65 cause.getStackTrace(); 66 super.exceptionCaught(ctx, cause); 67 } 68 }

  上面注釋的原因,marshallingDecoder不支持java7,所以我自己寫了一個編碼/解碼幫助類,就是前4個字節代表長度,后面是就是時間內容。從上面的代碼我們知道,就是把ByteBuf轉化為自己定義的協議對象。從上面的解碼上,可能有點模糊,但是從下面的如何編碼上,就可以知道為啥是這么解碼的。

1 public class NettyMessage2ByteBufEncoder extends MessageToMessageEncoder<NettyCustomMessage> { 2 3 private NettyMarshallingEncoder nettyMarshallingEncoder; 4 5 public NettyMessage2ByteBufEncoder() { 6 // this.nettyMarshallingEncoder = NettyMarshallingFactory.buildNettyMarshallingEncoder(); 7 8 } 9 10 protected void encode(ChannelHandlerContext ctx, NettyCustomMessage msg, List<Object> out) throws Exception { 11 12 if (msg == null || msg.getCustomHeader() == null) { 13 throw new Exception("the encode message is null"); 14 } 15 16 ByteBuf sendBuf = Unpooled.buffer(); 17 sendBuf.writeInt(msg.getCustomHeader().getCode()); 18 sendBuf.writeInt(msg.getCustomHeader().getLength()); 19 sendBuf.writeLong(msg.getCustomHeader().getSessionId()); 20 sendBuf.writeByte(msg.getCustomHeader().getType()); 21 sendBuf.writeByte(msg.getCustomHeader().getPrimary()); 22 23 //attachment , 24 25 if (msg.getCustomHeader().getAttachment() != null) { 26 sendBuf.writeByte(msg.getCustomHeader().getAttachment().size()); 27 String key = null; 28 byte[] keyArray = null; 29 for (Map.Entry<String, Object> entryKey : msg.getCustomHeader().getAttachment().entrySet()) { 30 key = entryKey.getKey(); 31 keyArray = key.getBytes(CharsetUtil.UTF_8.name()); 32 sendBuf.writeInt(keyArray.length); 33 sendBuf.writeBytes(keyArray); 34 ByteBuf value = JavaByteFactory.encode(entryKey.getValue()); 35 sendBuf.writeBytes(value); 36 // nettyMarshallingEncoder.encode(ctx, entryKey.getValue(), sendBuf); 37 } 38 } else { 39 sendBuf.writeByte(0); 40 } 41 42 43 if (msg.getBodyMessage() != null) { 44 ByteBuf value = JavaByteFactory.encode(msg.getBodyMessage()); 45 sendBuf.writeBytes(value); 46 //nettyMarshallingEncoder.encode(ctx, msg.getBodyMessage(), sendBuf); 47 } 48 49 //在第5個字節開始的int 是長度,重新設置 50 sendBuf.setInt(4, sendBuf.readableBytes()); 51 52 out.add(sendBuf); 53 } 54 55 @Override 56 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 57 System.out.println(cause.getStackTrace()); 58 cause.getStackTrace(); 59 super.exceptionCaught(ctx, cause); 60 } 61 }

  從上面可以知道解碼,就是把自定義協議對象?NettyCustomMessage 通過自己的規則放到ByteBuf上。代碼比較簡單,不解釋。JavaByteFactory的代碼如下:

1 public class JavaByteFactory { 2 3 4 public static Object decode(ByteBuf byteBuf) { 5 if (byteBuf == null || byteBuf.readableBytes() <= 0) { 6 return null; 7 } 8 int valueSize = byteBuf.readInt(); 9 byte[] value = new byte[valueSize]; 10 byteBuf.readBytes(value); 11 12 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(value); 13 ObjectInputStream inputStream = null; 14 try { 15 inputStream = new ObjectInputStream(byteArrayInputStream); 16 return inputStream.readObject(); 17 } catch (IOException e) { 18 e.printStackTrace(); 19 } catch (ClassNotFoundException e) { 20 e.printStackTrace(); 21 } 22 return null; 23 24 25 } 26 27 public static ByteBuf encode(Object object) { 28 if (object == null) { 29 return null; 30 } 31 ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); 32 try { 33 ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutput); 34 objectOutputStream.writeObject(object); 35 byte[] bytes = byteOutput.toByteArray(); 36 37 ByteBuf buffer = Unpooled.buffer(bytes.length + 4); 38 buffer.writeInt(bytes.length); 39 buffer.writeBytes(bytes); 40 return buffer; 41 42 } catch (IOException e) { 43 e.printStackTrace(); 44 } 45 return null; 46 }

  編碼就是首選把Object 對象轉換了byte []數組,然后寫入4個字節為byte[]數組的長度,接著是數組的內容到ByteBuf對象上。相應的解碼就是先獲取4個字節,得到后面字節長度,接著讀取指定長度即可。

  接著心跳和權限檢測都是在解碼器之后進行業務的處理。直接上代碼。

  下面是權限認證的請求handler和響應handler.

1 public class AuthorityCertificationRequestHanlder extends ChannelInboundHandlerAdapter { 2 3 @Override 4 public void channelActive(ChannelHandlerContext ctx) throws Exception { 5 ctx.writeAndFlush(buildAuthorityCertificationMsg()); 6 } 7 8 @Override 9 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 10 NettyCustomMessage message = (NettyCustomMessage) msg; 11 if (message != null && message.getCustomHeader() != null && message.getCustomHeader().getType() == NettyMessageConstant.CUSTOMER_AUTH_CERTI_TYPE) { 12 byte authResult = (Byte) message.getBodyMessage(); 13 if (authResult != (byte) 0) { //握手失敗。關閉鏈接 14 ctx.close(); 15 return; 16 } 17 System.out.println("authority certification is success ....."); 18 ctx.fireChannelRead(msg); 19 } else { 20 ctx.fireChannelRead(msg); 21 } 22 23 } 24 25 @Override 26 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 27 cause.getStackTrace(); 28 ctx.channel().close(); 29 System.out.println(cause.getStackTrace()); 30 ctx.fireExceptionCaught(cause); 31 } 32 33 34 protected NettyCustomMessage buildAuthorityCertificationMsg() { 35 NettyCustomMessage message = new NettyCustomMessage(); 36 NettyCustomHeader customHeader = new NettyCustomHeader(); 37 customHeader.setType(NettyMessageConstant.CUSTOMER_AUTH_CERTI_TYPE); 38 message.setCustomHeader(customHeader); 39 return message; 40 } 41 42 } 1 public class AuthorityCertificationResponseHanlder extends ChannelInboundHandlerAdapter { 2 3 private Map<String, Boolean> authority = new ConcurrentHashMap<String, Boolean>(); 4 5 private String[] ipList = new String[]{"127.0.0.1"}; 6 7 @Override 8 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 9 10 NettyCustomMessage customMessage = (NettyCustomMessage) msg; 11 NettyCustomMessage response; 12 if (customMessage.getCustomHeader() != null && customMessage.getCustomHeader().getType() == NettyMessageConstant.CUSTOMER_AUTH_CERTI_TYPE) { 13 String remoteAddress = ctx.channel().remoteAddress().toString(); 14 if (authority.containsKey(remoteAddress)) { //重復登陸 15 response = buildAuthorCertiResponseMessage((byte) -1); 16 } else { 17 InetSocketAddress inetSocketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); 18 boolean isAuth = false; 19 for (String ip : ipList) { 20 if (ip.equals(inetSocketAddress.getAddress().getHostAddress())) { 21 isAuth = true; 22 break; 23 } 24 } 25 if (isAuth) { 26 response = buildAuthorCertiResponseMessage((byte) 0); 27 authority.put(remoteAddress, true); 28 } else { 29 response = buildAuthorCertiResponseMessage((byte) -1); 30 } 31 } 32 System.out.println("the client [" + remoteAddress + "] is connecting ,status:" + response); 33 ctx.writeAndFlush(response); 34 return; 35 } 36 ctx.fireChannelRead(msg); 37 } 38 39 40 @Override 41 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 42 System.out.println(cause.getStackTrace()); 43 cause.getStackTrace(); 44 String remoteAddress = ctx.channel().remoteAddress().toString(); 45 authority.remove(remoteAddress); 46 ctx.channel().close(); 47 ctx.fireExceptionCaught(cause); 48 } 49 50 private NettyCustomMessage buildAuthorCertiResponseMessage(byte body) { 51 NettyCustomMessage message = new NettyCustomMessage(); 52 NettyCustomHeader customHeader = new NettyCustomHeader(); 53 customHeader.setType(NettyMessageConstant.SERVER_AUTH_CERTI_TYPE); 54 message.setCustomHeader(customHeader); 55 message.setBodyMessage(body); 56 return message; 57 } 58 59 }

  下面是心跳檢測handler

1 public class HeartBeatCheckRequestHandler extends ChannelInboundHandlerAdapter { 2 3 private volatile ScheduledFuture<?> scheduledFuture; 4 5 @Override 6 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 7 NettyCustomMessage customMessage = (NettyCustomMessage) msg; 8 if (customMessage.getCustomHeader() != null && customMessage.getCustomHeader().getType() == NettyMessageConstant.SERVER_AUTH_CERTI_TYPE) { 9 scheduledFuture = ctx.executor().scheduleAtFixedRate(new HeartBeatCheckTask(ctx), 0, 5000, TimeUnit.MILLISECONDS); 10 System.out.println("the client [ " + ctx.channel().localAddress().toString() + " ] send heart beat ..........."); 11 } else if (customMessage.getCustomHeader() != null && customMessage.getCustomHeader().getType() == NettyMessageConstant.HEART_BEAT_CHECK_PONG_TYPE) { 12 System.out.println("the client [ " + ctx.channel().localAddress().toString() + " ] recieve heart beat ............."); 13 } else { 14 ctx.fireChannelRead(msg); 15 } 16 17 } 18 19 @Override 20 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 21 System.out.println(cause.getStackTrace()); 22 cause.getStackTrace(); 23 if (scheduledFuture != null) { 24 scheduledFuture.cancel(true); 25 scheduledFuture = null; 26 } 27 ctx.fireExceptionCaught(cause); 28 } 29 30 class HeartBeatCheckTask implements Runnable { 31 32 private ChannelHandlerContext context; 33 34 public HeartBeatCheckTask(ChannelHandlerContext context) { 35 this.context = context; 36 } 37 38 @Override 39 public void run() { 40 NettyCustomMessage customMessage = new NettyCustomMessage(); 41 NettyCustomHeader customHeader = new NettyCustomHeader(); 42 customHeader.setType(NettyMessageConstant.HEART_BEAT_CHECK_PING_TYPE); 43 customMessage.setCustomHeader(customHeader); 44 context.writeAndFlush(customMessage); 45 System.out.println("the client [ " + context.channel().localAddress().toString() + " ] send heart beat to server ...."); 46 47 } 48 } 49 } 1 public class HeartBeatCheckResponseHandler extends ChannelInboundHandlerAdapter { 2 3 @Override 4 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 5 NettyCustomMessage customMessage = (NettyCustomMessage) msg; 6 if (customMessage.getCustomHeader() != null && customMessage.getCustomHeader().getType() == NettyMessageConstant.HEART_BEAT_CHECK_PING_TYPE) { 7 System.out.println("the server recieve the client [ " + ctx.channel().remoteAddress().toString() + " ] heart beat check package,"); 8 9 NettyCustomMessage sendPongMessage = new NettyCustomMessage(); 10 NettyCustomHeader customHeader = new NettyCustomHeader(); 11 customHeader.setType(NettyMessageConstant.HEART_BEAT_CHECK_PONG_TYPE); 12 sendPongMessage.setCustomHeader(customHeader); 13 ctx.writeAndFlush(customMessage); 14 return; 15 } 16 ctx.fireChannelRead(msg); 17 } 18 19 @Override 20 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 21 System.out.println(cause.getStackTrace()); 22 cause.getStackTrace(); 23 super.exceptionCaught(ctx, cause); 24 } 25 26 @Override 27 public void channelInactive(ChannelHandlerContext ctx) throws Exception { 28 System.out.println("the client [ " + ctx.channel().remoteAddress().toString() + " ] is close ....,then close channel"); 29 ctx.channel().close(); 30 } 31 32 33 }

  最后是我們的客戶端和服務端代碼,如下:

1 public class NettyProtocalClient { 2 private ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1); 3 4 private Bootstrap bootstrap; 5 6 private EventLoopGroup eventLoopGroup; 7 8 private String host; 9 10 private int port; 11 12 private int localPort; 13 14 public NettyProtocalClient(String host, int port) { 15 this(7777, host, port); 16 } 17 18 public NettyProtocalClient(int localPort, String host, int port) { 19 this.host = host; 20 this.port = port; 21 this.localPort = localPort; 22 } 23 24 public void connect() throws InterruptedException { 25 try { 26 bootstrap = new Bootstrap(); 27 eventLoopGroup = new NioEventLoopGroup(); 28 bootstrap.group(eventLoopGroup) 29 .channel(NioSocketChannel.class) 30 .option(ChannelOption.TCP_NODELAY, true) 31 .handler(new ChannelInitializer<io.netty.channel.Channel>() { 32 @Override 33 protected void initChannel(Channel ch) throws Exception { 34 ch.pipeline() 35 .addLast("log", new LoggingHandler(LogLevel.INFO)) 36 .addLast("decoder", new ByteBuf2NettyMessageDecoder(6 * 1024, 4, 4, -8, 0, true)) 37 .addLast("encoder", new NettyMessage2ByteBufEncoder()) 38 .addLast("timeout", new ReadTimeoutHandler(50)) 39 .addLast("authority", new AuthorityCertificationRequestHanlder()) 40 .addLast("hearbeat", new HeartBeatCheckRequestHandler()); 41 42 43 } 44 }); 45 ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port), new InetSocketAddress("127.0.0.1", localPort)).sync(); 46 future.channel().closeFuture().sync(); 47 } finally { 48 if (eventLoopGroup != null) { 49 eventLoopGroup.shutdownGracefully().sync(); 50 } 51 executorService.execute(new Runnable() { 52 @Override 53 public void run() { 54 try { 55 TimeUnit.SECONDS.sleep(5); 56 connect(); 57 } catch (InterruptedException e) { 58 e.printStackTrace(); 59 } 60 } 61 }); 62 63 } 64 } 65 } 1 public class NettyProtocalServer { 2 private ServerBootstrap serverBootstrap; 3 4 private EventLoopGroup boss; 5 6 private EventLoopGroup worker; 7 8 private String host; 9 10 11 private int port; 12 13 public NettyProtocalServer(String host, int port) { 14 this.host = host; 15 this.port = port; 16 } 17 18 public void start() throws InterruptedException { 19 try { 20 serverBootstrap = new ServerBootstrap(); 21 boss = new NioEventLoopGroup(1); 22 worker = new NioEventLoopGroup(); 23 24 25 serverBootstrap.group(boss, worker) 26 .channel(NioServerSocketChannel.class) 27 .handler(new LoggingHandler(LogLevel.INFO)) 28 .option(ChannelOption.SO_BACKLOG, 1024) 29 .childHandler(new ChannelInitializer<Channel>() { 30 @Override 31 protected void initChannel(Channel ch) throws Exception { 32 ch.pipeline() 33 .addLast("log",new LoggingHandler(LogLevel.INFO)) 34 .addLast("decoder", new ByteBuf2NettyMessageDecoder(6 * 1024, 4, 4, -8, 0, true)) 35 .addLast("encoder", new NettyMessage2ByteBufEncoder()) 36 .addLast("timeout", new ReadTimeoutHandler(50)) 37 .addLast("authority", new AuthorityCertificationResponseHanlder()) 38 .addLast("hearbeat", new HeartBeatCheckResponseHandler()); 39 40 } 41 }); 42 ChannelFuture future = serverBootstrap.bind(new InetSocketAddress(host, port)).sync(); 43 future.channel().closeFuture().sync(); 44 } finally { 45 if (boss != null) { 46 boss.shutdownGracefully(); 47 } 48 if (worker != null) { 49 worker.shutdownGracefully(); 50 } 51 } 52 } 53 }

  最后看一看運行結果吧:

  服務端顯示內容:

  客戶端顯示內容:

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

---恢復內容結束---

轉載于:https://www.cnblogs.com/liferecord/p/7506487.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Netty自娱自乐之协议栈设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品无av码在线观看 | 探花系列在线 | 网站在线观看你们懂的 | 国产乱码精品一区二区蜜臀 | 久久人人插 | 日韩在线观看一区二区 | 国产精品免费不 | 国产破处视频在线播放 | 免费视频三区 | 久久电影日韩 | 久久伦理电影网 | 日韩欧美高清一区二区三区 | 色91av| 久久国产视频网站 | 免费精品在线 | avlulu久久精品 | 国产人成一区二区三区影院 | 久久一视频 | 97超碰色| 亚洲蜜桃av| 成人sm另类专区 | 日韩大片在线免费观看 | 日日日爽爽爽 | 国产视频在线免费观看 | 免费在线观看黄 | 天天激情在线 | 91天堂在线观看 | 日本论理电影 | 婷婷色中文网 | 久久久久久久久久久综合 | 521色香蕉网站在线观看 | 91精品一区二区三区蜜桃 | 久久96国产精品久久99软件 | 亚洲成av人片在线观看www | 欧美另类xxxxx | 国产日韩欧美视频在线观看 | 五月婷婷丁香在线观看 | 日韩久久激情 | 91传媒视频在线观看 | 麻豆传媒一区二区 | 去干成人网 | 天堂av网址 | 欧美成人日韩 | 中文字幕久久久精品 | 国产精品久久久久久久久免费 | 99在线免费视频 | 一区三区视频在线观看 | 国产精品久久久久9999 | 福利av影院 | 亚洲国产三级 | 久久国产美女 | 国产日本三级 | 91在线视频免费91 | 日韩mv欧美mv国产精品 | 日韩欧美中文 | 日韩欧美在线免费 | 青青河边草免费直播 | 在线视频日韩欧美 | 久草视频手机在线 | 久久中文字幕导航 | 特级西西www44高清大胆图片 | 中文字幕电影网 | 在线观看精品一区 | 精品国产乱码久久久久久1区二区 | 99久热在线精品视频成人一区 | 久久久久久久影院 | 在线观看国产永久免费视频 | 亚洲精品自在在线观看 | 婷婷色在线播放 | 久草在线视频网 | 一级黄色电影网站 | 久久久精品一区二区三区 | 国产日韩视频在线播放 | 97国产在线播放 | 国产中文在线视频 | 一区二区三区av在线 | 色婷婷在线观看视频 | 女人18毛片a级毛片一区二区 | 欧美性粗大hdvideo | 欧美精品一区二区三区四区在线 | 国产热re99久久6国产精品 | 国产视频午夜 | 久久精品麻豆 | 91传媒免费观看 | 懂色av懂色av粉嫩av分享吧 | 黄色毛片观看 | 久久免费大片 | 在线免费av播放 | 激情久久小说 | 日韩欧美区| 天天曰天天干 | 99国产成+人+综合+亚洲 欧美 | 日本久久久久 | 欧美日韩精品在线观看 | 日本大片免费观看在线 | 日本最新一区二区三区 | 99久久综合精品五月天 | ww亚洲ww亚在线观看 | 视频二区| 亚洲成人av电影 | 九九精品在线观看 | 97精品久久人人爽人人爽 | 美女视频网站久久 | 亚洲精品国产免费 | 久久高清| 成人免费毛片aaaaaa片 | 亚洲在线成人精品 | 91高清不卡 | 亚洲成av人片在线观看 | 在线观看色网 | 久久视影 | 日韩高清在线观看 | 久二影院 | 欧美一级看片 | 日本精品xxxx | 欧美日韩视频在线 | 日韩影视在线 | 开心激情久久 | 日日夜夜天天久久 | 91视频在线观看免费 | 96看片| 国产精品美女久久久久久网站 | 亚洲 欧美 精品 | 亚洲免费精彩视频 | 日韩免费在线观看网站 | 国产黄色看片 | 亚洲精品久久久久久久不卡四虎 | 久久y | 99re热精品视频 | 久久久久久久久网站 | 五月开心六月婷婷 | 99免费在线观看 | 婷香五月 | 精品美女在线视频 | 午夜精品视频一区二区三区在线看 | 国产麻豆电影在线观看 | 午夜视频色 | 亚洲精品电影在线 | 日韩精品不卡在线观看 | 欧美国产日韩在线观看 | 97超碰人人澡人人 | 国产精品v a免费视频 | 精品一区二区久久久久久久网站 | 亚洲国产人午在线一二区 | 亚洲精品资源在线观看 | 国产视频手机在线 | 超碰人人乐 | 色在线最新 | 黄网站a | 天天艹天天干天天 | 特级aaa毛片| 色在线最新 | 久久久av免费 | 免费看片网页 | 五月婷婷在线视频观看 | 一区免费观看 | 99热.com | 免费看黄视频 | 久久精品黄 | 久久综合婷婷国产二区高清 | 亚洲国产高清在线观看视频 | 日韩久久一区二区 | 中文国产字幕在线观看 | 久久午夜羞羞影院 | 久草av在线播放 | 天天撸夜夜操 | 天堂久久电影网 | 中文字幕在线视频免费播放 | 在线观看免费91 | 中文字幕在线影视资源 | 伊人天天综合 | 岛国av在线不卡 | 成人av在线电影 | 九九热精 | 中文字幕资源网 | 九色91在线视频 | 激情在线五月天 | 人人玩人人弄 | av片一区二区 | 日韩高清免费在线观看 | 亚洲视频在线免费观看 | 国产精品白浆视频 | 日韩中文在线字幕 | 国产不卡精品 | 五月天狠狠操 | 91在线麻豆 | 粉嫩一区二区三区粉嫩91 | 九九九九热精品免费视频点播观看 | 亚洲精品国产自产拍在线观看 | 中文字幕免费不卡视频 | www.黄色在线 | 中文字幕麻豆 | 中文字幕在线观看视频网站 | 午夜免费视频网站 | 欧美另类高潮 | 91成熟丰满女人少妇 | 国产精品久久久久久久av大片 | www成人精品 | а中文在线天堂 | 超碰在线个人 | 超碰午夜| 超碰人人99 | 超碰免费久久 | 亚洲国产精品激情在线观看 | 99色视频在线 | 99热99| 一区二区三区久久 | 热re99久久精品国产66热 | 国产成人综 | 日韩免费b | 国产亚洲视频在线免费观看 | 天天射天天操天天干 | 国产精品久久毛片 | 免费看的黄色片 | 国产精品美女www爽爽爽视频 | 国产黄色av影视 | 99国产精品视频免费观看一公开 | 国产精品日韩高清 | 国产精品久久久久久婷婷天堂 | 国产精品入口麻豆 | 国偷自产视频一区二区久 | 伊人五月天婷婷 | 91精品国产91p65 | 亚洲1级片 | av专区在线 | 99国内精品 | 中文字幕人成一区 | 国产精品免费小视频 | 91精品国产综合久久久久久久 | 久久高视频 | 成人h在线播放 | 天天躁日日躁狠狠躁av麻豆 | 色综合久久88色综合天天6 | 久热免费在线观看 | 成人性生交大片免费看中文网站 | 美女网站视频免费都是黄 | 五月开心六月婷婷 | www.夜夜骑.com | 激情久久五月天 | 一区二区三区四区在线免费观看 | 在线黄色观看 | 特级西西444www大精品视频免费看 | 97精品电影院 | 亚洲成a人片77777潘金莲 | 日韩视频精品在线 | 在线99热 | 免费看黄色91 | 日本激情视频中文字幕 | 久久国产精品99久久人人澡 | 中文字幕 国产视频 | 成人中文字幕+乱码+中文字幕 | 久久精品日产第一区二区三区乱码 | 超碰97免费在线 | 国产麻豆精品久久 | 亚洲波多野结衣 | 成人av久久 | 亚洲精品白浆高清久久久久久 | 成人av免费 | 91精品久久久久久 | 国内精品久久久久影院一蜜桃 | 丁香在线观看完整电影视频 | 国产成人久久av免费高清密臂 | 最新色站| 国产精品热 | 国产一区二区视频在线播放 | 久久综合九色综合97婷婷女人 | 伊色综合久久之综合久久 | 久久艹综合 | 日日干 天天干 | 日本在线视频一区二区三区 | 久草在线资源免费 | 中文一区在线 | 国产96在线视频 | 麻豆一区二区三区视频 | www.狠狠插.com | 超碰97久久| 中文字幕在线视频一区二区三区 | 日韩欧美视频在线免费观看 | 一区二区视频电影在线观看 | 天天操天天舔天天爽 | 婷婷av资源| 欧美日韩午夜爽爽 | 久久久久 免费视频 | 欧美aaa大片 | 久草在线免费在线观看 | 成人h电影 | 日本韩国精品一区二区在线观看 | 日韩激情网 | 天天综合视频在线观看 | 日本三级香港三级人妇99 | 国内视频在线观看 | 亚洲精品视频在线观看免费视频 | 黄网在线免费观看 | 欧洲一区精品 | 午夜精品一区二区三区在线视频 | 国精产品999国精产品岳 | 国产黄色免费看 | 精品国产一区二区久久 | 在线v| 黄色av大片 | 欧美性极品xxxx做受 | 久久国产剧场电影 | 中文一区二区三区在线观看 | 欧美9999| 黄色亚洲精品 | 麻豆精品传媒视频 | 国产综合精品一区二区三区 | 精品视频亚洲 | 超碰成人网 | 天天摸天天操天天爽 | 99久久日韩精品视频免费在线观看 | 久久香蕉电影网 | 亚洲激情在线播放 | 色婷婷av在线 | 久久99国产视频 | 中国一级片在线 | 在线观看91| 日韩在线视频一区 | 操高跟美女 | 国产精品不卡一区 | av片在线看 | 欧美一级特黄高清视频 | 欧美99精品 | 久久精品一级片 | 999成人精品 | 在线激情网 | wwwww.国产| 国产福利在线免费 | 色婷婷电影网 | 亚洲在线视频播放 | 免费一级片在线观看 | 91在线看免费 | 国产丝袜在线 | 亚洲精品小视频 | 亚洲精品国产精品国自产观看 | 亚洲国产精品成人精品 | 亚洲久久视频 | 天天操天天射天天爽 | 中文字幕成人 | 免费日韩 精品中文字幕视频在线 | 免费三级黄 | 国产精品二区在线 | 国产中文在线字幕 | 色综合久久88 | 亚洲最大av网站 | 成人97视频一区二区 | 久久女同性恋中文字幕 | 成人在线视 | 国产高清视频在线播放一区 | 天天做天天爱夜夜爽 | 日韩在线免费视频 | 欧美人zozo | 亚洲经典中文字幕 | 91电影福利 | av资源免费观看 | 国内三级在线 | 九九久久精品视频 | 国产精品视频大全 | 久久综合成人网 | 中国一级片在线观看 | 国产精品乱看 | 久久国产欧美日韩精品 | 麻豆免费精品视频 | 免费午夜网站 | 天天爱天天插 | 免费看日韩片 | 亚洲人人网 | 亚洲视频axxx| 波多野结衣综合网 | 91av蜜桃 | 超碰精品在线观看 | 国产精品成人免费一区久久羞羞 | 色婷婷激情电影 | 日韩a免费 | 又爽又黄在线观看 | 国产一区高清在线观看 | 亚洲精品伦理在线 | 在线不卡的av | 中文字幕在线观看免费观看 | 97超碰免费 | 91欧美国产 | 一本色道久久综合亚洲二区三区 | 亚洲天堂va | 日本中文字幕在线 | 久久综合久久久久88 | 婷婷网址 | 亚洲欧美国产视频 | 日韩欧美一区二区三区在线观看 | 在线观看免费一区 | 亚洲不卡av一区二区三区 | 天堂av官网| 精品久久久久久一区二区里番 | 男女激情片在线观看 | 粉嫩aⅴ一区二区三区 | 欧美疯狂性受xxxxx另类 | 亚洲伊人成综合网 | 久久久免费精品国产一区二区 | 欧美精品久久久久久久亚洲调教 | 99久久精品国产毛片 | 草草草影院 | 国产色久 | www.色午夜,com | 国产精品视频资源 | 国产一区成人在线 | 黄色三级久久 | 亚洲免费在线观看视频 | 久艹视频在线观看 | 亚洲一二三在线 | 精品国产91亚洲一区二区三区www | 国偷自产视频一区二区久 | 五月婷婷丁香激情 | 97电影在线看视频 | 成人av手机在线 | 四虎在线观看精品视频 | 免费a v观看 | 丁香六月中文字幕 | 2021国产视频| 免费日韩电影 | 日韩视频免费观看高清完整版在线 | 日本午夜免费福利视频 | 中文字幕一区在线观看视频 | 成人精品国产免费网站 | 中文字幕乱码日本亚洲一区二区 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产 成人 久久 | 国产午夜麻豆影院在线观看 | 久久国内免费视频 | av资源在线看| 精品在线小视频 | 中文字幕久久精品亚洲乱码 | 久久视频一区 | 久久尤物电影视频在线观看 | 黄色免费电影网站 | 日本电影久久 | 精品国产aⅴ麻豆 | 99re亚洲国产精品 | 久久久久在线观看 | 狠狠色丁香婷婷综合久小说久 | 免费在线观看国产黄 | 亚洲精品视频在线观看免费视频 | 麻豆成人精品视频 | 射射射av | 久久99中文字幕 | 久久久九九 | 精品亚洲男同gayvideo网站 | 成人影片免费 | 久久精品九色 | 五月天久久久久久 | 久久黄色美女 | 成人毛片一区二区三区 | 一区二区三区视频 | 亚洲国产午夜 | 色五月激情五月 | 日韩欧美一二三 | 不卡的av电影在线观看 | 欧美一进一出抽搐大尺度视频 | 天堂久色| 亚洲国产成人久久 | 在线高清一区 | 日本在线观看视频一区 | 黄色免费网站下载 | 在线观看亚洲精品视频 | 涩涩色亚洲一区 | 一本一本久久a久久精品综合小说 | 91在线视频免费观看 | 色a网| 国产大陆亚洲精品国产 | 在线视频一区二区 | 亚洲欧美国内爽妇网 | 国产高清日韩 | 91成人精品观看 | a天堂最新版中文在线地址 久久99久久精品国产 | 亚洲天天在线日亚洲洲精 | 欧美一级片在线播放 | 狠狠网 | 国内精品久久久久国产 | 人人爽人人澡人人添人人人人 | 黄色软件视频大全免费下载 | 欧美另类亚洲 | 免费福利片2019潦草影视午夜 | 免费在线观看av不卡 | 在线一区二区三区 | 俺要去色综合狠狠 | 五月激情电影 | 欧美精品一区二区三区一线天视频 | 日韩在线观看视频网站 | 国产精品一区免费观看 | 国产高清无av久久 | 色97在线 | 国产免费亚洲 | 在线精品视频免费播放 | 国产精品一区在线观看你懂的 | 天天操夜夜操天天射 | 久久tv视频 | 麻豆视频www | 精品久久影院 | 久要激情网 | 国产黄色播放 | 日韩欧美精品在线观看视频 | 午夜精品久久久久久久99 | 成人国产精品久久久久久亚洲 | 97人人模人人爽人人喊中文字 | 天天操操操操操操 | 91麻豆国产福利在线观看 | 日韩特级黄色片 | 免费看的国产视频网站 | 亚洲激情一区二区三区 | 在线观看的a站 | 国产中文字幕一区 | 色婷婷激情四射 | 综合久久久久 | 欧美激情在线看 | 国产精品久久久久久久久毛片 | 午夜黄色一级片 | 国产精品二区在线观看 | 中文字幕 在线看 | 中文字幕色婷婷在线视频 | 天天干天天搞天天射 | 欧美精品久久久久久久免费 | 久久在线免费观看 | 欧美日韩一区二区三区不卡 | 91成年人网站 | 成人av网页 | 欧美一二三视频 | 少妇搡bbbb搡bbb搡忠贞 | 日日摸日日 | 日韩网站在线看片你懂的 | 日韩av影视在线观看 | 亚洲天天摸日日摸天天欢 | 五月婷婷操 | 久艹在线观看视频 | 五月开心网 | 99色在线观看视频 | 午夜免费视频网站 | 黄色大片免费网站 | 国产91对白在线 | 91人人人 | 国产中文字幕视频在线观看 | 欧美日韩国产综合网 | 伊人伊成久久人综合网站 | 成人免费看片网址 | 99草在线视频 | 五月婷婷丁香激情 | 亚洲精品456在线播放第一页 | 欧美福利网址 | 日韩av片在线 | 欧美日韩国产一区二区三区 | av在线8| 91精品国产麻豆国产自产影视 | 日韩久久精品一区二区三区 | 五月婷网站 | 99热这里只有精品国产首页 | 国产黄色大片 | 日本在线免费看 | 国产精品无av码在线观看 | 久久人人爽av | 丁香九月激情综合 | 很污的网站 | 中文在线免费看视频 | 国产原创在线视频 | 在线看不卡av | 久久福利影视 | 在线有码中文 | 久久艹国产视频 | 成人h动漫在线看 | 99久久精品久久久久久动态片 | 手机在线看a | 亚洲一区欧美激情 | 国内毛片毛片 | 欧美在线视频第一页 | 91精品一区二区三区蜜桃 | 久热免费在线 | 99久久精品免费看国产麻豆 | 人人爽人人爽人人片av免 | 97精品国产手机 | 国产精品99久久久久久武松影视 | 成人免费在线网 | 国产精品美女久久久久久久久久久 | 国产精品成久久久久 | 亚洲成人黄色在线观看 | 亚洲欧美精品一区二区 | www日韩| 福利视频一区二区 | 久草在线这里只有精品 | 精品久久国产 | 亚洲va欧美va人人爽春色影视 | 91精品久久久久久粉嫩 | 91九色视频 | 久久99久久99精品中文字幕 | 一二区精品| 国产精品视频 | 国产免费国产 | 99久久精品国产一区二区三区 | 日本一区二区三区免费看 | 麻豆视频一区 | 亚洲国产无 | 高清精品在线 | 久久99国产综合精品免费 | 欧美一级乱黄 | 亚洲区二区 | 91九色国产 | 日韩成人黄色 | 精品av网站 | 欧美精彩视频 | 天天干天天操天天入 | 国产一级高清 | 欧美一级在线观看视频 | 日批视频在线播放 | 国产无遮挡又黄又爽馒头漫画 | 国产精品一区二区三区免费视频 | 欧美成人免费在线 | 丁香伊人网 | 中文字幕一区二区在线播放 | 综合色站导航 | 久久久精品一区二区三区 | 久久国产精品精品国产色婷婷 | 中文字幕频道 | 欧美日韩一区二区三区不卡 | 久热久草| 91精品久久久久久综合乱菊 | 中文字幕在线观看亚洲 | 亚洲精品视频一 | 国产午夜一区二区 | 国产成人在线播放 | 成人资源网 | 毛片网站免费在线观看 | 久久艹久久 | 中文字幕一区2区3区 | 91免费试看| 不卡的av中文字幕 | 成人精品久久久 | 日日夜夜狠狠操 | 91丨九色丨国产丨porny精品 | 欧美精彩视频在线观看 | 国产精品理论在线观看 | 日韩久久精品一区二区 | 精品99在线视频 | av片无限看 | 天天拍夜夜拍 | 成人免费网站视频 | www久久99 | 成人在线播放网站 | 九九在线高清精品视频 | 国产精品国产三级国产 | 国产拍揄自揄精品视频麻豆 | 中文字幕日韩无 | 日韩一级黄色av | 青草草在线 | 美女天天操| 99久久精品日本一区二区免费 | 久久人人爽人人片av | 最新动作电影 | 亚洲视频免费视频 | 亚洲精品久久在线 | 亚洲永久免费av | 99久久激情视频 | 久久免视频 | 黄色网在线播放 | 六月丁香综合网 | 人人cao | 97国产大学生情侣酒店的特点 | 欧美在线free | 欧美性脚交 | 天堂av网站 | 日本三级香港三级人妇99 | 免费av一级电影 | 国产精品99久久久久久武松影视 | 色婷婷电影 | 99亚洲精品在线 | 国产色在线,com | 国产三级精品在线 | 夜夜操狠狠干 | 91av免费看 | 亚洲美女免费视频 | 中文字幕av最新更新 | 日韩在线观看不卡 | 日韩av电影手机在线观看 | 麻豆久久久久 | 精品国产伦一区二区三区观看方式 | 日韩精品一区二区三区三炮视频 | av福利超碰网站 | 久久国产精品久久w女人spa | 国产视频一区在线播放 | 天天操天天爽天天干 | 人人爽人人爽 | 欧美一区二区三区免费观看 | 9热精品 | 九九爱免费视频 | 热热热热热色 | 97国产大学生情侣酒店的特点 | 91精品国产乱码久久桃 | 免费日韩一区 | 日日爱av| 91久久爱热色涩涩 | 亚洲视频免费视频 | 国产一区二区三区高清播放 | 欧美在线18| 亚洲欧美一区二区三区孕妇写真 | 日韩激情网 | 九九久久久久久久久激情 | 91福利免费| 91香蕉视频污在线 | 久久久久免费精品国产 | 亚洲精品电影在线 | 欧美另类色图 | 亚洲美女精品视频 | 精品福利视频在线观看 | 激情自拍av | 久久人人爽人人爽人人 | 日日夜夜艹| 成年人av在线播放 | 91在线精品秘密一区二区 | 亚洲精品成人在线 | 亚洲精品高清在线 | 日韩久久精品一区二区 | 久草在线精品观看 | 中文字幕av最新更新 | 五月天九九 | www.色就是色 | 天天射色综合 | 成人黄色小说网 | 国产区在线视频 | 国产一级电影免费观看 | 黄网站app在线观看免费视频 | 91亚洲成人 | 亚洲视频久久久 | 国产成人精品999 | 美女久久久久久久久久久 | 超碰在线97观看 | 国产亚洲视频在线免费观看 | 国产一区视频在线播放 | 狠狠久久 | 激情网在线视频 | 久久久福利 | 深爱激情五月网 | 亚洲精品久久激情国产片 | 中文在线a√在线 | 国产精品一区二区无线 | 欧美日韩一区二区视频在线观看 | 国产经典av | 在线观看视频免费大全 | 国产理论在线 | 在线观看成人小视频 | 国产91影院 | 国产在线观看免费 | 在线国产中文 | 亚洲一区二区视频在线 | 国产精彩视频一区 | 草莓视频在线观看免费观看 | 在线亚洲午夜片av大片 | 超碰在线人人艹 | 亚洲国产精品一区二区久久hs | 中文字幕在线国产精品 | 一区二区三区免费在线播放 | 九九九九九九精品 | 国产精品嫩草影院123 | 国产一级片免费播放 | av在线免费观看不卡 | 久久永久免费 | 欧美91精品久久久久国产性生爱 | 91九色视频在线播放 | 欧美极品少妇xbxb性爽爽视频 | 国产成人精品999在线观看 | 成人中文字幕在线观看 | 九九九在线 | 精品视频在线观看 | 人人插人人 | 欧美成人区 | 日韩欧美一区二区三区免费观看 | 色综合a | 久久久免费精品国产一区二区 | 亚洲欧美国产精品 | 美女视频黄是免费的 | 婷婷激情站 | 在线观看91精品视频 | 激情婷婷色 | 91看成人 | 国产成人精品a | 国产黄色美女 | 99精品免费在线 | 欧美亚洲另类在线视频 | 午夜12点 | 五月激情天 | 日本中文乱码卡一卡二新区 | 四虎在线影视 | 久久成人18免费网站 | 国产一区二区高清 | 色噜噜狠狠狠狠色综合久不 | 中文字幕在线看视频国产 | 亚洲一区二区精品在线 | 日韩精品一区二区不卡 | 亚州性色| 成人av免费在线 | 精品免费一区二区三区 | av高清在线 | 99久久精品免费看国产一区二区三区 | 国产三级在线播放 | 午夜12点| 免费看色视频 | 2019中文在线观看 | 免费观看91 | 国产精品3 | 国产福利久久 | 黄色在线网站噜噜噜 | 欧洲视频一区 | 最近中文字幕在线中文高清版 | 成人av电影免费在线播放 | 精品美女在线观看 | 黄色视屏免费在线观看 | 国产中年夫妇高潮精品视频 | 久久久久成人精品亚洲国产 | 成人久久国产 | 久草久草在线 | 婷婷丁香社区 | 激情综合站 | 欧美极品xxxx | 国产黑丝袜在线 | 国产亚洲精品女人久久久久久 | 久久在草| 米奇影视7777 | 四虎在线永久免费观看 | 最新久久久 | 中文字幕资源在线观看 | 国产老妇av | 香蕉免费 | 欧美视频99 | 亚洲黄色精品 | 欧美日韩精品综合 | 日韩欧美网址 | 久草9视频 | 亚洲欧美日韩一区二区三区在线观看 | 人人澡人人添人人爽一区二区 | 欧美91精品 | 99热在线免费观看 | 国产精品欧美精品 | 亚洲 成人 欧美 | 欧美激情视频在线免费观看 | 天天色天天综合 | 免费一级片观看 | 成人一区在线观看 | 五月婷亚洲 | 日日麻批40分钟视频免费观看 | 在线观看成人毛片 | 久久99精品国产99久久6尤 | 日韩av电影免费在线观看 | 黄色a在线| 色a网| 狠狠色丁香久久婷婷综合_中 | 亚洲国产中文在线 | 黄www在线观看 | 91香蕉视频| 国产精品久久久久久久久久直播 | 日韩专区一区二区 | 国产精品第十页 | 婷婷丁香激情综合 | 久久一区二区三区四区 | 色停停五月天 | 永久黄网站色视频免费观看w | 日韩在线观看一区二区 | 黄色一集片 | 欧美性生活久久 | 91精彩视频在线观看 | 国产精品一区二区av日韩在线 | 久久艹在线 | 婷婷丁香国产 | 亚洲视频久久久久 | 久久视频热| a成人v在线| 午夜视频黄 | 免费看黄在线看 | 国产一区二区精 | 激情综合五月天 | 在线免费视频a | 97狠狠干 | 久久高视频 | 国产精品99久久久久久久久久久久 | 亚洲精品1区2区3区 超碰成人网 | 激情综合网五月婷婷 | 黄色1级大片 | www.久久色 | 国产日女人 | 欧美一区日韩精品 | 中文字幕在线免费观看 | 国产精品精品国产色婷婷 | www狠狠| 片网站 | 最新久久久 | 综合网五月天 | av夜夜操| 欧美在线视频一区二区三区 | 欧美综合在线视频 | 日韩成人精品 | 国产成人精品一二三区 | 高清中文字幕av | 一区二区精 | 久久tv| 国产电影一区二区三区四区 | 国产精品久久久久久麻豆一区 | 国产精品一区二区久久精品爱涩 | 中文字幕电影高清在线观看 | 午夜久久久久久久久久影院 | 国产精品久久嫩一区二区免费 | 亚洲另类视频在线观看 | 久久久99精品免费观看 | 欧美日韩不卡在线 | 五月花激情 | aaaaaa毛片 | 欧美色图亚洲图片 | 一级久久久 | 又湿又紧又大又爽a视频国产 | 久久综合成人 | 日韩二区在线 | 午夜精品成人一区二区三区 | 国产成人一区三区 | 婷婷六月天综合 | 色综合久久久久久中文网 | 亚洲三级性片 | 中文字幕久久精品一区 | 色天天综合久久久久综合片 | 欧美精品在线一区 | 国产 日韩 欧美 中文 在线播放 | 中文字幕在线观看三区 | av高清影院 | av在线等 | 日韩一区二区三区免费电影 | 日本视频精品 | 久久精品视频一 | 视频福利在线观看 | 96亚洲精品久久 | 狠狠插狠狠干 | 免费欧美 | 99热精品国产一区二区在线观看 | 五月婷婷网站 | 在线成人小视频 | 精品九九九九 | 一级黄色在线视频 | 日韩网站免费观看 | 99久久精品国产一区二区成人 | 97超碰人人模人人人爽人人爱 | 国产精品久久99精品毛片三a | 深爱五月激情五月 | 精品极品在线 | 欧美国产日韩一区二区三区 | 午夜黄色一级片 | 久久黄色a级片 | 国产原创在线 | 天天爱天天射 | 国产精品69久久久久 | 日日天天干 | 人人看人人草 | 丁香花中文在线免费观看 | av在线短片| 色视频成人在线观看免 | 黄色成人免费电影 | 欧美性粗大hdvideo | 国产小视频网站 | 五月色丁香 | 欧美另类tv | 天天视频亚洲 | www.国产高清| 国产色拍拍拍拍在线精品 | 国产精品美女久久久久久免费 | 日韩va在线观看 | 国产精品麻豆欧美日韩ww | 天天综合天天做 | 亚洲欧美在线视频免费 | 久草在线免费资源站 | 成人免费在线观看电影 | 毛片在线网 | 嫩草av在线 | 日韩亚洲精品电影 | 日韩欧美国产精品 | 久久电影网站中文字幕 | 久久xxxx| 国产精品久久久久久久免费观看 | 国产精品麻豆99久久久久久 | 亚洲激情 欧美激情 | 91专区在线观看 | 亚洲在线日韩 | 亚洲精品国产精品国产 | 欧美日韩精品在线播放 | 久久天天操 | 91片黄在线观看动漫 | 黄色av电影一级片 | 久久99精品国产91久久来源 | 欧美另类69| 久草97| 国产精彩在线视频 | 99激情网 | 成 人 黄 色 视频免费播放 | www.天天干| 综合色在线观看 | 午夜黄色大片 | 在线观看激情av | 在线看欧美 | 国产精品男女啪啪 | 在线午夜| 狠狠狠狠狠狠狠干 |