精品欧美一区二区三区在线观看 _久久久久国色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)

影音先锋久久精品| 精品视频在线播放一区二区三区 | 91亚洲成人| 欧美大片在线观看| 欧美女人性生活视频| 日本中文字幕电影在线免费观看| 国产精品一品二品| 人体精品一二三区| 欧美黑人一级片| 国产成人三级| 欧美成人免费网站| 中文字幕一区二区三区四区在线视频| 成人在线观看免费网站| 91亚洲精品乱码久久久久久蜜桃 | 欧美二区在线视频| 在线观看免费网站黄| 不卡一区二区三区四区| 国产在线观看一区二区三区 | 麻豆网站在线| 一区二区三区国产好| 精品成人乱色一区二区| 亚洲福利av| 香蕉久久一区二区三区| 国内外成人在线视频| 浅井舞香一区二区| 国产一级在线观看视频| 羞羞答答成人影院www| 亚洲欧美在线一区二区| 黄色av电影网站| va天堂va亚洲va影视| 在线日韩av片| 1024av视频| 在线观看av免费| 中文字幕人成不卡一区| 日本一区视频在线播放| 欧美一级淫片aaaaaa| 国产一区二区在线看| 国产精品视频网| 伦av综合一区| 性伦欧美刺激片在线观看| 亚洲国产精品成人精品| а 天堂 在线| 亚洲欧洲日韩精品在线| 欧美日韩性生活| 亚洲少妇久久久| 欧美日韩在线精品一区二区三区激情综合 | 一区二区视频免费完整版观看| 亚洲国产aⅴ天堂久久| 欧美日韩dvd| 人妻无码中文字幕免费视频蜜桃| 狠狠色2019综合网| 成人黄色av免费在线观看| 中文字幕日产av| 麻豆一区二区三| 国产精品永久免费| 亚洲欧美一区二区三区四区五区| 日本一区二区三区视频| 深夜成人在线观看| 亚洲欧美卡通动漫| 久久在线免费| 久热精品在线视频| 福利所第一导航| 黄色亚洲在线| 97视频国产在线| 国产成人一级片| 欧美亚洲三级| 国产经典一区二区| 国产精品欧美亚洲| 国产成人午夜视频| 国产精品久久亚洲7777| 四虎在线观看| 久久66热偷产精品| 亚洲va欧美va国产综合剧情| 国产毛片一区二区三区va在线| 国模无码大尺度一区二区三区| 亚洲sss综合天堂久久| 丰满岳乱妇国产精品一区| www.亚洲色图| 青青草原成人| 国产黄色片免费观看| 国产成人自拍在线| 久久大香伊蕉在人线观看热2| 免费一级在线观看| 亚洲欧美在线另类| 欧美精品久久久久久久自慰| 日本综合字幕| 亚洲福利一区二区三区| 午夜精品久久久内射近拍高清| 日本欧美一区| 精品欧美一区二区久久| 人妻aⅴ无码一区二区三区| 色男人天堂综合再现| 欧美激情第一页xxx| 国产免费av一区| 国产专区综合网| 精品在线视频一区二区三区| 成年人在线看| 亚洲大片免费看| 亚欧美在线观看| 一区二区三区自拍视频| 一区二区三区黄色| 伊人国产在线观看| 久久精品国产第一区二区三区| 国产精品果冻传媒潘| 成年人在线视频| 五月综合激情婷婷六月色窝| 日本美女视频一区| 丝袜美腿综合| 欧美噜噜久久久xxx| 国产亚洲欧美日韩高清| 999国产在线视频| 国产黄色精品视频| 一本色道久久综合狠狠躁篇怎么玩 | 久久99国产精品成人| 国内精品久久国产| dy888亚洲精品一区二区三区| 一道本成人在线| youjizz.com亚洲| freemovies性欧美| 亚洲成av人片在线观看无码| 一级片视频免费观看| 亚洲宅男一区| 午夜精品福利在线观看| 国产同性人妖ts口直男| 亚洲国产经典视频| 欧美成人xxxxx| 国产厕拍一区| 欧美日韩国产va另类| 在线免费观看一级片| 久久久影视传媒| 日韩在线一级片| 2023国产精华国产精品| 久久视频在线直播| 在线播放一级片| 中文字幕欧美激情| 欧美亚洲日本在线观看| 亚洲精品小区久久久久久| 欧美激情国产精品| 国产jzjzjz丝袜老师水多 | 亚洲高清免费观看高清完整版| 久久成人小视频| 蜜桃视频一区二区三区 | 欧美二区视频| 亚洲va久久久噜噜噜久久天堂| av在线免费观看网站| 91国内精品野花午夜精品| 日韩网站在线播放| 国产欧美日韩亚洲一区二区三区| 成人羞羞视频免费| 人妻va精品va欧美va| 亚洲精品视频一区二区| 91精品视频国产| 婷婷综合在线| 亚洲影院色无极综合| 国产黄a三级三级三级av在线看 | 不许穿内裤随时挨c调教h苏绵 | 久久精品日产第一区二区三区高清版| 亚洲熟妇av日韩熟妇在线| 日韩精品丝袜美腿| 日韩av123| 成年人在线看| 91精品久久久久久久99蜜桃| 手机av在线看| 国产成人免费视| 男人添女人荫蒂免费视频| 国产精品任我爽爆在线播放| 66m—66摸成人免费视频| 毛片网站在线| 欧美日韩日本视频| 久久精品波多野结衣| 成人av先锋影音| 黄色片久久久久| 久久一区二区三区喷水| 97操在线视频| 亚洲一级少妇| 欧美一区二区三区视频免费 | 亚洲精品黄色| 欧美亚洲免费高清在线观看 | 51午夜精品国产| 久久精品www人人爽人人| 91丨porny丨蝌蚪视频| 天天干在线影院| 亚洲深深色噜噜狠狠爱网站| 国产精品一码二码三码在线| 日韩欧美看国产| 另类视频在线观看| 亚洲欧美一区二区三| 欧美三级中文字幕| 欧美成人精品欧美一级私黄| 91视频免费观看| 免费精品99久久国产综合精品应用| 黄色成人在线网址| 亚洲v国产v在线观看| 一本色道69色精品综合久久| 日本精品性网站在线观看| 久cao在线| 亚洲精品资源美女情侣酒店| 免费中文字幕视频| 91亚洲精品久久久蜜桃| 视频免费1区二区三区 | 欧美一级片在线播放| 欧美精品videos另类| 亚洲精品电影网在线观看| 一级黄色a视频| 色哟哟亚洲精品| 欧美日韩在线视频免费| 日本一区二区综合亚洲| 娇妻高潮浓精白浆xxⅹ| 久久国产三级精品| 欧美网站免费观看| 欧美国产激情| 一本一道久久a久久精品综合 | 亚洲一区电影| 国产欧美久久一区二区| 亚洲午夜天堂| 久久久久久久久久久亚洲| 中文日本在线观看| 日韩激情av在线播放| 91丨九色丨丰满| 国产精品不卡在线| 五级黄高潮片90分钟视频| 福利91精品一区二区三区| 日本阿v视频在线观看| 俺要去色综合狠狠| 乱一区二区三区在线播放| 成人高潮a毛片免费观看网站| 成人精品久久久| 桃子视频成人app| 4444欧美成人kkkk| av在线小说| 欧美人与性动交a欧美精品| 嫩草香蕉在线91一二三区| 影音先锋日韩有码| 毛片免费在线观看| 亚洲欧美综合另类中字| 先锋av资源站| 国产视频精品xxxx| 欧美人体大胆444www| 亚洲精品国精品久久99热| 男人天堂一区二区| 精品欧美乱码久久久久久| 性做久久久久久久| 欧美性少妇18aaaa视频| 五月天婷婷网站| 亚洲成av人影院在线观看网| 日操夜操天天操| 午夜精品一区二区三区三上悠亚| 国产亚洲第一页| 亚洲一区二区三区四区不卡| 精品无码人妻一区二区三区品| 亚洲午夜免费福利视频| 久久精品免费在线| 午夜精品久久久久久久久久| 亚洲一区欧美在线| 国产精品久久久久久久蜜臀| 大吊一区二区三区| 国产精品日产欧美久久久久| 蜜桃av免费观看| 亚洲四区在线观看| 激情四射综合网| 亚洲成年人网站在线观看| 九九热在线免费观看| 在线免费观看成人短视频| 中文区中文字幕免费看| 欧美精品久久久久久久多人混战| 国产精品无码AV| 精品剧情v国产在线观看在线| 人妻少妇精品无码专区| 日韩激情在线视频| 国产高清一区在线观看| 亚洲国产精品yw在线观看 | 成人动漫一区二区在线| 91黄色免费视频| 欧美国产1区2区| 麻豆成人在线视频| 福利视频第一区| 中文字幕av影视| 日韩一区二区在线观看| 五月婷婷久久久| 中文字幕亚洲激情| 色在线免费视频| 在线播放日韩精品| 最新超碰在线| 日韩av成人在线观看| 日韩电影精品| 久久久久一区二区| 欧美h版在线| 色欲色香天天天综合网www| 日精品一区二区三区| 秋霞午夜鲁丝一区二区| 精品一区二区在线观看| 日本天堂在线播放| 欧美激情一区二区三区蜜桃视频| 国产va在线播放| 91传媒视频在线播放| 午夜久久久久久噜噜噜噜| 亚洲无av在线中文字幕| 羞羞电影在线观看www| 欧美在线播放视频| 久久伊人影院| 婷婷精品国产一区二区三区日韩 | 国产精品毛片大码女人| 国产乡下妇女做爰| 欧美丰满少妇xxxbbb| 你懂的在线免费观看| 欧美极品xxxx| 在线视频成人| 日韩欧美一区二区三区四区| 亚洲激情网址| 日韩大尺度视频| 国产精品女同一区二区三区| 91九色丨porny丨肉丝| 欧美一区二区三区播放老司机| 男人久久精品| 2019中文字幕在线观看| 91成人福利| 糖心vlog在线免费观看| 男女男精品网站| 亚欧洲乱码视频| 午夜精品123| www.国产麻豆| 欧美成年人视频网站| 精灵使的剑舞无删减版在线观看| 国产精品99久久久久久人| 日韩美女毛片| 老太脱裤子让老头玩xxxxx| 国产传媒日韩欧美成人| 黑鬼狂亚洲人videos| 欧美情侣在线播放| 超碰免费97在线观看| 欧美中文字幕精品| 日韩av黄色在线| a在线视频观看| 99久久99久久精品国产片果冻| 免费在线观看亚洲| 日韩免费电影一区| 欧美videosex性欧美黑吊| 3d蒂法精品啪啪一区二区免费| 久久久久久久久99精品大| 国产精品嫩草影院8vv8| 国产精品嫩草影院com| 中文在线字幕免费观| 一区二区三区美女xx视频| 国产成人77亚洲精品www| 视频一区二区三区免费观看| 日本美女视频一区二区| 国产美女免费网站| 欧美亚洲一区二区在线| gogogo高清在线观看免费完整版| 国产美女精彩久久| 婷婷综合五月| 久久久久99人妻一区二区三区| 亚洲国产精品一区二区尤物区| 亚洲乱熟女一区二区| 久久免费国产精品1| 青青久久av| 北条麻妃视频在线| 国产精品情趣视频| 国产jzjzjz丝袜老师水多| 欧美激情影音先锋| 日本在线中文字幕一区| 亚洲五月天综合| 国产精品乱码妇女bbbb| 国产精品久久免费| 欧美国产日本在线| 色天下一区二区三区| 欧美伦理片在线看| 亚洲免费在线观看视频| 亚洲第一天堂在线观看| 91精品国产高清自在线| 国产欧美日韩在线观看视频| 国产视频1区2区3区| 亚洲欧美成aⅴ人在线观看| 丰满人妻一区二区三区免费视频 | 青青草av在线播放| 亚洲一二在线观看| 91麻豆精品| 国产视频九色蝌蚪| 国产精品久久久久久久久晋中 | 人妻有码中文字幕| 国产精品久久久久国产精品日日| 99精品视频免费看| 88xx成人精品| 天天av综合| 久久久久成人精品无码中文字幕| 在线国产亚洲欧美| 欧美人与性动交α欧美精品图片| 久久国产精品亚洲va麻豆| 美女视频网站黄色亚洲| 精品一区二区三区四| 亚洲一级片在线看| 一区二区三区四区视频免费观看| 日韩中文字幕免费在线| 亚洲卡通动漫在线| 久热av在线| 丁香五月网久久综合| 青娱乐精品视频| 国产精品一区二区6| 久久亚洲精品中文字幕冲田杏梨| 欧美亚视频在线中文字幕免费|