8

データ分析のためにWebサイトを自動的にクロールするRubyスクリプトを書いていますが、今ではかなり複雑な要件があります。さまざまな国、約20か国からのアクセスをシミュレートできる必要があります。Webサイトには、IPの場所に応じて異なる情報が含まれるため、それを実行する唯一の方法は、実際にその国にあるサーバーから情報を要求することです。

20か国のそれぞれでサーバーを購入したくないので、Torを試してみることにしました。多くの人が知っているように、torrc構成ファイルを編集することで、出口ノード、つまり国を指定できます。実際のリクエストが発生します。

これを手動で行う場合、たとえば、アルゼンチンのサーバーを使用するようにtorrcファイルを編集し、Vidaliaを使用してTorを切断し、Vidaliaを再接続してから、リクエストを再実行すると、正常に機能します。ただし、このプロセスを完全に自動化し、可能な限り効率的に実行したいと考えています。TorはCで書かれているので、このためにソースコード全体を分解することは避けたいと思います。Rubyだけを使用してプロセス全体を自動化する最も簡単な方法は何ですか?

また、私が何かを見逃していて、この試練全体に代わるより簡単な方法がある場合は、私に知らせてください。

ありがとう!

4

1 に答える 1

12

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検出サイトに電話してアドレスが変更されているかどうかを確認することをお勧めします。

于 2011-07-30T11:10:22.027 に答える