Ошибка в скрипте ruby ​​при запуске meterpreter

Мне нравится этот веб-сайт, он очень помог мне ответить на вопросы других людей, теперь я присоединился к нему, чтобы помогать друг другу, если могу.

У меня есть проблема. Запустив meterpreter (из пакета metasploit) на виртуальной машине, я попробовал сценарий, который ретранслирует все порты на скомпрометированной машине и создает виртуальный интерфейс на вашей локальной машине. Но я получаю сообщение об ошибке

Undefined method: each.

При переходе к коду:

def discovery()
  ip_port = []
  # Alive hosts discovery
  temphosts = []
  hosts = []
  ## oldstdout = $stdout ## Trick for capturing stdout
  $stdout = StringIO.new
  client.run_cmd('run landiscovery')
  temphosts = $stdout.string
  $stdout = oldstdout
  print_status "Alive Hosts:"
  temphosts.each do |x|
    if x.match(/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)
      y = x.chomp
      hosts << y
      print " - #{y}\n"
    end
  end
end

Я думаю, что это как-то связано с линией, которую я окружил ##. Это должно быть nil, поэтому temphosts тоже nil, и я получаю каждую ошибку.

Может ли кто-нибудь указать мне в хорошем направлении?

Большое спасибо.

PS: Скрипты, если кому интересно, находятся здесь: http://tools.pentester.es/multirelay

Спасибо еще раз!


person user1283604    schedule 12.04.2011    source источник


Ответы (1)


$stdout.string

Эта строка вернет один объект String, содержащий все строки вашего вывода, включая символы \n. Строковые объекты не имеют метода each.

Возможно, вы хотели получить список строк, представляющих список строк вашего вывода. В этом случае вы должны сначала разделить свою строку:

temphosts.split("\n").each do |x|
person Muriel Salvan    schedule 12.04.2011