国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

用PERL實現一個簡單的NIDS
2005-11-25   

隨著對網絡安全需求的深入開發,基于網絡的入侵檢測技術已經成為一個重要且有意思的研究方向。想學習NIDS技術除了去讀一些現成的資料和一些開源系統的源碼,最好的辦法莫過于自己去寫一個NIDS程序,只有那樣才能真正體會到一些NIDS的實現需求和設計妙處。
本質上說NIDS只是一種網絡流量的分析工具,通過對網絡流量的分析識別出一些已知或未知的攻擊行為,一個最簡單的NIDS完成的主要工作也就是抓包->協議解碼->匹配,眾所周知PERL是極其強大的腳本語言,尤其是它的字符串處理能力可以方便地實現對于網絡流量中惡意特征進行匹配。當然PERL畢竟只是腳本語言,它的執行效率不允許用于真正大流量生產性環境,但PERL的簡單易學及強大功能對于實現一個簡單的NIDS達到學習的目的無疑是非常好的,下面我介紹一個用PERL實現的簡單NIDS框架,我們將在Linux下實現它,在其他操作系統上類似。
PERL的一個強大特性就在于它海量的CPAN模塊庫,很多你想實現的功能都可以找到現成的模塊,你所要做的只是安裝上那些模塊即可,關于PERL的模塊及面向對象特性的管理和使用在這就不介紹了,請參看相關資料,比如O'REILLY出版的《高級Perl編程》。在用PERL編寫網絡流量分析腳本之前,需要安裝一些底層的抓包及基本的數據包解碼模塊,包括如下這些:
http://www.tcpdump.org/release/libpcap-0.8.1.tar.gz
底層基本的抓包庫。
http://www.cpan.org/authors/id/T/TI/TIMPOTTER/Net-Pcap-0.04.tar.gz
libpcap的PERL接口。
http://www.cpan.org/authors/id/T/TI/TIMPOTTER/Net-PcapUtils-0.01.tar.gz
Net-Pcap模塊的wrapper,包裝Net-Pcap的函數,可以更方便地在PERL里調用抓包。
http://www.cpan.org/authors/id/T/TI/TIMPOTTER/NetPacket-0.03.tar.gz
用于基本的IP/TCP/UDP等包解碼的模塊,剝除各種協議頭,抽取各個字段。
下面的代碼演示了一個帶有基本SMB和FTP協議解碼模塊的最簡單NIDS框架,此程序實現最簡單的NIDS功能,面向單包,不關心包的狀態,不具備高級的商業NIDS產品諸如流重組,包狀態及應用層協議的跟蹤等功能。為了提高檢測的準確性,與Snort直接匹配數據區不同的是,這個腳本實現了兩個應用層協議:SMB、FTP的簡單解碼,解碼完全是面向NIDS的需要,代碼也沒有經過仔細的測試可能存在問題,有什么建議可聯系我。
perl-ids.pl
實現抓包及檢測分析的主程序。
------------------------------ 8< ----------------------------------------
#!/usr/bin/perl
#
# Comments/suggestions to stardust at xfocus dot org
#
#
# $Id: perl-ids.pl,v 1.16 2004/03/04   21:51:12 stardust Exp $
#
# 引用所有相關的模塊
use Net::PcapUtils;
use NetPacket::Ethernet qw(:strip);
use NetPacket::TCP;
use NetPacket::IP qw(:protos);
use NetPacket::SMB;
use NetPacket::FTP;
# 定義日志文件名
$workingdir = "./";
$attacklog = "attack.log";
$monitorlog = "monitor.log";
# 以后臺進程方式運行
daemon ();
sub daemon {
  unless (fork) {
      SniffLoop ();
      exit 0;
  }
  exit 1;
}
# 抓包循環
sub SniffLoop {
  # 進入工作目錄
  chdir ("$workingdir");
  # 打開日志文件
  open (ATTACKLOG,">> $attacklog");
  open (MONITORLOG,">> $monitorlog");
  # 設置文件讀寫為非緩沖模式
  select(ATTACKLOG); $|++; select(MONITORLOG); $|++; select(STDOUT); $|++;
 
  # 設置信號處理函數,因為程序運行于后臺,退出時需要利用信號處理函數做些清理工作
  $SIG{"INT"} = 'HandleINT';
  $SIG{"TERM"} = 'HandleTERM';
 
  # 進入抓包回調函數
  Net::PcapUtils::loop(&sniffit, SNAPLEN => 1800, Promisc => 1, FILTER => 'tcp or udp', DEV => 'eth0');
}
sub sniffit {
  my ($args,$header,$packet) = @_;
  # 解碼IP包
  $ip = NetPacket::IP->decode(eth_strip($packet));
  # TCP協議
  if ($ip->{proto} == IP_PROTO_TCP) {
      # 解碼TCP包
      $tcp = NetPacket::TCP->decode($ip->{data});
      # 檢查來自SMB客戶端的包
      if (($tcp->{dest_port} == 139) || ($tcp->{dest_port} == 445)) {
          # 如果目的端口是139或445,認為是SMB協議包,做相應的檢查
          SmbClientCheck ($ip->{src_ip},$tcp->{src_port},$ip->{dest_ip},$tcp->{dest_port},$tcp->{data});
      } elsif ($tcp->{dest_port} == 21) {
          # 如果目的端口是21,認為是FTP協議,做相應的檢查
          FtpClientCheck ($ip->{src_ip},$tcp->{src_port},$ip->{dest_ip},$tcp->{dest_port},$tcp->{data});
      } else {}
      # UDP協議
  } elsif ($ip->{proto} == IP_PROTO_UDP) {
  } else {}
}
sub SmbClientCheck {
  my ($src_ip,$src_port,$dest_ip,$dst_port,$data) = @_;
 
  # 調用SMB解碼模塊解碼
  $smb = NetPacket::SMB->decode($data);
  # 如果解碼成功
  if ($smb->{valid}) {
      # 示例檢測新近公布eeye的那個ASN.1解碼錯誤導致的堆破壞漏洞
      # BID:9633,9635   CVEID:CAN-2003-0818   NSFOCUSID:6000
     
      # 如果SMB命令是Session Setup AndX
      if ($smb->{cmd} == 0x73) {
          # 如果設置了Extended Security Negotiation位,表示有包里有Security Blob
          if ($smb->{flags2} & F2_EXTSECURINEG) {
              # 用正則表達式匹配通常會在攻擊包里出現的OID及引發錯誤的畸形數據串
              # 由于不是從原理上檢測加之ASN.1編碼的靈活性,這樣的檢測會導致漏報
              if (($smb->{bytecount} > 0) && ($smb->{bytes} =~ m/x06x06x2bx06x01x05x05x02.*[xa1x05x23x03x03x01x07|x84xffxffxff]/)) {
                  # 記入日志文件
                  LogAlert ($src_ip,$src_port,$dest_ip,$dst_port,"ASN.1 malform encode attack!");
              }
          }
      }
  }
}
sub FtpClientCheck {
  my ($src_ip,$src_port,$dest_ip,$dst_port,$data) = @_;
 
  # 調用FTP解碼模塊解碼
  $ftp = NetPacket::FTP->decode($data);
  # 如果解碼成功
  if ($ftp->{valid}) {
      # 示例檢測新近公布的Serv-U < 5.0.0.4版FTP服務器MDTM命令溢出攻擊
      # BID:9751   NSFOCUSID:6078
     
      # 遍歷從數據包里解碼出來的FTP命令及其參數
      for (my $i = 1;$i <= $ftp->{cmdcount};$i++) {
          my $cmd = "cmd"."$i";
          my $para = "para"."$i";
          # 如果FTP命令是MDTM
          if (uc($ftp->{$cmd}) eq "MDTM") {
              # 用正則表達式匹配引發溢出的參數串,這里體現了正則
              # 表達式的強大,用此匹配可以從原理上檢測到畸形參數串
              if ($ftp->{$para} =~ m/d{14}[+|-]S{5,}s+S{1,}/) {
                  LogAlert ($src_ip,$src_port,$dest_ip,$dst_port,"Serv-U < v5.0.0.4 MDTM command long timezone string overflow attack!");
              }
          }
      }
  }
}
# 記錄攻擊告警
sub LogAlert {
  my ($src_ip,$src_port,$dest_ip,$dst_port,$message) = @_;
  my $nowtime = localtime;
  printf ATTACKLOG ("%st%s:%s -> %s:%st%sn",$nowtime,$src_ip,$src_port,$dest_ip,$dst_port,$message);
  printf ("%st%s:%s -> %s:%st%sn",$nowtime,$src_ip,$src_port,$dest_ip,$dst_port,$message);
}
# 記錄監控信息
sub LogMonitor {
  my ($src_ip,$src_port,$dest_ip,$dst_port,$message) = @_;
  my $nowtime = localtime;
  printf MONITORLOG ("%st%s:%s -> %s:%st%sn",$nowtime,$src_ip,$src_port,$dest_ip,$dst_port,$message);
  printf ("%st%s:%s -> %s:%st%sn",$nowtime,$src_ip,$src_port,$dest_ip,$dst_port,$message);
}
# INT信號處理例程
sub HandleINT {
  CleanUp ();
  exit (0);
}
# TERM信號處理例程
sub HandleTERM {
  CleanUp ();
  exit (0);
}
# 清理,主要工作是關閉文件句柄
sub CleanUp {
  close (ATTACKLOG); close (MONITORLOG);
}
------------------------------ 8< ----------------------------------------
FTP.pm
FTP協議解碼模塊,抽取數據包里的FTP命令及相應的參數,此文件需要拷貝到NetPacket系列模塊所在的目錄,通常是在/usr/lib/perl5/site_perl/5.x.x/NetPacket/
------------------------------ 8< ----------------------------------------
#
# NetPacket::FTP - Decode FTP packets
#
# Comments/suggestions to stardust at xfocus dot org
#
#
# $Id: FTP.pm,v 1.16 2004/03/03   l1:16:20 stardust Exp $
#
package NetPacket::FTP;
use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
use NetPacket;
my $myclass;
BEGIN {
  $myclass = __PACKAGE__;
  $VERSION = "0.01";
}
sub Version () { "$myclass v$VERSION" }
BEGIN {
  @ISA = qw(Exporter NetPacket);
# Items to export into callers namespace by default
# (move infrequently used names to @EXPORT_OK below)
  @EXPORT = qw(
  );
# Other items we are prepared to export if requested
  @EXPORT_OK = qw(
  );
# Tags:
  %EXPORT_TAGS = (
  ALL         => [@EXPORT, @EXPORT_OK],
);
}
#
# Decode the packet
#
# FTP協議文本參看RFC959,http://www.ietf.org/rfc/rfc0959.txt
# 常見的FTP命令
my @ftp_cmds = qw(ABOR ACCT ALLO APPE CDUP CWD   DELE HELP LIST MKD MODE NLST
                NOOP PASS PASV PORT PWD   QUIT REIN REST RETR RMD RNFR RNTO
                SITE SMNT STAT STOR STOU STRU SYST TYPE USER XCUP XCWD XMKD
                XPWD XRMD LPRT LPSV ADAT AUTH CCC CONF ENC MIC PBSZ PROT
                FEAT OPTS EPRT EPSV LANG MDTM MLSD MLST SIZE DIGT CLNT MACB
              );
sub decode {
  my $class = shift;
  my($data) = @_;
  my $self = {};
  my $cmdhead = 0;
  my $cmdtail = 0;
  my @parts = ();
  my $cmdcount = 0;
  my $returnindex = 0;
  my $data_len = length($data);
  # 如果數據長度過短則不處理
  if ($data_len >= 4) {
      # 一個包里的FTP命令個數
      $self->{cmdcount} = 0;
      # 搜索回車,之前認為是一個命令行,需要注意的是一個包里可能包含多個FTP命令
      while ( (($returnindex = index ($data,"x0a",$cmdhead)) >=0) || (($returnindex < 0) && (($data_len - $cmdhead) >= 4))) {
      # 調整一個命令行串尾指針
          if ($returnindex < 0) {
                  $cmdtail = $data_len -1;
        } else {
                  $cmdtail = $returnindex;
        }
          if ((my $cmdlen = ($cmdtail - $cmdhead + 1)) >= 4) {
                  # 取出命令行串
                  my $cmdline = substr($data,$cmdhead,$cmdlen);
                  # 從命令行里拆分出命令名和它的參數串
                  if (splitcmd($cmdline,@parts)) {
                      $self->{cmdcount}++;
                          my $cmdindex = "cmd"."$self->{cmdcount}";
                          my $paraindex = "para"."$self->{cmdcount}";
                          # 記錄到要返回到主程序的對象
                          $self->{$cmdindex} = $parts[0];
                          $self->{$paraindex} = $parts[1];
                  }
          }
      # 調整命令行串頭指針
          $cmdhead = $cmdtail + 1;
      }
  # 如果命令個數大于0,則說明解碼是有效的
      if ($self->{cmdcount} == 0) {
          $self->{valid} = 0;
      } else {
          $self->{valid} = 1;
      }
  } else {
      $self->{valid} = 0;
  }
  #   返回對象
  bless($self, $class);
  return $self;
}
sub splitcmd {
  my ($cmdline,$parts) = @_;
  # 去除行尾的回車
  chomp($cmdline);
  # 用正則表達式抽取出命令名字和參數,既然效率不是考慮的主要問題就“毫無顧忌”地使用正則表達式,因為方便
  if ($cmdline =~ m/^s*([a-zA-Z]{3,4})s+(.*)/) {
      my $valid_cmd = 0;
      # 檢查抽出來的命令名字是否是一個已知的合法FTP命令
      for (my $i=0;$i<@ftp_cmds;$i++) {
          if ($ftp_cmds[$i] eq uc($1)) {
          $valid_cmd = 1;
          last;
      }
      }
  # 如果是合法的命令則返回給調用函數
      if ($valid_cmd) {
          ${$parts}[0] = $1;
          ${$parts}[1] = $2;
      return 1;
      } else {
      return 0;
      }
  } else {
          return 0;
  }
}
#
# Module initialisation
#
1;
# autoloaded methods go after the END token (&& pod) below
__END__
------------------------------ 8< ----------------------------------------
SMB.pm
對SMB包頭結構的簡單解碼模塊,此文件需要拷貝到NetPacket系列模塊所在的目錄,通常是在/usr/lib/perl5/site_perl/5.x.x/NetPacket/
------------------------------ 8< ----------------------------------------
#
# NetPacket::SMB - Decode SMB packets
#
# Comments/suggestions to stardust at xfocus dot org
#
#
# $Id: SMB.pm,v 1.16 2004/02/23   12:25:17 stardust Exp $
#
package NetPacket::SMB;
use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
use NetPacket;
my $myclass;
# SMB flags
use constant F2_LONGNAMEALLW => 0x0001;
use constant F2_EXTATTRIBUTE => 0x0002;
use constant F2_SECURITYSIGN => 0x0004;
use constant F2_LONGNAMEUSED => 0x0040;
use constant F2_EXTSECURINEG => 0x0800;
use constant F2_DONTRESOLDFS => 0x1000;
use constant F2_EXECONLYREAD => 0x2000;
use constant F2_ERRORCODTYPE => 0x4000;
use constant F2_UNICODSTRING => 0x8000;
use constant F_LOCKANDREAD => 0x01;
use constant F_RCVBUFFPOST => 0x02;
use constant F_CASESENSITV => 0x08;
use constant F_CANONICPATH => 0x10;
use constant F_OPLOCKSREQU => 0x20;
use constant F_NOTIFYONOPN => 0x40;
use constant F_REQUERESPON => 0x80;
BEGIN {
  $myclass = __PACKAGE__;
  $VERSION = "0.01";
}
sub Version () { "$myclass v$VERSION" }
BEGIN {
  @ISA = qw(Exporter NetPacket);
# Items to export into callers namespace by default
# (move infrequently used names to @EXPORT_OK below)
  @EXPORT = qw(F2_LONGNAMEALLW F2_EXTATTRIBUTE F2_SECURITYSIGN
              F2_LONGNAMEUSED F2_EXTSECURINEG F2_DONTRESOLDFS
              F2_EXECONLYREAD F2_ERRORCODTYPE F2_UNICODSTRING
              F_LOCKANDREAD F_RCVBUFFPOST F_CASESENSITV
              F_CANONICPATH F_OPLOCKSREQU F_NOTIFYONOPN
              F_REQUERESPON
  );
# Other items we are prepared to export if requested
  @EXPORT_OK = qw(smb_strip
  );
# Tags:
  %EXPORT_TAGS = (
  ALL         => [@EXPORT, @EXPORT_OK],
  strip       => [qw(smb_strip)],
);
}
#
# Strip header from packet and return the data contained in it
#
undef &smb_strip;
*smb_strip = &strip;
# 剝除SMB頭的函數
sub strip {
  my ($data) = @_;
  my $smb_obj = NetPacket::SMB->decode($data);
  return $smb_obj->{data};
}  
#
# Decode the packet
#
sub decode {
  my $class = shift;
  my($data) = @_;
  my $self = {};
  my $data_len = 0;
  my $temp = "";
  $data_len = length ($data);
  # 如果數據區長度小于39字節(4+32+3),則認為不是一個可解碼的SMB包
  if ($data_len < 39) {
  $self->{valid} = 0;
  } else {
  # 取SMB的標志串
      my $smb_mark = substr ($data,4,4);
 
      # 是否符合標志串
      if ($smb_mark ne "xffx53x4dx42") {
          $self->{valid} = 0;
      } else {
          $self->{valid} = 1;
     
          # Decode SMB packet
         
          if (defined($data)) {
              # 用PERL的unpack函數解碼32字節長的SMB頭結構,頭結構可
              # 參考 http://www.cs.uml.edu/~bill/cs592/cifs.chm
              # 感謝小四(scz at nsfocus dot com)對于SMB頭結構中字段字節序的提醒
              ($self->{nbt_type}, $self->{nbt_flag}, $self->{nbt_len},
              $self->{mark}, $self->{cmd}, $self->{status},
              $self->{flags}, $self->{flags2}, $self->{ext},
              $self->{ext2}, $self->{ext3}, $self->{tid},
              $self->{pid}, $self->{uid}, $self->{mid},
              $self->{data}) = unpack("CCna4CVCvVVVvvvva*", $data);
            ($self->{wordcount},$temp) = unpack("Ca*",$self->{data});
              if ((36 + 1 + $self->{wordcount} * 2) <= ($data_len - 2)) {
                  # 解碼SMB結構下的wordcount字節及bytecount字節數據
                  my $wordbytes = $self->{wordcount} * 2;
                  ($self->{wordcount},$self->{words},$self->{bytecount},$self->{bytes}) = unpack("C"."a"."$wordbytes"."va*",$self->{data});
            } else {
                  ($self->{wordcount},$self->{words}) = unpack("Ca*",$self->{data});
              $self->{bytecount} = -1; $self->{bytes} = "";
              }
          }
      }
  }
  # 返回對象
  bless($self, $class);
  return $self;
}
#
# Module initialisation
#
1;
# autoloaded methods go after the END token (&& pod) below
__END__

熱詞搜索:

上一篇:IDS如何攻擊
下一篇:NIDS和HIDS比較

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
在线精品视频一区二区三四| 99在线视频精品| 久久99精品国产| 538在线一区二区精品国产| 亚洲一区二区三区精品在线| 99精品视频中文字幕| 亚洲免费观看在线视频| 成人黄色电影在线| 亚洲欧美日韩国产综合在线| 91亚洲男人天堂| 亚洲成a人片在线不卡一二三区 | 精品一区二区精品| 欧美激情一区二区三区蜜桃视频| 99国产精品久| 日韩精品高清不卡| 欧美电影免费观看完整版| 成人中文字幕电影| 日韩国产一二三区| 国产精品美女一区二区三区| 欧美日韩欧美一区二区| 国产成人午夜精品5599| 亚洲va欧美va人人爽| 国产日韩欧美制服另类| 9191国产精品| 97超碰欧美中文字幕| 日韩av电影免费观看高清完整版| 2017欧美狠狠色| 欧美精品久久久久久久多人混战| 国产激情视频一区二区三区欧美| 亚洲动漫第一页| 国产精品福利在线播放| 337p日本欧洲亚洲大胆精品| 在线影视一区二区三区| 国产高清在线精品| 午夜婷婷国产麻豆精品| 欧美激情在线一区二区| 欧美tickle裸体挠脚心vk| 91免费观看视频| 国产盗摄一区二区| 欧美aⅴ一区二区三区视频| 夜夜嗨av一区二区三区四季av| 精品蜜桃在线看| 欧美日韩精品综合在线| 欧美图区在线视频| 91视频在线观看| 99re66热这里只有精品3直播| 久久精品国产秦先生| 五月天中文字幕一区二区| 亚洲国产欧美在线| 中文字幕在线免费不卡| 国产午夜精品久久久久久久| 91麻豆精品国产自产在线观看一区| 99久久伊人精品| 成人高清视频在线观看| 精品一区二区三区蜜桃| 秋霞午夜鲁丝一区二区老狼| 亚洲r级在线视频| 天天av天天翘天天综合网| 亚洲小说春色综合另类电影| 亚洲激情图片qvod| 亚洲一区免费在线观看| 一个色妞综合视频在线观看| 亚洲综合久久久久| 亚洲欧美色一区| 五月婷婷另类国产| 日本sm残虐另类| 狠狠狠色丁香婷婷综合激情| 国产成人在线免费观看| 99久久综合国产精品| 91在线看国产| 91精品久久久久久久99蜜桃| 精品精品欲导航| 国产精品欧美一级免费| 亚洲自拍偷拍综合| 亚洲成a天堂v人片| 国模少妇一区二区三区| 成人av免费在线播放| 国产激情精品久久久第一区二区 | 日本伊人色综合网| 久久99深爱久久99精品| 国产高清精品在线| 在线一区二区视频| 日韩三级电影网址| 中文字幕一区二区三区四区不卡| 一区二区三区在线影院| 亚洲精品伦理在线| 久草中文综合在线| 色婷婷久久久久swag精品| 欧美日韩mp4| 久久久综合精品| 亚洲妇女屁股眼交7| 国产一区二区三区蝌蚪| 日本道色综合久久| 2024国产精品| 亚洲一级片在线观看| 极品少妇xxxx精品少妇| 一本色道久久综合亚洲aⅴ蜜桃| 7777女厕盗摄久久久| 欧美激情一区二区| 精品一区二区三区视频在线观看| 不卡欧美aaaaa| 欧美成人a在线| 亚洲高清视频的网址| 成人一区二区三区| 日韩免费在线观看| 一区二区三区中文在线观看| 福利一区二区在线| 欧美成人猛片aaaaaaa| 亚洲一区二区在线视频| 国产精品夜夜嗨| 欧美精品v日韩精品v韩国精品v| 国产精品污网站| 国产一区视频导航| 91麻豆精品久久久久蜜臀| 一片黄亚洲嫩模| voyeur盗摄精品| 日本一区二区三区高清不卡| 九色综合狠狠综合久久| 欧美日韩三级在线| 一区二区三区**美女毛片| 99国产精品视频免费观看| 国产嫩草影院久久久久| 国产夫妻精品视频| 久久九九99视频| 国内成人自拍视频| 欧美mv和日韩mv的网站| 青青国产91久久久久久| 91麻豆精品91久久久久久清纯| 亚洲国产日韩精品| 欧美亚洲综合一区| 午夜成人在线视频| 9191国产精品| 国产一区二区三区四区五区美女| 欧美成人精品高清在线播放 | 白白色 亚洲乱淫| 国产精品网曝门| www.日韩大片| 一卡二卡三卡日韩欧美| 欧美日韩视频专区在线播放| 亚洲第一成人在线| 欧美人狂配大交3d怪物一区| 亚洲福利视频一区二区| 日韩无一区二区| 国产丶欧美丶日本不卡视频| 中文字幕在线免费不卡| 一本大道av一区二区在线播放| 亚洲自拍与偷拍| 91精品国产综合久久久蜜臀粉嫩 | 久久香蕉国产线看观看99| 国产成人在线视频网站| 亚洲男人电影天堂| 欧美精品aⅴ在线视频| 国内外成人在线视频| 中文字幕日本乱码精品影院| 欧美性做爰猛烈叫床潮| 久久成人羞羞网站| 中文字幕制服丝袜一区二区三区| 日本精品视频一区二区| 精品一区二区三区视频在线观看| 中文字幕一区二区三中文字幕| 91 com成人网| 国产v综合v亚洲欧| 亚洲风情在线资源站| 久久久久久久久久久久电影| 91在线视频播放地址| 麻豆91在线播放| 亚洲精品国久久99热| 久久中文字幕电影| 欧美性大战久久久久久久蜜臀| 人人精品人人爱| 亚洲综合网站在线观看| 国产午夜一区二区三区| 欧美撒尿777hd撒尿| 国产成人免费视频网站高清观看视频 | 国产亚洲人成网站| 精品视频一区 二区 三区| 国产精品亚洲人在线观看| 亚洲一区二区高清| 中文字幕制服丝袜成人av | 成人黄色在线视频| 蜜乳av一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 日韩精品一区二区三区swag | 91精品中文字幕一区二区三区| 99国产精品99久久久久久| 国产原创一区二区| 另类中文字幕网| 午夜精品免费在线观看| 亚洲日本免费电影| 中文幕一区二区三区久久蜜桃| 精品久久国产97色综合| 91精品国产色综合久久| 欧美日韩中文精品| 欧美少妇bbb| 欧美在线观看一区二区| 在线观看亚洲一区| 欧美伊人精品成人久久综合97 | 国产美女在线观看一区| 美日韩一区二区| 美女视频一区二区|