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