Я хочу поместить содержимое файла, записанное в каждой строке, со специальным символом, определенным в строке /URL, взятой из консоли в Ruby.

Я пытаюсь написать простой фаззер на Ruby, который будет принимать значения из текстового файла построчно, и эти значения заменяются символом $fuzz$ в параметре GET URL, введенном пользователем из консоли.

Я написал такой код:

require 'net/http'

uri = URI(gets())

Net::HTTP.start(uri.host, uri.port) do |http|
  request = Net::HTTP::Get.new uri.request_uri
  response = http.request request 
  puts response.body
end

Я запутался, как я могу заменить символ $fuzz$, заданный пользователем из консоли в запросе GET, содержимым файла в каждой строке один за другим.

например, первая строка файла ' или 1 = 1, и я хочу заменить символ $fuzz$, написанный в каком-то запросе GET /item.php?id=$fuzz$, содержимым этой строки из файла, а затем хочу запустить этот запрос.

Например, я беру консоль URL-адреса, например, example.com/item.php?id=fuzz, теперь я открываю один файл, содержащий несколько строк. Я хочу снова отредактировать этот URL-адрес, взятый из консоли, со словом «fuzz», замененным строкой файла один за другим, и хочу отправить эти URL-запросы с заменой содержимого файла на слово fuzz в параметре запроса GET, а затем хочу сохранить все ответы в новом файле. .


person Akash Panchal    schedule 22.01.2012    source источник
comment
это слишком абстрактно для меня - не могли бы вы привести более конкретный пример?   -  person Jesse Wolgamott    schedule 23.01.2012
comment
Например, я беру консоль URL-адреса, например example.com/item.php?id=fuzz, теперь я открываю один файл с несколькими строками. Я хочу снова отредактировать этот URL-адрес, взятый из консоли, с заменой слова fuzz на строку файла один за другим, и хочу отправить эти запросы URL-адресов с заменой содержимого файла на слово fuzz в параметре запроса GET, а затем хочу сохранить все ответы в новом файле.   -  person Akash Panchal    schedule 23.01.2012


Ответы (1)


Вы захотите разделить это на два класса

require 'net/http'

class FileIdExtractor
  def ids_from_file(path_to_file)
    file = File.open(path_to_file) or die "Unable to open file..."
    content_array=[]
    file.each_line {|line| contentArray.push line }
    content_array
  end
end

class UrlToFile
  def initialize(url)
    @url = url
  end

  def write_content_to_file_for_id(id, doc)
    local_filename = "/tmp/#{id}.html"
    File.open(local_filename, 'w') {|f| f.write(doc) }
  end

  def get_html_content_from_id(id)
    full_url = @url + id
    open(full_url).read
  end

end

# to run it, something like
puts "What is the URL. use format http://example.com/item.php?id="
url = gets
ids = FileIdExtractor.new.ids_from_file("your-file-path")
ids.each do |id|
  url = UrlToFile.new(url)
  doc = url.get_html_content_from_id(id)
  url.write_content_to_file_for_id(id, doc)
end
person Jesse Wolgamott    schedule 23.01.2012
comment
Спасибо за помощь, но я хочу сделать все это для любого URL-адреса, который я беру с консоли, используя gets(), имеющую нечеткую строку в любом параметре, а затем хочу заменить это нечеткое слово в URL-запросе содержимым файла, каждую строку файла один раз, а затем хочу чтобы снова запустить этот запрос с замененным содержимым, а затем сохранить новые ответы в новом файле. - person Akash Panchal; 24.01.2012
comment
Просто добавьте инициализатор в UrlToFile для вашего базового URL-пути. - person Jesse Wolgamott; 24.01.2012
comment
Все еще не могу вас понять, я сильно запутался, скажите, пожалуйста, как я могу использовать этот Initializer в классе UrlToFile. Я предполагаю, что это похоже на создание переменной экземпляра переменной файла, что-то вроде этого @file = File.open(path_to_file) или die Невозможно открыть файл... - person Akash Panchal; 25.01.2012
comment
@AkashPanchal обновил пример кода, чтобы получить значение от пользователя, сохранить его и отправить в UrlToFile. Примечание: если вы не уверены, что это делает, вы должны начать изучать рубин с чего-то гораздо более простого. - person Jesse Wolgamott; 25.01.2012