2011-06-09 11 views
8

Estoy escribiendo un script de Ruby que rastrea automáticamente sitios web para el análisis de datos, y ahora tengo un requisito que es bastante complicado: tengo que ser capaz de simular el acceso de una variedad de países, alrededor de 20 diferentes unos. El sitio web contendrá información diferente según la ubicación de IP, por lo que la única forma de hacerlo es solicitándolo a un servidor que se encuentre en ese país.Cliente Controlling Tor con Ruby

Como no quiero comprar servidores en cada uno de esos 20 países, decidí probar Tor - como muchos de ustedes sabrán, editando el archivo de configuración torrc es posible especificar el nodo de salida y de ahí el país del que se originará la solicitud real.

Cuando hago esto manualmente, p. editando el archivo torrc para usar un servidor argentino, luego desconectando Tor usando Vidalia, reconectando Vidalia, y luego volviendo a ejecutar la solicitud, funciona bien. Sin embargo, quiero automatizar este proceso por completo y hacerlo de la manera más eficiente posible. Tor está escrito en C, y me gustaría evitar desarmar todo su código fuente para esto. ¿Alguna idea de cuál es la forma más fácil de automatizar todo el proceso utilizando solo Ruby?

Además, si me falta algo y hay una alternativa más simple a esta prueba, avíseme.

Gracias!

Respuesta

12

Por favor, eche un vistazo al protocolo de control Tor. Puedes controlar circuitos usando telnet. http://thesprawl.org/memdump/?entry=8

Para cambiar a un nuevo circuito de interruptores wich a un nuevo punto final:

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 

ser consciente de la demora para hacer un nuevo circuito, puede tardar unos segundos, así que es mejor añadir un retardo en el código, o verifique si su dirección ha cambiado al llamar a algún sitio remoto de detección de IP.

Cuestiones relacionadas