Управление клиентом Tor с помощью Ruby - PullRequest
8 голосов
/ 09 июня 2011

Я пишу скрипт на Ruby, который автоматически сканирует веб-сайты для анализа данных, и теперь у меня есть довольно сложное требование: я должен иметь возможность симулировать доступ из разных стран, около 20 разных.Веб-сайт будет содержать различную информацию в зависимости от местоположения IP-адреса, поэтому единственный способ сделать это - запросить ее с сервера, который фактически находится в этой стране.

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

Когда я делаю это вручную, например, редактируя файл torrc для использования аргентинского сервера, затем отключая Tor с помощью Vidalia, повторно подключая Vidalia, а затем повторно запуская запрос, он работает нормально.Однако я хочу полностью автоматизировать этот процесс и сделать это максимально эффективно.Tor написан на C, и я хотел бы не разбирать весь его исходный код для этого.Есть идеи, как проще всего автоматизировать весь процесс, используя только Ruby?

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

Спасибо!

1 Ответ

12 голосов
/ 30 июля 2011

Пожалуйста, ознакомьтесь с протоколом управления Tor.Вы можете управлять цепями, используя telnet.http://thesprawl.org/memdump/?entry=8

Чтобы переключиться на новую схему, которая переключается на новую конечную точку:

  require 'net/telnet'

  def switch_endpoint
    localhost = Net::Telnet::new("Host" => "localhost", "Port" => "9051", "Timeout" => 10, "Prompt" => /250 OK\n/)
    localhost.cmd('AUTHENTICATE ""') { |c| print c; throw "Cannot authenticate to Tor" if c != "250 OK\n" }
    localhost.cmd('signal NEWNYM') { |c| print c; throw "Cannot switch Tor to new route" if c != "250 OK\n" }
    localhost.close
  end

Обратите внимание на задержку создания новой цепи, может потребоваться пара секунд, поэтому вы 'Лучше добавить задержку в коде или проверить, изменился ли ваш адрес, позвонив на какой-нибудь удаленный IP-сайт обнаружения.

...