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

從Linux5.9看Icmp的處理流程

系統 Linux
昨天有個同學碰到發送udp包時收到destination unreachable的icmp包問題,本文簡單介紹一下linux5.9中icmp包的處理流程。

[[397621]]

 本文轉載自微信公眾號「編程雜技」,作者theanarkh。轉載本文請聯系編程雜技公眾號。

昨天有個同學碰到發送udp包時收到destination unreachable的icmp包問題,本文簡單介紹一下linux5.9中icmp包的處理流程。

發送icmp包的流程

下面以udp為例看看什么時候會發送destination unreachable包。我們從收到一個udp包開始分析,具體函數是udp_rcv。

  1. int udp_rcv(struct sk_buff *skb){ 
  2.     return __udp4_lib_rcv(skb, &udp_table, IPPROTO_UDP); 
  3.  
  4. int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, 
  5.            int proto){ 
  6.     struct sock *sk; 
  7.     struct udphdr *uh; 
  8.     unsigned short ulen; 
  9.     struct rtable *rt = skb_rtable(skb); 
  10.     __be32 saddr, daddr; 
  11.     struct net *net = dev_net(skb->dev); 
  12.     bool refcounted; 
  13.     // udp頭 
  14.     uh   = udp_hdr(skb); 
  15.     ulen = ntohs(uh->len); 
  16.     // 源目的ip 
  17.     saddr = ip_hdr(skb)->saddr; 
  18.     daddr = ip_hdr(skb)->daddr; 
  19.     // 頭部指示大小比實際數據小 
  20.     if (ulen > skb->len) 
  21.         goto short_packet; 
  22.  
  23.     if (proto == IPPROTO_UDP) { 
  24.         uh = udp_hdr(skb); 
  25.     } 
  26.  
  27.     sk = skb_steal_sock(skb, &refcounted); 
  28.  
  29.     // 廣播或多播 
  30.     if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST)) 
  31.         return __udp4_lib_mcast_deliver(net, skb, uh, 
  32.                         saddr, daddr, udptable, proto); 
  33.     // 單播,根據地址信息找到對應的socket 
  34.     sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable); 
  35.     // 找到則掛到socket下 
  36.     if (sk) 
  37.         return udp_unicast_rcv_skb(sk, skb, uh); 
  38.  
  39.     // 找不到socket則回復一個ICMP_DEST_UNREACH icmp包 
  40.     icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); 
  41.  
  42.     kfree_skb(skb); 
  43.     return 0; 

我們看到當通過ip包信息找不到對應socket的時候,就會發送一個icmp包給發送端。icmp包結構如下。

收到icmp包的處理流程

我們從收到ip包開始分析。

  1. int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, 
  2.        struct net_device *orig_dev){ 
  3.     struct net *net = dev_net(dev); 
  4.  
  5.     skb = ip_rcv_core(skb, net); 
  6.     if (skb == NULL
  7.         return NET_RX_DROP; 
  8.  
  9.     return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, 
  10.                net, NULL, skb, dev, NULL
  11.                ip_rcv_finish); 

ip層收到包后會繼續執行ip_rcv_finish。

  1. static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb){ 
  2.     struct net_device *dev = skb->dev; 
  3.     int ret; 
  4.  
  5.     ret = ip_rcv_finish_core(net, sk, skb, dev, NULL); 
  6.     if (ret != NET_RX_DROP) 
  7.         ret = dst_input(skb); 
  8.     return ret; 

接著執行dst_input

  1. static inline int dst_input(struct sk_buff *skb){ 
  2.     return skb_dst(skb)->input(skb); 

input對應的是ip_local_deliver。

  1. int ip_local_deliver(struct sk_buff *skb){ 
  2.     struct net *net = dev_net(skb->dev); 
  3.     return NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_IN, 
  4.                net, NULL, skb, skb->dev, NULL
  5.                ip_local_deliver_finish); 

接著執行ip_local_deliver_finish。

  1. static int ip_local_deliver_finish(struct net *net, struct sock *sk, struct sk_buff *skb){ 
  2.     __skb_pull(skb, skb_network_header_len(skb)); 
  3.  
  4.     rcu_read_lock(); 
  5.     ip_protocol_deliver_rcu(net, skb, ip_hdr(skb)->protocol); 
  6.     rcu_read_unlock(); 
  7.  
  8.     return 0; 

ip_local_deliver_finish會執行ip_protocol_deliver_rcu進一步處理,ip_protocol_deliver_rcu的最后一個入參是ip包里的協議字段(上層協議)。

  1. void ip_protocol_deliver_rcu(struct net *net, struct sk_buff *skb, int protocol){ 
  2.     const struct net_protocol *ipprot; 
  3.     int raw, ret; 
  4.  
  5. resubmit: 
  6.     // 根據協議找到對應的處理函數,這里是icmp 
  7.     ipprot = rcu_dereference(inet_protos[protocol]); 
  8.     if (ipprot) { 
  9.         ret = INDIRECT_CALL_2(ipprot->handler, tcp_v4_rcv, udp_rcv, 
  10.                       skb); 
  11.         if (ret < 0) { 
  12.             protocol = -ret; 
  13.             goto resubmit; 
  14.         } 
  15.         __IP_INC_STATS(net, IPSTATS_MIB_INDELIVERS); 
  16.     } 

INDIRECT_CALL_2是一個宏。

  1. #define INDIRECT_CALL_1(f, f1, ...)                 \ 
  2.     ({                              \ 
  3.         likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ 
  4.     })#define INDIRECT_CALL_2(f, f2, f1, ...)                 \ 
  5.     ({                              \ 
  6.         likely(f == f2) ? f2(__VA_ARGS__) :         \ 
  7.                   INDIRECT_CALL_1(f, f1, __VA_ARGS__);  \ 
  8.     }) 

因為這里的protocol是icmp協議。所以會執行icmp對應的handler。那么對應的是哪個函數呢?我們看看inet_protos是什么。

  1. struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS] __read_mostly; 
  2. int inet_add_protocol(const struct net_protocol *prot, unsigned char protocol){ 
  3.     return !cmpxchg((const struct net_protocol **)&inet_protos[protocol], 
  4.             NULL, prot) ? 0 : -1; 

我們看到inet_add_protocol函數是注冊協議和對應處理函數的。我們再來看看哪里會調用這個函數。

  1. static int __init inet_init(void) { 
  2.     inet_add_protocol(&icmp_protocol, IPPROTO_ICMP); 
  3.     inet_add_protocol(&udp_protocol, IPPROTO_UDP); 
  4.     ... 

在內核初始化的時候會注冊一系列的協議和處理函數。下面我們看看icmp的函數集。

  1. static const struct net_protocol icmp_protocol = { 
  2.     .handler =  icmp_rcv, 
  3.     .err_handler =  icmp_err, 
  4.     .no_policy =    1, 
  5.     .netns_ok = 1, 
  6. }; 

我們看到handler是icmp_rcv。

  1. int icmp_rcv(struct sk_buff *skb){ 
  2.     struct icmphdr *icmph; 
  3.     struct rtable *rt = skb_rtable(skb); 
  4.     struct net *net = dev_net(rt->dst.dev); 
  5.     bool success; 
  6.     // icmp頭 
  7.     icmph = icmp_hdr(skb); 
  8.     success = icmp_pointers[icmph->type].handler(skb); 

icmp_rcv根據icmp包的信息做進一步處理。我看看icmp_pointers的定義。

  1. static const struct icmp_control icmp_pointers[NR_ICMP_TYPES + 1] = { 
  2.     ... 
  3.     [ICMP_DEST_UNREACH] = { 
  4.         .handler = icmp_unreach, 
  5.         .error = 1, 
  6.     }, 
  7. }; 

這里我們只關注ICMP_DEST_UNREACH的處理。

  1. static bool icmp_unreach(struct sk_buff *skb){ 
  2.     ... 
  3.     icmp_socket_deliver(skb, info); 

繼續看icmp_socket_deliver

  1. static void icmp_socket_deliver(struct sk_buff *skb, u32 info){ 
  2.     const struct iphdr *iph = (const struct iphdr *) skb->data; 
  3.     const struct net_protocol *ipprot; 
  4.     int protocol = iph->protocol; 
  5.     // 根據ip頭的協議字段找到對應協議處理,這里的iph是觸發錯誤的原始ip頭,不是收到icmp包的ip頭,所以protocol是udp 
  6.     ipprot = rcu_dereference(inet_protos[protocol]); 
  7.     if (ipprot && ipprot->err_handler) 
  8.         ipprot->err_handler(skb, info); 

接著執行udp的err_handler,是udp_err

  1. int udp_err(struct sk_buff *skb, u32 info){ 
  2.     return __udp4_lib_err(skb, info, &udp_table);}int __udp4_lib_err(struct sk_buff *skb, u32 info, struct udp_table *udptable){ 
  3.     struct inet_sock *inet; 
  4.     const struct iphdr *iph = (const struct iphdr *)skb->data; 
  5.     struct udphdr *uh = (struct udphdr *)(skb->data+(iph->ihl<<2)); 
  6.     const int type = icmp_hdr(skb)->type; 
  7.     const int code = icmp_hdr(skb)->code; 
  8.     bool tunnel = false
  9.     struct sock *sk; 
  10.     int harderr; 
  11.     int err; 
  12.     struct net *net = dev_net(skb->dev); 
  13.     // 根據報文信息找到對應socket 
  14.     sk = __udp4_lib_lookup(net, iph->daddr, uh->dest, 
  15.                    iph->saddr, uh->source, skb->dev->ifindex, 
  16.                    inet_sdif(skb), udptable, NULL); 
  17.     err = 0; 
  18.     harderr = 0; 
  19.     inet = inet_sk(sk); 
  20.  
  21.     switch (type) { 
  22.     case ICMP_DEST_UNREACH: 
  23.         err = EHOSTUNREACH; 
  24.         if (code <= NR_ICMP_UNREACH) { 
  25.             harderr = icmp_err_convert[code].fatal; 
  26.             err = icmp_err_convert[code].errno; 
  27.         } 
  28.         break; 
  29.         ... 
  30.     } 
  31.  
  32.     // 設置錯誤信息到socket 
  33.     sk->sk_err = err; 
  34.     sk->sk_error_report(sk); 
  35. out
  36.     return 0; 

__udp4_lib_err設置了錯誤信息,然后調用sk_error_report。sk_error_report是在調用socket函數時賦值的(具體在sock_init_data函數)。

  1. sk->sk_error_report =   sock_def_error_report; 

接著看sock_def_error_report

  1. static void sock_def_error_report(struct sock *sk){ 
  2.     struct socket_wq *wq; 
  3.  
  4.     rcu_read_lock(); 
  5.     wq = rcu_dereference(sk->sk_wq); 
  6.     if (skwq_has_sleeper(wq)) 
  7.         wake_up_interruptible_poll(&wq->wait, EPOLLERR); 
  8.     sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR); 
  9.     rcu_read_unlock();}static inline void sk_wake_async(const struct sock *sk, int how, int band){ 
  10.     if (sock_flag(sk, SOCK_FASYNC)) { 
  11.         rcu_read_lock(); 
  12.         sock_wake_async(rcu_dereference(sk->sk_wq), how, band); 
  13.         rcu_read_unlock(); 
  14.     } 

我們看到如果進程阻塞在socket則會被喚醒,或者設置了SOCK_FASYNC標記則收到信號。

后記:本文簡單介紹了icmp的產生和處理過程,后面有時間再細化一下。

 

責任編輯:武曉燕 來源: 編程雜技
相關推薦

2021-01-12 09:05:11

Linus Torva進程頁面鎖

2010-06-24 14:58:06

ICMP協議消息

2021-07-14 09:48:15

Linux源碼Epoll

2021-07-15 14:27:47

LinuxSocketClose

2010-07-28 17:19:28

ICMP協議

2020-10-10 07:00:16

LinuxSocketTCP

2021-06-10 09:52:33

LinuxTCPAccept

2010-08-02 14:29:46

LinuxPingICMP

2010-08-02 14:36:52

ICMPLinux

2012-09-28 09:27:50

LinuxRed Hat

2021-10-21 05:41:27

QueenSono安全工具提取數據

2022-03-25 10:16:40

CentOSLinux開源

2025-11-05 03:00:00

Linux內核TCP粘包

2010-04-02 17:44:45

MiniPCI無線網卡

2020-10-15 10:10:31

Linux數據中心IT

2010-07-28 17:36:17

2010-07-13 22:16:30

INBOUND ICM

2009-06-14 18:43:57

LinuxWindows對比

2020-10-14 14:31:37

LinuxTCP連接

2021-07-01 09:00:14

LSMtreeWiscKey 機制
點贊
收藏

51CTO技術棧公眾號

精品成人av一区二区三区| 国产www免费| 国产又粗又猛又爽又黄91| 欧美wwwww| 精品国产一区久久| 999香蕉视频| 久久综合网导航| 成人av手机在线观看| 国产91在线播放九色快色| 狂野欧美性猛交| 一区二区三区亚洲变态调教大结局| 亚洲mv在线观看| 天堂va久久久噜噜噜久久va| 国产精品特级毛片一区二区三区| 亚洲午夜电影| 日韩高清av在线| 亚洲综合伊人久久| 中文日产幕无线码一区二区| 国产精品国产成人国产三级| 国产精品一区二区三区在线观| 波多野结衣一二区| 国产综合网站| xxxxx91麻豆| 无码人妻精品一区二区三区温州| 精品视频一区二区三区| 色94色欧美sute亚洲线路一ni | 人妖一区二区三区| 欧美另类变人与禽xxxxx| 99爱视频在线| 黄色影院在线看| 亚洲图片欧美激情| 水蜜桃一区二区| 亚洲av毛片成人精品| 国产精品一区二区不卡| 国产精品日韩欧美| 黄色片网站在线免费观看| 欧美精品1区| 久久精品国产99国产精品澳门| 动漫精品一区二区三区| 国产毛片精品| 精品日本一线二线三线不卡| 亚洲天堂伊人网| 国产情侣一区二区三区| 黑人巨大精品欧美一区二区一视频 | 黄色一级视频播放| 在线免费看黄网站| 久久精品视频一区二区三区| 国产亚洲情侣一区二区无| 国产熟女一区二区三区五月婷| 青青草精品视频| 国产精品扒开腿做爽爽爽男男| 国产精品一区二区三区四| 影音先锋久久资源网| 欧美极品欧美精品欧美视频 | 亚洲18色成人| 成品人视频ww入口| 超碰激情在线| 日韩欧美999| 国产天堂在线播放| 黄色精品视频网站| 337p亚洲精品色噜噜狠狠| 亚洲第一色av| 嫩呦国产一区二区三区av| 欧美一区二区三区免费| 国产精品熟女一区二区不卡| 欧美影院精品| 亚洲国产天堂网精品网站| 中文字幕无码人妻少妇免费| 婷婷亚洲精品| 一区二区三区高清国产| 欧美a级片免费看| 亚洲区综合中文字幕日日| 精品自在线视频| 国产精品 欧美 日韩| 一区二区三区四区五区在线 | 黄色av一级片| 蜜芽一区二区三区| 147欧美人体大胆444| 亚洲精品久久久久久久久久| 99久久精品免费看| 日韩电影免费观看高清完整| 欧美一级二级三级区| 一区二区在线观看视频在线观看| av高清在线免费观看| 澳门成人av网| 欧美久久久久久久久中文字幕| 人妻少妇偷人精品久久久任期| 精品国产乱子伦一区二区| 亚洲色图13p| 亚洲欧美精品aaaaaa片| 在线日本成人| 国产精品视频男人的天堂| 精品人妻无码一区二区色欲产成人| 成人午夜av电影| 欧美日韩一区二区三| 精品国产白色丝袜高跟鞋| 亚洲成av人在线观看| 色悠悠久久综合网| 国产精品黄网站| 中日韩午夜理伦电影免费| 免费日韩在线视频| 日韩电影在线一区| 国产精品二区三区| 888av在线| 五月天久久比比资源色| 中文字幕永久有效| 西野翔中文久久精品国产| 久久影视电视剧免费网站清宫辞电视 | 国产精品12345| 精品乱码一区二区三区四区| 亚洲国产精久久久久久久| 老司机精品免费视频| 国产亚洲毛片| 日本高清成人免费播放| 亚洲女人天堂色在线7777| 91免费在线看片| 在线精品观看| 成人做爽爽免费视频| 婷婷在线观看视频| 国产精品久久久久久久久搜平片| 大伊香蕉精品视频在线| 2020国产在线| 日韩欧美国产不卡| 免费黄色国产视频| 久久激情一区| 国产精品一区二区三区在线观 | 久久福利资源站| 久久天天狠狠| 国产蜜臀在线| 日韩欧美卡一卡二| 天海翼在线视频| 捆绑调教美女网站视频一区| 久久riav二区三区| 精灵使的剑舞无删减版在线观看| 欧美丰满嫩嫩电影| 一区二区三区精品99久久| 日本午夜精品视频| 久久久夜精品| 久久香蕉综合色| 国产传媒在线| 亚洲第一免费网站| 国产成人精品av久久| 国产·精品毛片| 黄色成人在线免费观看| 精品一区二区三区在线观看视频 | 老司机精品影院| 欧美日韩一区二区在线观看视频| 欧美 日韩 成人| 爽爽淫人综合网网站| 欧美二区在线看| 肉色欧美久久久久久久免费看| 亚洲精品999| 在线观看中文字幕视频| 99re视频精品| 欧美日韩在线不卡视频| 亚洲香蕉视频| 国产脚交av在线一区二区| 精品欧美不卡一区二区在线观看 | 国产精品久久99| 亚洲怡红院在线| 伊人情人综合网| 不卡视频一区二区| 2001个疯子在线观看| 亚洲精品成人久久久| 精品久久久久久久久久久久久久久久| 久久久久久黄色| 亚洲这里只有精品| 中文字幕免费一区二区三区| 99久久精品无码一区二区毛片| 日韩特级毛片| 日韩毛片中文字幕| 毛片在线免费播放| 亚洲女人****多毛耸耸8| 扒开伸进免费视频| 美女网站久久| 婷婷视频在线播放| 精品深夜福利视频| 国产v综合ⅴ日韩v欧美大片| 中文日本在线观看| 精品国产精品一区二区夜夜嗨| 久久久久久久极品| 久久亚洲影视婷婷| 欧美成人手机在线视频| 黄色日韩在线| 日韩精品一线二线三线| aa亚洲一区一区三区| 97精品一区二区视频在线观看| 免费国产在线观看| 91精品国产综合久久香蕉麻豆| 国产一级片免费| 久久久久久黄色| 超碰在线超碰在线| 久久成人国产| 4444在线观看| 欧洲三级视频| 九九九九精品| 精品久久国产一区| 国产mv久久久| 久久亚洲资源| 色偷偷偷综合中文字幕;dd| 精品国产乱码久久久久久蜜臀网站| 午夜精品一区二区三区三上悠亚| 影音先锋男人看片资源| 91网上在线视频| 国产又粗又猛大又黄又爽| 久久综合九色| 精品久久一二三| 欧美96在线丨欧| 亚洲电影免费| 人人精品亚洲| 国产精品xxxx| 国产精品成人3p一区二区三区| 欧美在线激情网| 免费在线中文字幕| 久久伊人精品视频| 在线观看免费黄视频| 日韩精品在线私人| 免费观看国产精品| 91精品国产综合久久婷婷香蕉| 337p粉嫩色噜噜噜大肥臀| 亚洲va国产va欧美va观看| 五月婷婷一区二区| 国产精品理伦片| 亚洲人成人无码网www国产| 丰满放荡岳乱妇91ww| www,av在线| 蜜桃久久久久久| 成人黄色一区二区| 久久国产精品亚洲77777| 国产中文字幕二区| 红桃视频欧美| av在线免费观看国产| 一精品久久久| 国产成人精品免费看在线播放 | 免费观看亚洲视频| 91九色精品国产一区二区| 婷婷五月色综合| 精品不卡一区| 午夜精品一区二区在线观看的| 亚洲婷婷影院| 日本三级中国三级99人妇网站| 青青草原在线亚洲| 久久99欧美| 亚洲人成精品久久久| 久久国产精品免费一区| 米奇精品关键词| 久久99精品久久久久久久久久| 国产毛片久久久| 精品日本一区二区| 亚洲色图丝袜| 日本一区二区三区www| 国产亚洲第一伦理第一区| 日韩欧美亚洲区| 人人狠狠综合久久亚洲婷| 视频一区视频二区视频三区视频四区国产| 激情五月综合| 中文字幕日韩精品久久| 91精品亚洲| 精品人妻大屁股白浆无码| 国内精品久久久久久久影视蜜臀| 无码人妻少妇伦在线电影| 亚洲激情午夜| 日韩亚洲在线视频| 蜜臀国产一区二区三区在线播放| 九九热99视频| 国产高清精品在线| 男男做爰猛烈叫床爽爽小说 | 国产精品成人国产乱| 天天综合色天天综合| 国产成人一级片| 欧美视频一区二区| 99这里有精品视频| 亚洲黄页视频免费观看| 大乳在线免费观看| 欧美久久精品午夜青青大伊人 | 国产精品视频中文字幕91| 午夜不卡一区| 国产在线视频欧美一区二区三区| 影视先锋久久| 久久精品国产精品亚洲精品色| 国产精品激情| 日本成人中文字幕在线| 狠狠色丁香婷婷综合| 中文字幕在线视频播放| 国产女主播视频一区二区| 欧美精品久久久久性色| 欧美性猛交xxxx乱大交蜜桃 | 亚洲精品成人av| 在线观看完整版免费| 国产+人+亚洲| 日韩一区二区三区四区五区 | 国产精品久久久久久久电影| 国产亚洲精aa在线看| 久久人人九九| 午夜精品影院| www欧美激情| 97精品久久久午夜一区二区三区| 国产精品久久久视频| 亚洲国产日韩a在线播放| 中文字幕有码视频| 亚洲精品国精品久久99热| 欧美激情办公室videoshd| 欧美有码在线观看| 91精品尤物| 伊人久久大香线蕉午夜av| 亚洲欧美成人| 国产精久久久久| 亚洲欧洲一区二区三区| 亚洲精品男人的天堂| 亚洲成人av中文字幕| 巨大荫蒂视频欧美大片| 国产精品丝袜久久久久久不卡| 欧美调教网站| 无码 制服 丝袜 国产 另类| 国产乱色国产精品免费视频| 成人在线观看免费高清| 日韩欧美精品网址| 人妻无码中文字幕| 久久夜色精品国产欧美乱| 嫩草伊人久久精品少妇av杨幂| 久久国产精品久久| 亚洲国产91| 中文字幕乱妇无码av在线| 国产精品国产三级国产三级人妇| 少妇高潮av久久久久久| 亚洲精品v欧美精品v日韩精品| 日韩精品亚洲人成在线观看| 91久久精品美女| 欧美a级成人淫片免费看| 北条麻妃视频在线| 久久久久久久久伊人| 天堂网av手机版| 亚洲成人久久久久| 搞黄网站在线看| 成人三级在线| 亚洲视频日本| 无码人妻一区二区三区一| 亚洲精品成人少妇| www.国产三级| 欧美激情精品久久久久久免费印度| 欧美黄色一级| 欧美中文字幕在线观看视频| 国产精品香蕉一区二区三区| 粉嫩av性色av蜜臀av网站| 56国语精品自产拍在线观看| 国产欧美久久久久久久久| 91美女高潮出水| 亚洲区综合中文字幕日日| 国产一级二级av| 亚洲国产人成综合网站| 五月婷婷免费视频| 欧美亚洲一级片| 精品免费视频| 亚洲视频一二三四| 一区二区三区欧美视频| 人妻偷人精品一区二区三区| 777777777亚洲妇女| 国产91久久精品一区二区| mm1313亚洲国产精品无码试看| 中文字幕欧美激情一区| 亚洲综合网av| 欧美高清videos高潮hd| 麻豆一区一区三区四区| 免费在线观看毛片网站| 国产精品麻豆欧美日韩ww| 97视频免费在线| 久久久久久一区二区三区 | 中日韩在线视频| 国产成人亚洲综合色影视| 国产特黄大片aaaa毛片| 国产一区二区美女视频| 亚洲成人a级片| 9色porny| 久久久综合视频| 国产精品久久久久久久久毛片 | 欧美久久综合网| 91网址在线观看精品| 午夜精品久久久久久久久久| 久热av在线| 亚洲japanese制服美女| 亚洲精品欧洲| 免费91在线观看| 亚洲国产日韩欧美综合久久| 成人精品国产亚洲| 日韩a级在线观看| 日本一区二区三区国色天香| 国产人妻精品一区二区三区| 91av在线网站| 亚洲网色网站| 男生草女生视频| 日韩欧美亚洲国产精品字幕久久久| 性欧美又大又长又硬| 亚洲国产精品影视| 久久一区二区三区四区| 99精品国产99久久久久久97| 日本久久久久久| 韩国自拍一区| 精品视频第一页| 国产视频在线一区二区| 日韩成人久久|