2012-03-09 61 views
0

這對於測試建議(沒什麼不好)Java的硒線程同步暴力破解

我想和硒2包含了暴力破解程序誰在「0-10」密碼保護的網頁打破

我有這個(一個小例子不是實際的代碼)...

public class test implements Runnable { 

    static WebDriver driver; 

    test() { 
     StageLoader(); 
     Thread t = new Thread(this); 
     t.start(); 
    } 

    //starts firefox and goes to the page 
    private void StageLoader() { 
     driver = new FirefoxDriver(); 
     driver.get("http://test.com/login.php"); 
    } 

    @Override 
    public void run() { 
     for (int i = 0; i <= 10; i++) { 
      bruteForce(i); 
     } 
    } 

    private void bruteForce(int i) { 

     driver.findElement(
       By.name("password")) 
       .sendKeys(Integer.toString(i)); 

     String output = driver.findElement(By.id("result")).getText(); 

     if (output.indexOf("sucess") != -1) { 
      //stop 
     } else { 
      //continue 
     } 

    } 

    public static void main(String[] args) { 
     new FiberBrute(); 
    } 
} 

它完美的作品,但它缺乏同步的,我希望它由一個從0到10唯一繼續下一個如果!成功,我已經嘗試了很多,使這與並行工作,但我失敗:(你能請幫我一下嗎?

在此先感謝:d

+0

那麼你正在嘗試多線程的部分是bruteForce方法?所以它可以嘗試1-3並行,然後4-6等? – Thomas 2012-03-09 21:19:35

+0

如果您等待上一次嘗試通過或失敗,那麼您是單線程的,不需要同步。這裏並行發生了什麼?多個用戶每個都去1-10? – Thomas 2012-03-09 22:07:38

+0

問題在於for循環一次全部完成,我需要做一些事情才能等到第一次嘗試完成,然後等待第二次嘗試,等等......例如,如果1不成功,嘗試2,如果2不成功嘗試3,等等...我現在所有嘗試0到10都是一團糟:P – 2012-03-09 22:16:39

回答

0

書面應當由1走1,但它不會成功停在這裏的示例代碼。

@Override 
public void run() { 
    // Go until we run out of numbers or bruteForce comes back with 'true' 
    for (int i = 0; i <= 10 && !bruteForce(i); i++);      
} 

//Returns true if it found the password 
private boolean bruteForce(int i) { 

    driver.findElement(
      By.name("password")) 
      .sendKeys(Integer.toString(i)); 

    String output = driver.findElement(By.id("result")).getText(); 

    if (output.indexOf("sucess") != -1) { 
     //stop 
     return true; 
    } else { 
     //continue 
     return false; 
    } 

} 

爲了所有10個嘗試一次發生,bruteForce需要產卵線程,這是不是在這裏做。

+0

謝謝!!!!我會嘗試 :) – 2012-03-10 17:33:34