2017-08-03 7 views
0

Lorsque j'essaie de changer l'adresse IP Tor en utilisant telnet, je cours en SOCKSError::ServerFailure: general SOCKS server failure en essayant de me connecter au port de contrôle Tor via telnet. Cependant si je lance un nouveau processus pour faire le telnetting, je n'ai aucun problème. Je ne veux pas engendrer un nouveau processus parce que c'est moche. J'espérais que quelqu'un pourrait m'aider à trouver pourquoi j'ai ce problème et une solution de plus de rubis?Ruby Tor Switching Ip - "défaillance du serveur SOCKS général" sauf si je génère un nouveau processus pour telnet dans le port de contrôle Tor

Reproduire:

départ tor:

tor --SocksPort 9350 --ControlPort 53500 --CookieAuthentication 0 --HashedControlPassword <passwordhash> --DataDirectory /tmp/tor_data/9350

Lancez ensuite ce code Ruby qui utilise socksify pour configurer un serveur de chaussettes, puis utilise le bloc tor gemme Tor::Controller.connect qui se connecte au contrôle Tor port via telnet pour basculer le point d'extrémité Tor:

require 'socksify' 
require 'terminator' 
require 'tor' 

TCPSocket::socks_server = "127.0.0.1" 
TCPSocket::socks_port = "9350" 

Tor::Controller.connect(:port => 53500) do |tor| #<- error 
    tor.authenticate("") 
    tor.signal("newnym") 
end 

Erreur à Tor::Controller.connect appel:

SOCKSError::ServerFailure: general SOCKS server failure 

Si je remplace le bloc Tor::Controller.connect avec ce (fraie un nouveau processus pour faire la session telnet), j'ai succès:

telnet_pid = nil 
begin 
    Terminator.terminate :seconds => 20 do 
    cmd = "bundle exec ruby -e \"require 'tor'\" -e " + 
      "\"Tor::Controller.connect(:port => 53500)" + 
      "{|tor| tor.authenticate(''); tor.signal('newnym')}\"" 
    telnet_pid = Process.spawn(cmd) 
    Process.wait telnet_pid 
    end 
rescue Terminator.error 
    puts 'Telnet process to switch Tor endpoint timed out!' 
    Process.kill('TERM', telnet_pid) if telnet_pid 
end 

Répondre

0

j'ai réalisé que le serveur de chaussettes était routage toutes les demandes TCP via le serveur SOCKS y compris mes demandes telnet. Si je désactive le serveur de chaussettes pendant le télésignage, puis le réactiver, cela fonctionne:

TCPSocket::socks_server = nil 
TCPSocket::socks_port = nil 

Tor::Controller.connect(:port => 53500) do |tor| #<- error 
    tor.authenticate("") 
    tor.signal("newnym") 
end 

TCPSocket::socks_server = "127.0.0.1" 
TCPSocket::socks_port = "9350"