2012-03-09 64 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