精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

捕獲TCP/IP協(xié)議棧數(shù)據(jù)包的原理

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
wireshark或tcpdump相信大家都用過,這些工具看起來都很酷,因?yàn)槲覀兤綍r(shí)都是在界面看到應(yīng)用層的數(shù)據(jù),這些工具居然可以讓我們看到tcp/ip協(xié)議棧每層的數(shù)據(jù)。

[[398932]]

 本文轉(zhuǎn)載自微信公眾號(hào)「編程雜技」,作者 theanarkh   。轉(zhuǎn)載本文請(qǐng)聯(lián)系編程雜技公眾號(hào)。

wireshark或tcpdump相信大家都用過,這些工具看起來都很酷,因?yàn)槲覀兤綍r(shí)都是在界面看到應(yīng)用層的數(shù)據(jù),這些工具居然可以讓我們看到tcp/ip協(xié)議棧每層的數(shù)據(jù)。本文介紹一下查看tcp/ip協(xié)議棧數(shù)據(jù)的方法。并實(shí)現(xiàn)一個(gè)簡(jiǎn)陋的sniffer,通過nodejs暴露出來使用。我們先看實(shí)現(xiàn)。

  1. #include <stdio.h> 
  2. #include <errno.h>  
  3. #include <unistd.h> 
  4. #include <sys/socket.h> 
  5. #include <sys/types.h>   
  6. #include <linux/in.h> 
  7. #include <linux/if_ether.h> 
  8. #include <stdlib.h> 
  9. #include <node_api.h> 
  10. #define DATA_LEN 500 
  11.  
  12. static napi_value start(napi_env env, napi_callback_info info) { 
  13.   int sockfd; 
  14.   int bytes; 
  15.   char data[DATA_LEN]; 
  16.   unsigned char *ipHeader; 
  17.   unsigned char *macHeader; 
  18.   unsigned char *transportHeader; 
  19.   // 對(duì)ETH_P_IP協(xié)議的數(shù)據(jù)包感興趣,PF_PACKET在早期內(nèi)核是AF_INET 
  20.   sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP)); 
  21.   if (sockfd < 0) { 
  22.     printf("創(chuàng)建socket錯(cuò)誤"); 
  23.     exit(1); 
  24.   } 
  25.  
  26.   while (1) { 
  27.     bytes = recvfrom(sockfd,data,DATA_LEN,0,NULL,NULL); 
  28.     printf("讀到字節(jié)數(shù):%d\n",bytes); 
  29.     macHeader = data; 
  30.     printf("MAC報(bào)文----------\n"); 
  31.     printf("源Mac地址: %02x:%02x:%02x:%02x:%02x:%02x\n"
  32.            macHeader[0],macHeader[1],macHeader[2], 
  33.            macHeader[3],macHeader[4],macHeader[5]); 
  34.     printf("目的Mac地址: %02x:%02x:%02x:%02x:%02x:%02x\n"
  35.            macHeader[6],macHeader[7],macHeader[8], 
  36.            macHeader[9],macHeader[10],macHeader[11]); 
  37.     printf("上層協(xié)議: %04x\n"
  38.            (macHeader[12] << 8) + macHeader[13]); 
  39.     // 跳過Mac頭 
  40.     ipHeader = data + 6 + 6 + 2; 
  41.     printf("IP報(bào)文--------\n"); 
  42.     printf("ip協(xié)議版本:%d\n"
  43.              (ipHeader[0] & 0xF0) >> 4);  
  44.     int ipHeaderLen = (ipHeader[0] & 0x0F) << 2; 
  45.     printf("首部長度:%d\n"
  46.          ipHeaderLen); 
  47.     printf("區(qū)分服務(wù):%d\n"
  48.          ipHeader[1]);      
  49.     printf("總長度:%d\n"
  50.          (ipHeader[2]<<8)+ipHeader[3]);  
  51.     printf("標(biāo)識(shí):%d\n"
  52.          (ipHeader[4]<<8)+ipHeader[5]); 
  53.     printf("標(biāo)志:%d\n"
  54.          (ipHeader[6] & 0xE0) >> 5);      
  55.     printf("片偏移:%d\n"
  56.          (ipHeader[6] & 0x11) + ipHeader[7]);   
  57.     printf("TTL:%d\n"
  58.          ipHeader[8]); 
  59.     printf("上層協(xié)議:%d\n"
  60.          ipHeader[9]);      
  61.     printf("首部校驗(yàn)和:%x%x\n"
  62.          ipHeader[10]+ipHeader[11]);                           
  63.     printf("源ip:%d.%d.%d.%d\n"
  64.          ipHeader[12],ipHeader[13], 
  65.          ipHeader[14],ipHeader[15]); 
  66.     printf("目的ip:%d.%d.%d.%d\n"
  67.          ipHeader[16],ipHeader[17], 
  68.          ipHeader[18],ipHeader[19]); 
  69.  
  70.     transportHeader = ipHeader + ipHeaderLen; 
  71.     printf("傳輸層報(bào)文-----------\n"); 
  72.     printf("源端口:%d\n"
  73.          (transportHeader[0]<<8)+transportHeader[1]); 
  74.     printf("目的端口:%d\n"
  75.          (transportHeader[2]<<8)+transportHeader[3]); 
  76.     printf("序列號(hào):%ud%ud%ud%ud\n"
  77.          transportHeader[4],transportHeader[5],transportHeader[6],transportHeader[7]); 
  78.     printf("確認(rèn)號(hào):%ud\n"
  79.          (transportHeader[8]<<24)+(transportHeader[9]<<16)+(transportHeader[10]<<8)+(transportHeader[11])); 
  80.     printf("傳輸層首部長度:%d\n"
  81.         ((transportHeader[12] & 0xF0) >> 4) * 4); 
  82.     printf("FIN:%d\n"
  83.         transportHeader[13] & 0x01); 
  84.     printf("SYN:%d\n"
  85.         (transportHeader[13] & 0x02) >> 1); 
  86.     printf("RST:%d\n"
  87.         (transportHeader[13] & 0x04) >> 2); 
  88.     printf("PSH:%d\n"
  89.         (transportHeader[13] & 0x08) >> 3); 
  90.     printf("ACK:%d\n"
  91.         (transportHeader[13] & 0x016) >> 4); 
  92.     printf("URG:%d\n"
  93.         (transportHeader[13] & 0x32) >> 5); 
  94.     printf("窗口大小:%d\n"
  95.         (transportHeader[14] << 8) + transportHeader[15]); 
  96.     }} 
  97.  
  98. napi_value Init(napi_env env, napi_value exports) { 
  99.   napi_value func; 
  100.   napi_create_function(env, 
  101.                     NULL
  102.                     NAPI_AUTO_LENGTH, 
  103.                     start, 
  104.                     NULL
  105.                     &func); 
  106.   napi_set_named_property(env, exports, "start", func); 
  107.   return exports; 
  108.  
  109. NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) 

我們看到實(shí)現(xiàn)并不復(fù)雜,首先創(chuàng)建一個(gè)socket,然后接收socket上面的數(shù)據(jù)進(jìn)行分析就行。上面的代碼可以捕獲到所有發(fā)給本機(jī)的tcp/ip包,下面我們看看效果(有些字段還沒有仔細(xì)處理)。

下面我們來看看底層的實(shí)現(xiàn)(2.6.13.1內(nèi)核)。我們從socket函數(shù)的實(shí)現(xiàn)開始分析。

  1. asmlinkage long sys_socket(int family, int type, int protocol){ 
  2.   int retval; 
  3.   struct socket *sock; 
  4.   // 創(chuàng)建一個(gè)socket 
  5.   retval = sock_create(family, type, protocol, &sock); 
  6.   // 返回文件描述符給用戶 
  7.   retval = sock_map_fd(sock); 

接著看sock_create。

  1. int sock_create(int family, int type, int protocol, struct socket **res){ 
  2.   return __sock_create(family, type, protocol, res, 0); 
  3.  
  4. static int __sock_create(int family, int type, int protocol, struct socket **res, int kern){ 
  5.   int err; 
  6.   struct socket *sock; 
  7.   // 分配一個(gè)socket 
  8.   if (!(sock = sock_alloc())) { 
  9.     // ... 
  10.   } 
  11.   // socket類型 
  12.   sock->type  = type; 
  13.   err = -EAFNOSUPPORT; 
  14.   // 根據(jù)協(xié)議簇拿到對(duì)應(yīng)的函數(shù)集,然后調(diào)用create函數(shù) 
  15.   if ((err = net_families[family]->create(sock, protocol)) < 0) 
  16.     goto out_module_put; 

我們看到__sock_create的邏輯很簡(jiǎn)單,根據(jù)協(xié)議簇拿到對(duì)應(yīng)的函數(shù)集,然后執(zhí)行其create函數(shù)。我們看看PF_PACKET協(xié)議簇對(duì)應(yīng)的函數(shù)集。PF_PACKET協(xié)議簇通過packet_init注冊(cè)了對(duì)應(yīng)的函數(shù)集。

  1. static int __init packet_init(void){ 
  2.   sock_register(&packet_family_ops); 
  3.  
  4. static struct net_proto_family packet_family_ops = { 
  5.   .family = PF_PACKET, 
  6.   .create = packet_create, 
  7.   .owner  = THIS_MODULE, 
  8. }; 

我們看到create函數(shù)的值是packet_create。

  1. static int packet_create(struct socket *sock, int protocol){ 
  2.   struct sock *sk; 
  3.   struct packet_sock *po; 
  4.   int err; 
  5.   // 分配一個(gè)packet_sock結(jié)構(gòu)體 
  6.   sk = sk_alloc(PF_PACKET, GFP_KERNEL, &packet_proto, 1); 
  7.   // 賦值函數(shù)集 
  8.   sock->ops = &packet_ops; 
  9.   // 關(guān)聯(lián)socket和sock 
  10.   sock_init_data(sock, sk); 
  11.   // 拿到一個(gè)packet_sock結(jié)構(gòu)體,第一個(gè)字段是sock結(jié)構(gòu)體(struct packet_sock *po) 
  12.   po = pkt_sk(sk); 
  13.   sk->sk_family = PF_PACKET; 
  14.   // 接收數(shù)據(jù)包的函數(shù) 
  15.   po->prot_hook.func = packet_rcv; 
  16.   po->prot_hook.af_packet_priv = sk; 
  17.  
  18.   if (protocol) { 
  19.     po->prot_hook.type = protocol; 
  20.     dev_add_pack(&po->prot_hook); 
  21.     sock_hold(sk); 
  22.     po->running = 1; 
  23.   } 

packet_create首先創(chuàng)建了一個(gè)packet_sock結(jié)構(gòu)體并初始化,最后調(diào)用dev_add_pack。

  1. static struct list_head ptype_base[16];  
  2.  
  3. void dev_add_pack(struct packet_type *pt){ 
  4.   int hash; 
  5.  
  6.   spin_lock_bh(&ptype_lock); 
  7.   if (pt->type == htons(ETH_P_ALL)) { 
  8.     netdev_nit++; 
  9.     list_add_rcu(&pt->list, &ptype_all); 
  10.   } else { 
  11.     hash = ntohs(pt->type) & 15; 
  12.     list_add_rcu(&pt->list, &ptype_base[hash]); 
  13.   } 
  14.   spin_unlock_bh(&ptype_lock); 

我們看到dev_add_pack的邏輯是往ptype_base對(duì)應(yīng)的隊(duì)列加入一個(gè)節(jié)點(diǎn)。接著我們看看網(wǎng)卡收到數(shù)據(jù)包的時(shí)候是如何處理的。

  1. int netif_receive_skb(struct sk_buff *skb){ 
  2.   type = skb->protocol; 
  3.   list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type)&15], list) { 
  4.     if (ptype->type == type && 
  5.         (!ptype->dev || ptype->dev == skb->dev)) { 
  6.       if (pt_prev)  
  7.         ret = deliver_skb(skb, pt_prev); 
  8.       pt_prev = ptype; 
  9.     } 
  10.   } 
  11.   ret = pt_prev->func(skb, skb->dev, pt_prev); 

netif_receive_skb的邏輯中會(huì)根據(jù)收到mac包中上層協(xié)議字段找到對(duì)應(yīng)的處理函數(shù),比如本文的packet。最后執(zhí)行func。從剛才的create函數(shù)我們看到func的值是packet_rcv。

  1. static int packet_rcv(struct sk_buff *skb, struct net_device *dev,  struct packet_type *pt) { 
  2.   __skb_queue_tail(&sk->sk_receive_queue, skb); 
  3.   sk->sk_data_ready(sk, skb->len); 

packet_rcv首先把收到的數(shù)據(jù)包插入socket的接收隊(duì)列,然后調(diào)用sk_data_ready通知socket,對(duì)應(yīng)函數(shù)是sock_def_readable。

  1. static void sock_def_readable(struct sock *sk, int len){ 
  2.   if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) 
  3.     wake_up_interruptible(sk->sk_sleep); 

sock_def_readable會(huì)喚醒阻塞在該socket的進(jìn)程。那么這個(gè)隊(duì)列里有什么呢?我們回到文章開始的代碼,我們創(chuàng)建socket后阻塞在recvfrom。recvfrom通過層層調(diào)用最后執(zhí)行對(duì)應(yīng)函數(shù)集的recvmsg。

  1. static int packet_recvmsg(struct kiocb *iocb, struct socket *sock, 
  2.         struct msghdr *msg, size_t len, int flags){ 
  3.  
  4.   struct sk_buff *skb; 
  5.   skb=skb_recv_datagram(sk,flags,flags&MSG_DONTWAIT,&err); 

packet_recvmsg從socket的接收隊(duì)列取出一個(gè)數(shù)據(jù)包,我們看看skb_recv_datagram。

  1. struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, 
  2.           int noblock, int *err){ 
  3.  
  4.   struct sk_buff *skb; 
  5.   long timeo; 
  6.   /* 
  7.     static inline long sock_rcvtimeo(const struct sock *sk, int noblock) 
  8.     { 
  9.       return noblock ? 0 : sk->sk_rcvtimeo; 
  10.     } 
  11.     獲取沒有數(shù)據(jù)包時(shí)等待的超時(shí)時(shí)間 
  12.   */ 
  13.   timeo = sock_rcvtimeo(sk, noblock); 
  14.  
  15.   do { 
  16.     skb = skb_dequeue(&sk->sk_receive_queue); 
  17.     // 有則返回 
  18.     if (skb) 
  19.       return skb; 
  20.  
  21.     // 沒有 
  22.     error = -EAGAIN; 
  23.     // 不等待則直接返回 
  24.     if (!timeo) 
  25.       goto no_packet; 
  26.   // 否則等待一段時(shí)間 
  27.   } while (!wait_for_packet(sk, err, &timeo)); 

我們看到?jīng)]有數(shù)據(jù)包的時(shí)候會(huì)等待一段時(shí)間,我們看看這個(gè)時(shí)間是多少。

  1. sk->sk_rcvtimeo = MAX_SCHEDULE_TIMEOUT; 
  2. #define MAX_SCHEDULE_TIMEOUT  LONG_MAX 

我們看到超時(shí)時(shí)間非常長,當(dāng)然這個(gè)值我們可以通過setsockopt的SO_RCVTIMEO選項(xiàng)設(shè)置。接著我們看等待的邏輯wait_for_packet。

  1. #define DEFINE_WAIT(name)           \ 
  2.   wait_queue_t name = {           \ 
  3.     .private  = current,        \ 
  4.     .func   = autoremove_wake_function,   \ 
  5.     .task_list  = LIST_HEAD_INIT((name).task_list), \ 
  6.   } 
  7.  
  8. static int wait_for_packet(struct sock *sk, int *err, long *timeo_p){ 
  9.   DEFINE_WAIT(wait); 
  10.   prepare_to_wait_exclusive(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); 
  11.   int error = 0; 
  12.   *timeo_p = schedule_timeout(*timeo_p); 
  13. out
  14.   finish_wait(sk->sk_sleep, &wait); 
  15.   return error 

wait_for_packet首先把當(dāng)前進(jìn)程插入對(duì)應(yīng)的等待隊(duì)列并修改進(jìn)程狀態(tài)為非就緒(TASK_INTERRUPTIBLE)

  1. void fastcall prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state){ 
  2.   // 把當(dāng)前進(jìn)程插入等待隊(duì)列 
  3.   if (list_empty(&wait->task_list)) 
  4.     __add_wait_queue_tail(q, wait); 
  5.   // 修改進(jìn)程狀態(tài) 
  6.   set_current_state(state); 

接著執(zhí)行進(jìn)程調(diào)度schedule_timeout。

  1. fastcall signed long __sched schedule_timeout(signed long timeout){ 
  2.   struct timer_list timer; 
  3.   unsigned long expire; 
  4.   // 超時(shí)時(shí)間 
  5.   expire = timeout + jiffies; 
  6.   // 開啟定時(shí)器 
  7.   init_timer(&timer); 
  8.   timer.expires = expire; 
  9.   timer.data = (unsigned long) current
  10.   timer.function = process_timeout; 
  11.   // 啟動(dòng)定時(shí)器 
  12.   add_timer(&timer); 
  13.   // 進(jìn)程調(diào)度 
  14.   schedule(); 
  15.   timeout = expire - jiffies; 
  16.  
  17.  out
  18.   return timeout < 0 ? 0 : timeout; 

以上就是實(shí)現(xiàn)捕獲tcp/ip協(xié)議棧數(shù)據(jù)包的底層原理。代碼倉庫https://github.com/theanarkh/node-sniffer

 

責(zé)任編輯:武曉燕 來源: 編程雜技
相關(guān)推薦

2019-08-21 05:48:06

TCPIP協(xié)議棧

2014-07-09 09:43:59

2010-09-08 15:11:36

TCP IP協(xié)議棧

2010-06-19 13:32:36

TCP IP協(xié)議棧

2019-03-28 13:34:22

IP TCP握手

2014-10-15 09:14:24

IP

2019-09-30 09:28:26

LinuxTCPIP

2010-09-08 15:24:28

TCP IP協(xié)議棧

2010-09-08 15:34:27

TCP IP協(xié)議棧

2010-09-08 15:15:12

TCP IP協(xié)議棧

2010-06-13 14:54:40

TCP IP協(xié)議棧linux

2010-09-27 13:25:58

TCP IP協(xié)議棧

2010-09-09 14:43:08

TCP IP協(xié)議棧

2019-07-01 08:51:49

TCPIPLinux

2021-07-09 08:55:23

LinuxTCPIP

2021-07-06 21:29:16

TCPIP協(xié)議棧

2010-06-13 13:39:46

TCP IP協(xié)議棧

2011-11-28 16:03:49

wireshark數(shù)據(jù)包

2010-06-19 14:10:35

TCP IP協(xié)議棧

2019-04-29 07:53:11

TCP數(shù)據(jù)包TCP網(wǎng)絡(luò)編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲av无码一区二区三区网址| 精品久久免费观看| 日韩一级片中文字幕| 日韩电影一区| 日韩免费视频一区二区| 国产a级片网站| 春暖花开成人亚洲区| 国产专区欧美精品| 国产91ⅴ在线精品免费观看| 中文字幕第24页| 亚洲一区二区三区在线免费| 色狠狠av一区二区三区| 国产91porn| 国产片在线观看| 成人在线综合网站| 国产精品久在线观看| 精品肉丝脚一区二区三区| 精品久久91| 欧美精品一区二区三区一线天视频| 国产精品免费成人| 丁香花电影在线观看完整版| 欧美国产欧美亚州国产日韩mv天天看完整| 91久久久一线二线三线品牌| 中文字幕免费观看| 亚洲国产99| 久久亚洲精品一区| 欧美黄色激情视频| 久久狠狠久久| 日韩欧美电影一区| 粉色视频免费看| 国产精品伦理| 亚洲国产精品一区二区久久恐怖片 | 九一在线免费观看| 欧美sss在线视频| 制服丝袜亚洲播放| 久久国产这里只有精品| 欧美日韩视频网站| 精品日韩中文字幕| 99在线精品免费视频| 69xxx在线| 中文字幕日韩精品一区| 亚洲综合第一| av在线收看| 久久精品视频网| 久久精品国产精品国产精品污| 亚洲黄色在线播放| 国产成人亚洲精品青草天美 | 成人自拍视频| 欧美曰成人黄网| 黄色片视频在线播放| а√天堂8资源在线| 亚洲国产视频在线| 成人小视频在线观看免费| 国产黄色小视频在线| 中文字幕一区av| 一区二区三区四区五区视频| 91精品国产91久久久久游泳池 | 高清电影在线观看免费| 亚洲自拍欧美精品| www.国产在线视频| 黄色激情在线播放| 日韩人体视频一二区| 国产精品少妇在线视频| 国产极品久久久久久久久波多结野| 欧美在线综合视频| 日本在线播放一区二区| 免费观看亚洲天堂| 精品国产1区2区3区| 亚洲一区二区三区综合| 亚洲另类春色校园小说| 亚洲图片在线综合| 亚洲色图27p| 欧美体内she精视频在线观看| 国内精品中文字幕| 日韩精品在线免费视频| 日韩综合小视频| 成人黄色在线免费| www.色婷婷.com| 99久久99久久久精品齐齐| 日韩aⅴ视频一区二区三区| av电影在线播放高清免费观看| 亚洲色图第一区| 欧美狂野激情性xxxx在线观| 深夜福利视频一区二区| 欧美日韩在线播| 26uuu国产| 日韩伦理一区二区三区| 中文字幕日韩欧美精品在线观看| 午夜激情福利网| 最新日韩在线| 国产在线播放不卡| 天堂av资源网| 国产精品日产欧美久久久久| 久久久久久久9| 日韩成人亚洲| 亚洲色图国产| 亚洲国产成人私人影院tom| 亚洲欧洲国产日韩精品| 青草av在线| 黑人巨大精品欧美一区免费视频 | 视频一区二区中文字幕| 成人a视频在线观看| 蜜桃91麻豆精品一二三区| 久久久不卡影院| 国产乱子伦精品视频| 成人免费看黄| 欧美大片一区二区三区| 人与嘼交av免费| 日韩视频免费| 亚洲精品免费一区二区三区| 精品欧美不卡一区二区在线观看 | 国产一区二三区| 欧美h视频在线| 亚洲图区一区| 欧美色欧美亚洲另类二区| 理论片大全免费理伦片| 亚洲一本二本| 国产精品一区二区久久| 亚洲人成色777777精品音频| 一区二区三区美女视频| 亚洲综合婷婷久久| 国产精品一区2区3区| 国内精品视频在线| 精品人妻少妇AV无码专区| 日本一区二区三区四区在线视频| 日韩小视频在线播放| 精品麻豆剧传媒av国产九九九| 亚洲天堂男人的天堂| 成人免费看片98| 国产一区二区电影| 中国成人在线视频| 成人亚洲综合| 亚洲午夜激情免费视频| 亚洲久久在线观看| 97成人超碰视| 欧美三级一级片| 欧美电影在线观看免费| 韩国三级电影久久久久久| 精品久久久免费视频| 中文字幕日韩一区| 亚洲黄色av片| 婷婷精品进入| 成人精品一区二区三区电影黑人| 成年人在线观看视频| 亚洲制服欧美另类| 亚洲成人动漫av| 欧美熟妇另类久久久久久多毛| 欧美偷拍自拍| 国产精品视频999| 毛片在线播放网址| 色哟哟一区二区在线观看| 疯狂揉花蒂控制高潮h| 99riav国产精品| 久久久精品国产一区二区三区| av成人福利| 亚洲国产精品一区二区三区| 国产精品成人av久久| av在线综合网| 久久免费视频3| 精品中文字幕一区二区三区av| 日本精品免费观看| 成人精品一区二区三区校园激情| 欧美中文字幕一区二区三区| 国产精品成人在线视频| 精品一区二区三区在线观看| 成年人视频大全| 91国内精品白嫩初高生| 久久久久久久久久久亚洲| 五月婷婷六月色| 91国偷自产一区二区使用方法| 青青草华人在线视频| 国内精品久久久久影院色| 在线观看17c| 日韩手机在线| 国产精品人人做人人爽| 黄色免费网站在线观看| 精品欧美黑人一区二区三区| 日韩免费在线视频观看| 国产三级精品视频| 欧美午夜精品理论片| 国产一区亚洲| 欧美日韩一区二区视频在线| 日韩久久99| 97婷婷涩涩精品一区| 电影av在线| 日韩一区二区高清| 成人午夜淫片100集| 国产精品美女久久福利网站| 制服下的诱惑暮生| 香蕉久久国产| 裸体裸乳免费看| 欧美午夜18电影| 国产日韩欧美在线播放| 操人在线观看| 久久精品91久久久久久再现| 日本黄色大片视频| 欧美制服丝袜第一页| 国产在线欧美在线| 欧美黄色一级视频| 一本色道久久加勒比精品| 特级西西人体wwwww| 男人的j进女人的j一区| 人人妻人人澡人人爽欧美一区| 嫩草影视亚洲| 超碰97网站| 日韩综合av| 日韩av高清不卡| 色噜噜狠狠狠综合欧洲色8| 亚洲午夜av电影| 少妇高潮久久久| 91精品国产手机| 做爰视频毛片视频| 午夜不卡在线视频| www.av视频| 国产精品视频九色porn| 成人免费av片| 成人中文字幕合集| 日韩av影视大全| 日本网站在线观看一区二区三区| av网站手机在线观看| 亚洲成人精选| 日韩三级电影免费观看| 一区二区三区四区在线看| 国产精品久久久久久久天堂第1集| 欧美成人xxxx| 国产精品国产三级国产专播精品人 | 丁香六月婷婷综合| 一区二区高清免费观看影视大全| 国产精品www爽爽爽| 91色婷婷久久久久合中文| 亚洲一二三四五| 国产麻豆欧美日韩一区| www.超碰97.com| 奇米四色…亚洲| 欧美国产日韩在线播放| 国产一区导航| 3d动漫一区二区三区| 在线国产精品一区| 日韩视频免费播放| 欧美日韩福利| 成人区一区二区| 欧美1区2区| 日本一道在线观看| 一区二区三区在线电影| 青青草原网站在线观看| 99久久九九| 最近中文字幕免费mv| 天天天综合网| 国产卡一卡二在线| 午夜日韩在线| 国产一二三区在线播放| 亚洲激情综合| 国产免费毛卡片| 久久综合导航| 国外成人在线直播| 久久夜色精品国产噜噜亚洲av| 五月婷婷色综合| 手机看片久久久| 91黄色在线观看| 一级全黄少妇性色生活片| 欧美久久高跟鞋激| 国产欧美久久久| 精品国产污污免费网站入口| 婷婷五月综合久久中文字幕| 亚洲精品一区二区在线| 国产精品久久久久久久久久久久久 | 美女黄色免费看| 精品成人久久| 亚洲乱码国产乱码精品精天堂| 精品国产亚洲av麻豆| 日韩午夜精品视频| 韩国av在线免费观看| 亚洲精品456在线播放狼人| 日本一卡二卡四卡精品| 国产一区二区av| 日本a级在线| 欧美夫妻性生活xx| 麻豆免费在线| 国产精品劲爆视频| 国产aa精品| 国产欧美一区二区视频| 国产成人3p视频免费观看| 在线码字幕一区| 亚洲视频免费| 成人精品视频一区二区| 国产主播一区二区三区| 亚洲熟女乱综合一区二区三区| 国产午夜亚洲精品午夜鲁丝片| fc2ppv在线播放| 亚洲va国产va欧美va观看| 成人午夜免费在线| 成人在线免费看| 亚洲天堂影视av| 美女写真理伦片在线看| 97精品国产97久久久久久春色| 欧美xxxx做受欧美护士| 亚洲在线免费观看| 国产精品欧美日韩一区| www.99riav| 日韩激情一区二区| 在线播放av网址| 国产精品视频一区二区三区不卡| 久久精品免费在线| 欧美日韩中文国产| 天堂av网在线| 久久国产精品影视| 日韩高清成人| 国产自产精品| 自产国语精品视频| 超碰在线97免费| 99久久精品国产精品久久| 国产高潮流白浆| 欧美性大战久久久久久久| 手机看片1024国产| 久久伊人精品天天| 成人免费毛片嘿嘿连载视频…| 精品免费二区三区三区高中清不卡 | 黄瓜视频污在线观看| 亚洲精品视频在线| 中文字幕在线播放日韩| 亚洲欧美精品一区二区| av老司机在线观看| 亚洲伊人第一页| 999久久久国产精品| 激情综合网俺也去| 国产精品日韩无码| 日韩丝袜美女视频| 日韩毛片久久久| 国产精品久久电影观看| 免费黄色成人| 久久精品国产精品亚洲色婷婷| 成人毛片在线观看| 久久黄色免费视频| 日韩精品中文字幕一区| 黄色在线播放网站| 国产日韩综合一区二区性色av| 国产不卡av一区二区| 国产l精品国产亚洲区久久| 不卡视频免费播放| 亚洲一区二区91| 精品日产卡一卡二卡麻豆| 欧美野外wwwxxx| 97视频热人人精品| 欧美在线亚洲| 中文字幕乱妇无码av在线| 亚洲欧美色一区| 国产裸体无遮挡| 久久亚洲精品视频| 天堂精品久久久久| 国产精品无码免费专区午夜| 国产99精品在线观看| 国产一级视频在线| 亚洲国产精品久久久久| 多野结衣av一区| 亚洲精品欧美一区二区三区| 亚洲视频电影在线| 亚洲精品乱码久久久久久9色| 一区二区三区四区视频精品免费| 国产特黄一级片| 欧美另类极品videosbestfree| 999国产精品一区| 国产免费黄色av| 国产日韩欧美高清在线| 中文字幕乱码一区二区| 久久久极品av| 91精品久久久久久综合五月天| 18黄暴禁片在线观看| 91天堂素人约啪| 中文字幕在线播出| 九九九久久国产免费| 果冻天美麻豆一区二区国产| 成人免费在线小视频| 国产精品伦一区二区三级视频| 国产欧美一级片| 性欧美办公室18xxxxhd| 国产区精品区| 国产一区二区在线观看免费视频| 一区二区三区高清在线| 亚洲欧美丝袜中文综合| 国产精品视频免费在线| 欧美日韩国产亚洲一区| 亚洲欧美激情一区| 在线日本视频| 99国产盗摄| 午夜影院日韩| 黑人操日本美女| 亚洲第一区在线观看| 国产成人免费9x9x人网站视频| 超碰免费在线公开| 99精品欧美一区二区三区综合在线| 国产精品久久久久久久久夜色| 久久久精品在线| 亚洲黄色录像| 国产5g成人5g天天爽| 欧美日韩国内自拍| 黄色成人影院| 欧美在线视频二区| 国产乱人伦偷精品视频不卡| 天天干在线播放| 欧美日韩成人免费|