程序不通过它们仅 运行 ping 生成的 IPS

Program not pinging generated IPS just running through them

我有一个生成随机 IP 地址并尝试对它们执行 ping 操作并向其添加端口的程序,我将使用此工具进行渗透测试。我让它在某一时刻工作,并决定为了找到将使用哪种 ping 方法,程序将首先发现 OS 用户正在 运行ning 并确定 ping 方法方法;有了这个:

def self.windows?
  return File.exist? "c:/WINDOWS" if RUBY_PLATFORM == 'java'
  RUBY_PLATFORM =~ /mingw32/ || RUBY_PLATFORM =~ /mswin32/
end

def self.linux?
  return File.exist? "/usr" if RUBY_PLATFORM == 'java'
  RUBY_PLATFORM =~ /linux/
end

def self.os
  return :linux if self.linux?
  return :windows if self.windows?
  nil
end

def check_os
  if windows?
    @ping = `ping -n 1 #{@ip}`
    check_file
  elsif linux?
    @ping = `ping -c 1 #{@ip}`
    check_file
  else
    @ping = `ping -c 1 #{@ip}`
    check_file
  end
end

现在这确实找出了正确的 OS(我相信有更好的方法来做到这一点,如果你知道请告诉我)但我担心的是它在程序上执行完整的 运行 时,在提示时实际上并没有使用 @ping 命令。相反,它所做的只是不断循环而不是对 IP 地址执行 ping 操作。 (假设循环直到找到大约 3500 个 IP)

源代码:

require 'colored'
require 'timeout'

def self.windows?
  return File.exist? "c:/WINDOWS" if RUBY_PLATFORM == 'java'
  RUBY_PLATFORM =~ /mingw32/ || RUBY_PLATFORM =~ /mswin32/
end

def self.linux?
  return File.exist? "/usr" if RUBY_PLATFORM == 'java'
  RUBY_PLATFORM =~ /linux/
end

def self.os
  return :linux if self.linux?
  return :windows if self.windows?
  nil
end

def check_os
  if windows?
    @ping = `ping -n 1 #{@ip}`
    check_file
  elsif linux?
    @ping = `ping -c 1 #{@ip}`
    check_file
  else
    @ping = `ping -c 1 #{@ip}`
    check_file
  end
end

def check_file
  if File.exist?("proxies.txt")
    File.truncate("proxies.txt", 0)
    puts "\n[NOTICE]File exists in system, resuming process.\n".blue.bold
    create_possibles
  else 
    puts "\n[NOTICE]File proxies.txt created successfully.\n".blue.bold
    File.new("proxies.txt")
    create_possibles
  end
end

def create_possibles
  puts "\n[NOTICE]Attempting to ping generated IP addresses.\n".blue.bold


  ports = %w(80 443 1935 2222 3128 3130 7808 8080 8081 8085 8089 
             8090 8102 8104 8106 8118 8119 8123 8888 8898 9000 
             9090 9797 9999 10000 10052 10053 10059 10088 12345 
             18000 18001 18008 37564 40080 55336 59998
            )
  100.times do
    @ip = Array.new(4){rand(256)}.join('.')
    begin
      Timeout::timeout(5) do 
        @ping
        if @ping =~ /Received = 1/ 
          puts "[SUCCESS]Possible proxies created for IP: #{@ip}".green.bold
          File.open("proxies.txt", "a+") do |proxy|
            ports.each { |port| proxy.puts("#{@ip}:#{port}") }
          end
        else
          puts "[ERROR]IP failed to ping: #{@ip}".red.bold
        end
      end
    rescue Timeout::Error, Errno::ENOBUFS
      puts "[WARNING]IP timed out: #{IP}".yellow.bold
      next
    end
  end
  check_for_amount_of_proxies
end

def check_for_amount_of_proxies
  if File.size("proxies.txt") >= 71769
    puts "\n[NOTICE]Proxies created, attempting connection\n".blue.bold
    system("proxies-scanner -f proxies.txt")
    print "[NOTICE]Truncating file: proxies.txt".blue.bold
  else
    puts "\n[NOTICE]File doesn't contain enough proxies, restarting IP finding proccess.\n".blue.bold
    create_possibles
  end
end

所以我的问题是,@ping 无法正确 运行 的地方我做错了什么,我该如何解决?

你实际上并没有执行 ping 命令。这部分:

Timeout::timeout(5) do 
    @ping # this isn't doing anything
    if @ping =~ /Received = 1/ 
      puts "[SUCCESS]Possible proxies created for IP: #{@ip}".green.bold
      File.open("proxies.txt", "a+") do |proxy|
        ports.each { |port| proxy.puts("#{@ip}:#{port}") }
      end
    else
      puts "[ERROR]IP failed to ping: #{@ip}".red.bold
    end
  end

我假设您希望带有 @ping 变量的行执行 shell 中的命令。您需要使用反引号或系统方法 system @ping 来做到这一点。这将执行 shell.

中的 @ping 字符串