Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Нити


Автор: DimanLin 10.5.2009, 21:54
Народ, взялся я ту периберать пароли от моего ssh. Написал небольшой скриптик: для этого. Это не точный пример но выглядил он как то так::

Код

for page in pages
  threads << Thread.new(page) { |myPage|
    begin
      puts "Try password #{passwordarr}"
      Net::SSH.start('localhost', 'root', :password => "#{passwordarr}")
      puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
      exit
     rescue Net::SSH::AuthenticationFailed

     end
  }
end


Поскольку соединений было слишком много на единицу времяни и приходилось создавать на каждое соединение свою нить. То это выходило очень дорого для процессора.

И я решил что лудше сразу создать оптимальное количество нитий, дать каждой их них по куску словаря и пусть себе подбирают.

Код

require "rubygems"
require 'net/ssh'


class << Net::SSH
  def butforse(passwordarr)
            begin
              puts "Try password #{passwordarr}"
              Net::SSH.start('localhost', 'root', :password => "#{passwordarr}")
              puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
              exit
            rescue Net::SSH::AuthenticationFailed

            end
  end
end

arrays = Array("a".."zz")
arr1 = arrays[0, (arrays.size-1) / 2]
arr2 = arrays[(arrays.size - 1) / 2, arrays.size - 1]

threadsz = []
threadsz2 = []

threadsz << Thread.new(arr1) { |items|
  for item in items
    Net::SSH.butforse(item)
  end
}

threadsz2 << Thread.new(arr2) { |items|
  for item in items
    Net::SSH.butforse(item)
  end
}

threadsz.each {|i| i.join}
threadsz2.each {|i| i.join}



Try password a
Try password mm
Try password b
Try password mn
Try password c
Try password mo
Try password d
Try password mp
Try password e
Try password mq
Try password f
Try password mr
Try password g
Try password ms
Try password h
Try password mt
Try password i
Try password mu
Try password j
/usr/local/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/transport/server_version.rb:44:in `readline': end of file reached (EOFError)
    from buter_ssh.rb:39:in `join'
    from buter_ssh.rb:39
    from buter_ssh.rb:39:in `each'
    from buter_ssh.rb:39

Выскакивает вот такая ошибка. Я всё голову сломал в чём проблема.... Подскажите пожалуйста. Почему ошибка именно в этом месте вылетает? И что она вобще обозначает?

Автор: GrayCardinal 11.6.2009, 10:51
http://govnokod.ru/ruby
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)