2016-09-12 2 views
8

Ich benutze Rails 4.2.7 und ich habe mehrere Tor Gems installiert.Wie ändere ich meine IP-Adresse mit Ruby/Tor?

gem 'tor' 
gem 'tor_requests' 
gem 'tor-privoxy' 
gem 'net-telnet' 

begann ich meinen Tor-Browser (unter Mac El Capitan), und ich möchte in regelmäßigen Abständen (jede 20. Anfrage)-Adresse der IP ändern, in dem meine TOR Web-Anfragen stammen. Also habe ich das versucht

Dies führt jedoch zu den folgenden Fehler. Ich bin verwirrt darüber, wie ich noch Dinge konfigurieren muss, damit ich die oben genannten Arbeiten ausführen kann.

Error during processing: Failed to open TCP connection to 127.0.0.1:8118 (general SOCKS server failure) 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:882:in `rescue in block in connect' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:879:in `block in connect' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/timeout.rb:91:in `block in timeout' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/timeout.rb:101:in `timeout' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:878:in `connect' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:863:in `do_start' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:858:in `start' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:700:in `start' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:631:in `connection_for' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:994:in `request' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/mechanize-2.7.5/lib/mechanize/http/agent.rb:274:in `fetch' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/mechanize-2.7.5/lib/mechanize.rb:464:in `get' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/tor-privoxy-0.1.1/lib/tor-privoxy/agent.rb:38:in `ip' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:57:in `block in get_content' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/tor-privoxy-0.1.1/lib/tor-privoxy/agent.rb:11:in `initialize' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:55:in `new' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:55:in `rescue in get_content' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:50:in `get_content' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:14:in `get_url' 
/Users/davea/Documents/workspace/myproject/app/services/onlinerr_race_finder_service.rb:41:in `get_race_list' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_race_finder_service.rb:26:in `process_data' 
/Users/davea/Documents/workspace/myproject/app/services/run_crawlers_service.rb:18:in `block in run_all_crawlers' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each' 
/Users/davea/Documents/workspace/myproject/app/services/run_crawlers_service.rb:5:in `run_all_crawlers' 
(irb):2:in `irb_binding' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/workspace.rb:87:in `eval' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/workspace.rb:87:in `evaluate' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/context.rb:380:in `evaluate' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:489:in `block (2 levels) in eval_input' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:623:in `signal_status' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:486:in `block in eval_input' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in `loop' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in `catch' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in `each_top_level_statement' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:485:in `eval_input' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:395:in `block in start' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:394:in `catch' 
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/irb.rb:394:in `start' 

Wie erzwinge ich programmgesteuert eine Änderung der IP-Adresse mit Ruby/Tor?

Edit: Hier ist, was ich in meiner Helfer-Datei enthalten und unten ist der Fehler, der

require 'rubygems' 
$:.unshift "./tor/lib" 
require 'tor' 
… 
    cookie_file = '/Users/davea/Library/Application Support/TorBrowser-Data/Tor/control_auth_cookie' 
    file = File.open(cookie_file, 'rb') 
    cookie = file.read # read contents of auth cookie to string 
    file.close 

    Tor::Controller.connect(:port => 9150, :cookie => cookie) do |tor| 
     tor.signal('NEWNYM') # send NEWNYM signal (gets new IP) 
    end 

Der Fehler führt, die in den Schienen Konsole führt ...

Error during processing: undefined method `signal' for #<Tor::Controller:0x007fe044b1e550> 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:87:in `block in get_content' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/tor-0.1.2/lib/tor/control.rb:38:in `connect' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:86:in `rescue in get_content' 

Edit 2 :

Nach dem Hinzufügen zu meiner Gemfile-Datei

gem 'tor', :git => 'https://github.com/dryruby/tor.rb.git' 

Ich lief den Code oben, und bekam jetzt den Fehler ...

Error during processing: end of file reached 
/Users/davea/.rvm/gems/ruby-2.3.0/bundler/gems/tor.rb-08e589d17196/lib/tor/control.rb:301:in `readline' 
/Users/davea/.rvm/gems/ruby-2.3.0/bundler/gems/tor.rb-08e589d17196/lib/tor/control.rb:301:in `read_reply' 
/Users/davea/.rvm/gems/ruby-2.3.0/bundler/gems/tor.rb-08e589d17196/lib/tor/control.rb:194:in `authenticate' 
/Users/davea/.rvm/gems/ruby-2.3.0/bundler/gems/tor.rb-08e589d17196/lib/tor/control.rb:282:in `send_command' 
/Users/davea/.rvm/gems/ruby-2.3.0/bundler/gems/tor.rb-08e589d17196/lib/tor/control.rb:269:in `signal' 
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:90:in `block in get_content' 

Antwort

3

Um Ihre IP in Tor zu ändern, müssen Sie direkt an den Controller anschließen (es wird ein Telnet-like Linie basiert Befehl/Antwort protocol.

Es sieht so aus, als ob Sie versuchen, eine Verbindung über Privoxy herzustellen, was nicht notwendig ist. Der Controller lässt standardmäßig nur lokale Verbindungen zu.

Tor-Browser Tor-Konfiguration erzwingt Authentifizierung verwendet die Cookie-Methode, ohne Änderung der Optionen in torrc müssen Sie den Inhalt des Auth-Cookie zum Verbinden lesen.

konnte ich die IP mit dem folgenden Code ändern:

require 'rubygems' 
$:.unshift "./tor/lib" 
require 'tor' 

# the cookie file contains a "password" for authentication, 32 random bytes 
cookie_file = '/home/me/tor-browser_en-US/Browser/TorBrowser/Data/Tor/control_auth_cookie' 
file = File.open(cookie_file, 'rb') 
cookie = file.read # read contents of auth cookie to string 
file.close 

Tor::Controller.connect(:port => 9151, :cookie => cookie) do |tor| 
    p tor.signal('NEWNYM') # send NEWNYM signal (gets new IP) 
end 

tor.signal einen String zurückgibt, die "250 OK", wenn der NEWNYM Befehl erfolgreich war lesen sollte. Es gibt einige interne Ratenbegrenzungen, die verhindern, dass dies zu oft ausgeführt wird (wie alle 10 Sekunden, denke ich), was kein Problem für Sie sein sollte.

EDIT: Die 0.1.2 (aktuelle Version) dieses Edelsteins enthält nicht die signal Methode aus dem Master-Zweig. Sie müssen den neuesten Code verwenden oder their code replizieren, anstatt das Signal aufzurufen.

+0

Wie ich bereits erwähnt habe, verwende ich Mac El Capitan, also was muss ich für "cookie_file =" setzen? Ich habe keine "control_auth_cookie" -Datei irgendwo auf meinem Rechner. – Dave

+0

Es sollte sich innerhalb des Tor-Datenverzeichnisses befinden, das Tor Browser zusammen mit allen anderen Netzwerk- und Statusdateien erstellt. – drew010

+0

Cool, ich habe es gefunden.Ich aktualisierte meine Antwort, um den Fehler aufzulisten, den ich auf dem Laufenlassen Ihres Codes basierte (der Fehler war "Fehler während der Verarbeitung: undefinierte Methode' signal 'für # ") – Dave

Verwandte Themen