青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-162  評論-223  文章-30  trackbacks-0
 
腳本概述
   由于某些sdk或軟件依賴眾多的第三方庫,而從官網下載到windows主機或從linux傳到windows時,所依賴的so庫往往丟失符號鏈接,給編譯運行帶來不便,因此編寫了ctlsolink腳本,用于自動為單個so或某目錄下的眾多so或創建/刪除一級/二級符號鏈接。該腳本的用法如下:
   ● 第1參數為mk或rm子命令,mk表示創建,rm表示刪除
   ● 第2參數為文件或目錄
   
● 第3參數是可選的-r,且只能是-r,如果指定了,則表示不斷遞歸子目錄

腳本實現
   考慮到so庫帶版本一般多為libx.so.1,libx.so.1.2,libx.so.1.2.3這三種形式(x為庫名),對于前一種創建/刪除一級符號鏈接即可,后兩種則創建/刪除二級符號鏈接。為了精確地抽出一級和二級鏈接名稱,這里使用awk來匹配,用shell變量的最短匹配模式從尾部逐步刪除點號及數字,核心代碼如下   
 1    if [ "$dir" != "$self_dir" ] || [ "$name" != "$self_name" ]; then
 2        if echo $name | aw'{if($0~/\.so\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}$/) exit 0; else exit 1}'; then
 3            link_name=${name%.[0-9]*}
 4            link_name=${link_name%.[0-9]*}
 5            link_name=${link_name%.[0-9]*}
 6            link_name2=${name%.[0-9]*}
 7            link_name2=${link_name2%.[0-9]*}
 8        elif echo $name | awk '{if($0~/\.so\.[0-9]{1,}\.[0-9]{1,}$/) exit 0; else exit 1}'; then
 9            link_name=${name%.[0-9]*}
10            link_name=${link_name%.[0-9]*}
11            link_name2=${name%.[0-9]*}
12        elif echo $name | awk '{if($0~/\.so\.[0-9]{1,}$/) exit 0; else exit 1}'; then 
13            link_name=${name%.[0-9]*}
14        else
15            return
16        fi
17
18        if [ $do_mk = "yes" ]; then
19            #echo "name=$name, link_name=$link_name, link_name2=$link_name2"
20            if [ -"$link_name2" ]; then
21                ln -sf $name $link_name2
22                ln -sf $link_name2 $link_name
23            else
24                ln -sf $name $link_name
25            fi
26        else
27            if [ -n $link_name2 ]; then
28                rm -f $link_name2
29            fi
30            rm -f $link_name
31        fi
32    fi
   要注意的是,這兒不能使用%%刪除最長匹配的尾部來得到link_name,因為它的模式是.[0-9]*,這可能會錯誤地匹配了so前的部分,比如libx.1.so.2得到libx,而期望的是libx.1.so
   完整腳本下載:ctlsolink

運行效果
   初始狀態
   
   運行ctlsolink創建軟鏈接后
   
   運行ctlsolink刪除軟鏈接后
          
posted @ 2019-11-05 18:17 春秋十二月 閱讀(1999) | 評論 (0)編輯 收藏
   為了減少程序中的硬編碼,靈活按需管理字符串空間,使用了ATL中的CString類,代碼如下
 1         CString bstrComPathName;
 2         WCHAR componentPathName[1];
 3         DWORD dwNameLen = 1;    
 4 
 5         if (!GetComputerNameEx(ComputerNamePhysicalDnsFullyQualified, componentPathName, &dwNameLen))
 6         { 
 7             DWORD dwErr = GetLastError();
 8             if(ERROR_MORE_DATA==dwErr)
 9             {            
10                 if (!GetComputerNameEx(ComputerNamePhysicalDnsFullyQualified, bstrComPathName.GetBuffer(dwNameLen), &dwNameLen))
11                 { 
12                     zlog_error(g_zc, "GetComputerNameEx with ComputerNamePhysicalDnsFullyQualified fail: %d", GetLastError());
13                     return -1;
14                 }
15             }
16             else
17             {
18                 zlog_error(g_zc, "GetComputerNameEx with ComputerNamePhysicalDnsFullyQualified for fail: %d", dwErr);
19                 return -1;
20             }
21         }                
22         bstrComPathName.ReleaseBuffer(); 
    需要注意的是,GetBuffer方法雖提供方便了直接修改CString對象的內部緩沖區,但違背了面向對象設計的原則(由公開方法修改內部數據),因此不保證對象的完整性,在操作完成后一定要調用ReleaseBuffer
posted @ 2019-07-31 12:51 春秋十二月 閱讀(7999) | 評論 (0)編輯 收藏
  在GNU make中文手冊這本書中,3.14節講到了依賴文件的自動生成,如下圖


  圖中的規則對C源文件和Makefile在同一目錄,是正確的。但是不在同一目錄的又希望依賴文件在對應的目錄下,比如src/log/log_file.c,希望依賴文件log_file.d生成在src/log/下。因為gcc(aix平臺xlc編譯器亦如此)生成的依賴文件內容中目標文件名沒有帶路徑,例如下所示
log_file.o: src/log/log_file.c src/log/log_file.h src/log/log_type.h \
 src/log/../base/io_ext.h

  所以sed就找不到src/log/log_file.o而替換了,改正后的規則如下
%.d: %.c
    $(CC) $(CFLAGS) $(INCS) $< $(MFLAGS) $@.$$$$;\
    sed 's,$(*F).o[ :]*,$*.o $@: ,g' < $@.$$$$ > $@;\
    $(RM) $@.$$$$

  該規則對C源文件和Makefile在同一目錄也適合,生成后的依賴文件內容如下
src/log/log_file.o src/log/log_file.d: src/log/log_file.c src/log/log_file.h src/log/log_type.h \
 src/log/../base/io_ext.h
posted @ 2018-11-16 12:08 春秋十二月 閱讀(871) | 評論 (0)編輯 收藏
由于traceroute只能診斷UDP通信的包路由,不能確定TCP通信的實際路由(可能變換),因此編寫了本文。為方便描述,下面的IP、MAC和端口均為示例,實際診斷中可更換為具體的值

1. 如何判斷客戶端到服務器的TCP包,是否經過了網關
     在客戶端執行 tcpdump -i eno16777728 ether dst b0:b9:8a:69:65:3e and host 192.168.0.26 and tcp port 80  抓取經過網關且往返服務器的TCP端口為80的包
     eno16777728 接口名稱;ether 以太網鏈路,dst 目標(src表示源);b0:b9:8a:69:65:3e 網關MAC地址;192.168.0.26 服務器IP地址,80 監聽端口

     輸出結果分析
       ● 有輸出,則表示經過了網關
       ● 有部分輸出而TCP通信還在進行,則表示先前的包經過了網關,后來路由表項緩存被重定向更新,沒經過網關了
       ● 不斷輸出,則表示一直經過網關

2. 如何判斷路由表項緩存被重定向更新
     在客戶端執行 tcpdump -i eno16777728 src 192.168.1.1 and dst 192.168.1.45 and icmp  抓取來自網關和到達客戶端的所有icmp包
     192.168.1.1 網關IP;192.168.1.45 客戶端(出口)IP

     輸出結果分析
       ● 沒有輸出,則表示沒有收到rerdirect包,路由表項緩存不變
       ● 有輸出類似ICMP redirect 192.168.0.26 to host 192.168.0.26(前面一個IP表示到達服務器的直接路由IP,后一個表示服務器IP)
       ● 則表示收到了ICMP重定向包,內核會更新路由表項及緩存網關為192.168.0.26,下次通信時就直接發往192.168.0.26了

3. 如何控制接收ICMP重定向
      ● echo 0 | tee /proc/sys/net/ipv4/conf/*/accept_redirects    禁止所有網卡接收,可避免路由表項緩存被修改
      ● echo 1 | tee /proc/sys/net/ipv4/conf/*/accept_redirects    啟用所有網卡接收ICMP重定向消息

4. 查看、刷新路由表項緩存
      ● ip route get 192.168.0.26    可以從輸出中看到通住目標IP的實際路由
      ● ip route flush cache             清空路由表項緩存,下次通信時內核會查main表(即命令route輸出的表)以確定路由
posted @ 2017-12-29 17:24 春秋十二月 閱讀(1994) | 評論 (0)編輯 收藏
前言
   近期有機會,深入了SSL/TLS協議原理與細節,并分析了相關密碼學內容,心得頗多,歷經半月,終于寫成了這份文檔。
   本人水平尚有限,錯誤難免,歡迎指正,不勝感激。

目錄
         

部分章節預覽
   第3章


   第5章第4節


   第11章第3節

全文
   下載地址:深入理解SSL/TLS技術內幕
posted @ 2016-12-15 17:16 春秋十二月 閱讀(1661) | 評論 (0)編輯 收藏
算法描述
【公開密鑰】    
   p是512到1024位的素數
   q是160位長,并與p-1互素的因子
   g = h^((p-1)/q) mod p,其中h<p-1且g>1
   y = g^x mod p
【私有密鑰】
   x < q,長160位
【簽名】
   k為小于q的隨機數,k^-1為k模q的逆元,m為消息,H為單向散列函數
   r = (g^k mod p) mod q
   s = (k^-1(H(m)+xr)) mod q
【驗證】
   w = s^-1 mod q
   u1 = (H(m)w) mod q
   u2 = (rw) mod q
   v = ((g^u1 * y^u2) mod p) mod q
   若v = r,則簽名被驗證

驗簽推導
   1. 先證明兩個中間結論
      因(h,p)=1(p為素數且h<p,(a1,a1)是數論中的符號,記為a1與a2的最大公約數),故依費馬小定理有h^(p-1)=1 mod p,則對任意整數n,有
      g^(nq) mod p = (h^((p-1)/q))^(nq) mod p
                          = h^(n(p-1)) mod p
                          = (h^(p-1) mod p)^n  mod p
                          = (1^n) mod p = 1     (1)
      對任意整數t、n,可表示為t=nq+z,其中z>0,則有
      g^t mod p = g^(nq+z) mod p
                      = (g^(nq) mod p * (g^z mod p)) mod p
                      = g^z mod p
                      = g^(t mod q) mod p    (2)

  2. 再假設簽名{r,s}和消息m均沒被修改,令H(m)=h,開始推導v
      v = ((g^u1 * y^u2) mod p) mod q
         = (g^(hw mod q) * ((g^x mod p)^(rw mod q) mod p)) mod q
         = ((g^(hw mod q) mod p * ((g^x mod p)^(rw mod q) mod p)) mod p) mod q
         = ((g^(hw mod q) mod p * (g^(x * (rw mod q)) mod p)) mod p) mod q
         = ((g^(hw) mod p * ((g^(rw mod q) mod p)^x mod p)) mod p) mod q
         = ((g^(hw) mod p * ((g^(rw) mod p)^x mod p)) mod p) mod q
         = ((g^(hw) mod p * (g^(rwx) mod p)) mod p) mod q
         = (g^(hw+rwx) mod p) mod q
         = (g^((h+rx)w) mod p) mod q    (3)

      又因w = s^-1 mod q
         故(sw) mod q = 1
           =>(((k^-1(h+xr)) mod q)w) mod q = 1
           =>((k^-1(h+xr))w) mod q = 1
           =>(h+xr)w = k mod q    (4)

      將(4)式代入(3)式中得
      v = (g^(k mod q) mod p) mod q
         = (g^k mod p) mod q
         = r

  3. 最后由(4)式知,若h、r和s任一個有變化(s變化導致w變化),則v ≠ r
posted @ 2016-11-24 19:39 春秋十二月 閱讀(5369) | 評論 (0)編輯 收藏
算法描述    
   隨機選擇兩個大的素數 p、q ,且p ≠ q,計算n = pq、r = (p-1)(q-1),依歐拉定理,r即為與n互質的素數個數;選擇一個小于r的整數e(即加密指數),求得e關于模r的逆元d(即解密指數),則{n,e}為公鑰、{n,d}為私鑰;根據模的逆元性質有ed ≡ 1 (mod r);設m為明文,則加密運算為m^e ≡ c (mod n), c即為密文;則解密過程 c^d ≡ m (mod n)。
   證明會用到費馬小定理,即 若y為素數且x不為y的倍數, 則 x^(y-1) ≡ 1 (mod y)(費馬小定理的證明需先證明歐拉定理,此處略)。符號≡表示同余,^表示,|表示整除,*表示相乘。

算法證明
 第一種證明途徑   
   因 ed ≡ 1 (mod (p-1)(q-1)),令 ed = k(p-1)(q-1) + 1,其中 k 是整數
   則 c^d = (m^e)^d = m^(ed) = m^(k(p-1)(q-1)+1)
   1.若m不是p的倍數,也不是q的倍數
      則 m^(p-1) ≡ 1 (mod p) (費馬小定理)
         => m^(k(p-1)(q-1)) ≡ 1 (mod p)
      m^(q-1) ≡ 1 (mod q) (費馬小定理)
         => m^(k(p-1)(q-1)) ≡ 1 (mod q)
      故 p、q 均能整除 m^(k(p-1)(q-1)) - 1
         => pq | m^(k(p-1)(q-1)) - 1
      即 m^(k(p-1)(q-1)) ≡ 1 (mod pq)   
         => m^(k(p-1)(q-1)+1) ≡ m (mod n)   

   2.若m是p的倍數,但不是q的倍數
      則 m^(q-1) ≡ 1 (mod q) (費馬小定理)
         => m^(k(p-1)(q-1)) ≡ 1 (mod q)
         => m^(k(p-1)(q-1)+1) ≡ m (mod q)
      因 p | m
         => m^(k(p-1)(q-1)+1) ≡ 0 (mod p)
         => m^(k(p-1)(q-1)+1) ≡ m (mod p)
      故 m^(k(p-1)(q-1)+1) ≡ m (mod pq) 
      即 m^(k(p-1)(q-1)+1) ≡ m (mod n)

   3.若m是q的倍數,但不是p的倍數,證明同上

   4.若m同為p和q的倍數時
      則 pq | m
         => m^(k(p-1)(q-1)+1) ≡ 0 (mod pq)
         => m^(k(p-1)(q-1)+1) ≡ m (mod pq)
      即 m^(k(p-1)(q-1)+1) ≡ m (mod n)

 第二種證明途徑
   先證明m^ed ≡ m (mod p)恒成立
   1.若p為m的因子,則p | m^ed - m顯然成立,即m^ed ≡ m (mod p)
   2.若p不為m的因子,令ed = k(p-1)(q-1) + 1,則 m^(ed-1) - 1 = m^(k(p-1)(q-1)) - 1
       m^(p-1) ≡ 1 (mod p) (費馬小定理)
        => m^(k(p-1)) ≡ 1 (mod p)
        => m^(k(p-1)(q-1)) ≡ 1 (mod p)
        => m^(ed-1) ≡ 1 (mod p)
        => m^ed ≡ m (mod p)
   同理可證m^ed ≡ m (mod q)
   故m^ed ≡ m (mod pq),即m^ed ≡ m (mod n)
   又因 c^d = m^e^d = m^(ed)
   故 c^d ≡ m (mod n),證畢
   
總結
 第二種比第一種簡單直觀,以上證明途徑對RSA私鑰簽名與驗簽同樣適合。
posted @ 2016-11-18 17:05 春秋十二月 閱讀(2665) | 評論 (0)編輯 收藏
腳本源碼
   由于很多應用項目依賴諸多第三方開源庫,這些開源庫各有不同的核心目錄、庫目標和輸出位置,這里的核心目錄是指僅產生so庫的工程目錄,庫目標是指僅產生so庫的make目標,輸出位置是相對于核心目錄的,但不必是子目錄,可用..來回溯到父目錄的某位置,更高層目錄的位置,依次類推。為了統一支持它們,使用了一些技巧,詳見示例腳本如下
 1.PHONY: all clean lib core
 2
 3thirdlib=openssl-1.0.1u?build_ssl ACE_wrappers/ace json ncurses-6.0??lib
 4coremod=main
 5
 6dir = `echo $@ | awk -F? '{print $$1}'`
 7aim = `echo $@ | awk -F? '{print $$2}'`
 8out = `echo $@ | awk -F? '{print $$3}'`
 9
10copy=\cp -Pf ${dir}/${out}/*.so* output
11
12define MAKE_SUBDIR
13echo "${dir},${aim},${out}"\
14if [ "$(MAKECMDGOALS)" != "clean" ]; then \
15$(MAKE) ${aim} -${dir}\
16if [ "$$is_cp" -eq "1" ]; then \
17$(copy); \
18fi \
19else \
20$(MAKE) clean -C ${dir}; \
21fi 
22endef
23
24all: lib core
25
26lib: $(thirdlib)
27
28$(thirdlib)::
29    @is_cp=1; $(MAKE_SUBDIR)
30
31core: $(coremod)
32
33$(coremod)::
34    @is_cp=0; $(MAKE_SUBDIR)
35
36clean: $(thirdlib) $(coremod)

實現技巧
   1)使用?作為分隔符,所分隔的3個域依次為核心目錄、庫目標、輸出位置;使用awk來獲取各域,分別為dir、aim和out;在運行過程中,值dir一定非空,而aim為空則表示默認目標,out為空表示輸出位置即為dir目錄。
   2)copy為命令變量,功能為每當一個庫編譯完成后,將輸出的so庫拷貝到output下,并保持軟鏈接;對于有的開源庫,需在編譯前,使用對應的選項來調用configure,使其生成so庫。
   3)為了重用代碼,定義了MAKE_SUBDIR命令包,參數變量為is_cp,當is_cp為1時,表示當前編譯的是依賴庫,否則是主程序。 
   4)thirdlib和coremod為依賴文件,使用了雙冒號規則,這樣一來,只要在thirdlib中加入新的依賴庫,指定核心目錄、庫目標和輸出位置即可,其它地方不用改。
posted @ 2016-10-19 15:11 春秋十二月 閱讀(3268) | 評論 (0)編輯 收藏
腳本概述
   當需要在很多(比如幾十至幾百)臺機器上編譯同一程序時,如果一個個地手工拷貝源碼、再編譯,那么效率就很低,為了能大量節省手工、并行地編譯,因此寫了一個腳本,該腳本基于自動化腳本語言expect(expect基于tcl)實現,基本原理是針對每個遠程主機,創建一個子進程,在該子進程內先調用scp拷貝源碼到遠程主機,再用ssh登錄到遠程主機、發送cd、configure和make命令,交互期間的命令輸出多用正則分析,最終的編譯輸出保存到當前目錄output子目錄下。其命令行參數說明如下:
    第1參數為遠程主機配置文件:一個多行文本文件,每行格式為IP 用戶名 密碼,空格符分隔,支持#注釋。
    第2參數為本地主機源碼目錄:要求該目錄存在Makefile和configure文件。
    第3參數為遠程主機目標目錄:用于存放源碼的位置。

腳本實現
   拷貝源碼
 1proc copy_file {host user srcdir dstdir passwd {to 10} } {
 2    if [catch "spawn scp -rq $srcdir $user@$host:$dstdir" msg] {
 3        send_error "failed to spawn scp: $msg\n"
 4        exit 1
 5    }
 6    
 7    set timeout $to
 8    expect_after eof { 
 9        send_error "$host scp died unexpectedly\n"
10        exit 1
11    }
12    expect {
13        "(yes/no)?" { send "yes\r"; exp_continue }
14        -re "(?:P|p)assword:" { send "$passwd\r" }
15        timeout { do_timeout "$host scp" }
16    }
17
18    expect {
19        full_buffer { exp_continue }
20        timeout { exp_continue }
21        eof 
22    }
23}
   第2行調用spawn命令執行scp命令,并用catch捕捉錯誤;當執行成功后,第12行用expect等待遠端輸出(超時默認為10秒),第13、14行自動輸入用戶名和密碼,當過程中網絡連接斷開時,會匹配到第8行的eof;當輸出完成連接關閉時,會匹配到第21行的eof;如果輸出太多超過expect內部的buffer時,會匹配到第19行的full_buffer,這里由于為了提高效率,使用了靜默方式的scp,因些實際會匹配到第20行的timeout,不管匹配到哪種情況,都要繼續直到eof。
 
   執行編譯
 1proc do_make {host user passwd subdir {to 10} } {
 2    if [catch {spawn ssh $user@$host} msg ] {
 3        send_error "failed to spawn ssh: $msg\n"
 4        exit 1
 5    }
 6    
 7    set timeout $to
 8    expect_after eof { 
 9        send_error "$host ssh died unexpectedly\n"
10        exit 1
11    }
12    
13    expect {  
14        "*yes/no" { send "yes\r"; exp_continue }
15        -re "(?:P|p)assword:" { send "$passwd\r" }  
16        timeout { do_timeout "$host ssh" }
17    }  
18    wait_cmd $spawn_id passwd
19
20    send "cd $subdir\r"  
21    wait_cmd $spawn_id cd
22    
23    send "source configure\r"
24    wait_cmd $spawn_id configure
25
26    send "make\r"  
27    wait_cmd $spawn_id make
28
29    send "exit\r"  
30    expect eof  
31}
   關于spawn和expect的解釋與上節拷貝源碼相同,不同的是依次發送命令cd、source configure、make,每個命令須等到命令提示符后(調用自定義函數wait_cmd)再發下一個,最后發送exit退出ssh、導致連接關閉,匹配到最后一行的eof。對于有的項目源碼,可能沒有或不用配置,那么configure文件可以不存在或內容為空,如果不存在導致報錯也沒關系,不影響make;如果configure出錯,那么make也會出錯。這里使用source是為了使配置在當前shell中生效。
   
   主循環
 1set f [open $file r]
 2set curtime [clock seconds]
 3
 4log_user 0
 5set s {[:blank:]}
 6set pattern "^(\[^#$s]+)\[$s]+(\[^$s]+)\[$s]+(\[^$s]+)"
 7
 8while { [gets $f line] != -1 } {
 9    if { ![regexp $pattern [string trimleft $line] ? host user passwd] } {
10        continue
11    }
12    send_user "$host $user $passwd\n"
13    if { ![fork] } {
14        
15        set filename output/${host}_[clock format $curtime -format %y.%m.%d_%H.%M.%S].log
16        log_file -noappend -a $filename
17
18        copy_file $host $user $srcdir $dstdir $passwd 30
19        do_make $host $user $passwd $subdir 30
20
21        send_user "$host finish\n"
22        exit
23    }
24}
   打開遠程主機配置文件,讀取每一行直到文件尾,忽略注釋行,用正則提取IP、用戶名和密碼,創建子進程,按IP和當前時間命名log文件(由于前面調用log_user 0關閉了控制臺輸出,因此為了能記錄輸出到日志文件,一定要加-a選項),最后調用函數copy_file和do_make。
   
   完整腳本下載:autobuild.zip
posted @ 2016-09-28 11:04 春秋十二月 閱讀(3858) | 評論 (0)編輯 收藏
描述
   云查殺平臺以nginx作為反向代理服務器,作為安全終端與云查詢服務的橋梁。當安全終端需要查詢黑文件時,HTTP請求及其響應都會經過nginx,為了獲取并統計一天24小時查詢的黑文件數量,就得先截獲經過nginx的HTTP響應,再做數據分析。截獲HTTP數據流有多種方法,為了簡單高效,這里使用了掛接HTTP過濾模塊的方法,另外為了不影響nginx本身的IO處理,將HTTP響應實體發送到另一個進程即統計服務,由統計服務來接收并分析HTTP響應,架構如下圖
   統計服務由1個接收線程和1個存儲線程構成,其中接收線程負責接收從nginx過濾模塊發來的HTTP響應實體,解析它并提取黑文件MD5,加入共享環形隊列;而存儲線程從共享環形隊列移出黑文件MD5,插入到臨時內存映射文件,于每天定時同步到磁盤文件。

特點
   這種架構減少了nginx IO延遲,保證了nginx的穩定高效運行,從而不影響用戶的業務運行;本地連接為非阻塞的,支持了統計服務的獨立運行與升級。

實現
   nginx過濾模塊
      該流程運行在nginx工作進程。
      由于nginx采用了異步IO機制,因此僅當截獲到HTTP響應實體也就是有數據經過時,才有后面的操作;若沒有數據,則什么也不用做。這里每次發送前先判斷是否連接了統計服務,是為了支持統計服務的獨立運行與升級,換句話說,不管統計服務是否運行或崩潰,都不影響nginx的運行。

統計服務
   接收線程
      這里的接收線程也就是主線程。
  
   存儲線程
      存儲線程為另一個工作線程。
      同步文件定時器的時間間隔要比新建文件定時器的短,由于定時器到期的事件處理是一種異步執行流,所以將它們當做并行,與“從q頭移出黑文件MD5”操作畫在了同一水平方向。
posted @ 2016-08-25 11:10 春秋十二月 閱讀(1115) | 評論 (0)編輯 收藏
僅列出標題
共17頁: First 4 5 6 7 8 9 10 11 12 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费观看一区| 亚洲第一毛片| 激情成人亚洲| 国产偷自视频区视频一区二区| 国产精品久线观看视频| 欧美精品二区三区四区免费看视频| 久久在线免费视频| 欧美精品日韩www.p站| 欧美另类69精品久久久久9999| 欧美视频二区36p| 国产九九视频一区二区三区| 韩国精品久久久999| 亚洲电影免费在线观看| 99在线热播精品免费99热| 亚洲欧美激情在线视频| 久久久国产精品一区二区中文| 蜜桃久久精品一区二区| 亚洲人成网站777色婷婷| 亚洲一区视频在线观看视频| 久久久99爱| 欧美三区在线| 伊人成人在线视频| 99在线视频精品| 久久亚洲风情| 日韩一区二区精品视频| 久久久99爱| 国产精品久久久久久亚洲毛片| 精品动漫一区二区| 亚洲欧美国产高清| 91久久在线观看| 欧美专区在线播放| 欧美日韩精品综合| 亚洲第一综合天堂另类专| 亚洲综合视频1区| 欧美国产免费| 亚洲欧美日韩专区| 欧美精品在线视频观看| 国产主播一区二区| 亚洲一区视频在线| 亚洲区欧美区| 老司机精品视频网站| 国模大胆一区二区三区| 亚洲一区二区三区影院| 亚洲国产高潮在线观看| 久久久久久久精| 国产视频在线观看一区| 亚洲视频视频在线| 欧美三级欧美一级| 欧美大胆成人| 在线不卡中文字幕播放| 午夜视频在线观看一区二区三区| 最近中文字幕日韩精品 | 亚洲欧洲日产国产网站| 久久久久久久高潮| 国产专区欧美专区| 欧美在线观看你懂的| 亚洲一级特黄| 国产精品夫妻自拍| 亚洲一区二区黄| 亚洲最黄网站| 欧美日韩在线电影| 亚洲一区亚洲二区| 亚洲永久在线| 国产精品一级二级三级| 亚洲欧美色婷婷| 亚洲欧美日韩精品在线| 国产精品一区二区a| 久久av一区二区三区| 午夜亚洲一区| 精品91久久久久| 欧美大片在线观看| 欧美激情一区二区三区 | 日韩视频二区| 亚洲精品欧美日韩专区| 欧美精品一区二区在线观看| 一本色道久久综合一区| 中文日韩电影网站| 国产九九精品| 久久九九精品99国产精品| 久久精品国产免费| 91久久午夜| 一本色道久久综合亚洲91| 国产精品乱人伦一区二区| 欧美伊人影院| 六月天综合网| 亚洲午夜三级在线| 欧美亚洲在线| 亚洲免费精品| 午夜影院日韩| 亚洲精品在线视频| 亚洲欧美日韩国产另类专区| 在线看不卡av| 亚洲网站啪啪| 亚洲欧洲精品一区二区精品久久久| 亚洲国产精品一区在线观看不卡| 欧美日韩一区二区在线播放| 欧美一区二区成人6969| 卡通动漫国产精品| 亚洲一二三区在线| 久久久综合激的五月天| 亚洲视频在线观看视频| 久久精品中文| 亚洲在线免费| 久久精品视频在线观看| 欧美激情无毛| 国产热re99久久6国产精品| 欧美成人a∨高清免费观看| 欧美日韩综合视频网址| 裸体丰满少妇做受久久99精品| 欧美日韩中文字幕| 欧美福利视频一区| 国产亚洲激情在线| 中日韩美女免费视频网址在线观看 | 国产精品久久久久999| 欧美福利视频在线| 国产视频久久| 亚洲性感激情| 亚洲视频图片小说| 欧美国产精品劲爆| 巨胸喷奶水www久久久免费动漫| 国产精品www.| 亚洲精品在线视频观看| 亚洲电影在线| 久久久伊人欧美| 久久久久久久久一区二区| 国产精品扒开腿爽爽爽视频| 亚洲人精品午夜| 亚洲精品久久久久久久久久久久| 久久久福利视频| 久久男人av资源网站| 国产精品揄拍一区二区| 亚洲性视频网站| 午夜精彩视频在线观看不卡| 欧美三级电影网| 91久久精品国产91性色tv| 亚洲国产精品www| 噜噜噜噜噜久久久久久91| 欧美v日韩v国产v| 亚洲激情在线观看| 欧美成人免费播放| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产婷婷97碰碰久久人人蜜臀| 亚洲一区精品在线| 欧美一级视频| 国产欧美一区二区三区视频 | 欧美国产成人精品| 亚洲欧洲精品一区二区| 欧美精品激情在线| 一区二区三区欧美激情| 午夜在线观看欧美| 国语自产偷拍精品视频偷| 久久婷婷人人澡人人喊人人爽 | 香蕉久久一区二区不卡无毒影院 | 在线成人免费观看| 欧美不卡在线| 日韩亚洲精品电影| 国产欧美日韩激情| 久久人人超碰| 蜜臀av性久久久久蜜臀aⅴ| 久久综合网色—综合色88| 麻豆亚洲精品| 国产精品久久中文| 最新高清无码专区| 性刺激综合网| 亚洲国产二区| 性欧美1819性猛交| 欧美成黄导航| 欧美日韩亚洲国产精品| 亚洲一区二区在线免费观看视频| 久久不射2019中文字幕| 日韩视频在线一区二区三区| 欧美精品久久99| 在线观看成人小视频| 国产精品视频一二| 国产人成精品一区二区三| 国内精品久久久久久 | 另类激情亚洲| 亚洲国产一区二区三区a毛片| 亚洲视频一区二区| 国产色视频一区| 久久av免费一区| 久久精品91久久香蕉加勒比| 久久一日本道色综合久久| 一区二区高清视频在线观看| 国产精品婷婷午夜在线观看| 免费观看在线综合色| 亚洲小说欧美另类婷婷| 欧美激情一区二区三区| 欧美一区二区三区在线播放| 日韩视频在线免费| 精品99一区二区| 国产精品香蕉在线观看| 免费欧美日韩| 久久精品一区四区| 亚洲在线视频网站| 亚洲精品一区二| 亚洲福利视频网| 美女视频一区免费观看| 欧美在线观看天堂一区二区三区| 99精品视频免费在线观看|