Redirect any TCP connection initiated by a Ruby script through a SOCKS5 proxy
Redirect any TCP connection initiated by a Ruby script through a SOCKS5 proxy
SOCKSify Ruby redirects any TCP connection initiated by a Ruby script through a SOCKS5 proxy. It serves as a small drop-in alternative to tsocks, except that it handles Ruby programs only and doesn't leak DNS queries.
require 'socksify/http'This adds a new class method Net::HTTP.socks_proxy which takes the host and port address of a socks proxy. Once set, all requests will be routed via socks. This is acheived by patching a private method in Net::HTTP, as sadly Ruby no longer has native socks proxy support out of the box.
Additionally, Socksify.resolve can be used to resolve hostnames to IPv4 addresses via SOCKS.
$ gem install socksify
Run a Ruby script with redirected TCP through a local Tor anonymizer:
$ socksify_ruby localhost 9050 script.rb
Set up SOCKS connections for a local Tor anonymizer, TCPSockets can be used as usual:
require 'socksify'
TCPSocket.socks_server = "127.0.0.1"
TCPSocket.socks_port = 9050
rubyforge_www = TCPSocket.new("rubyforge.org", 80)
# => #Require the additional library socksify/http and use the Net::HTTP.socks_proxy method. It is similar to Net::HTTP.Proxy from the Ruby standard library:
require 'socksify/http'
uri = URI.parse('http://ipecho.net/plain')
Net::HTTP.socks_proxy('127.0.0.1', 9050).start(uri.host, uri.port) do |http|
req = Net::HTTP::Get.new uri
resp = http.request(req)
puts resp.inspect
puts resp.body
end
# => #
# => Note that Net::HTTP.socks_proxy never relies on TCPSocket.socks_server/socks_port. You should either set socks_proxy arguments explicitly or use Net::HTTP directly.
require 'socksify/http'
uri = URI.parse('http://ipecho.net/plain')
Net::HTTP.socks_proxy('127.0.0.1', 1080, username: 'my_username', password: 'my_pwd').start(uri.host, uri.port) do |http|
req = Net::HTTP::Get.new uri
resp = http.request(req)
puts resp.inspect
puts resp.body
endSocksify.resolve("spaceboyz.net")
# => "87.106.131.203"A tor proxy and socks5 proxy with auth is required before running the tests.
pidof tordocker run -d --name socks5 -p 1080:1080 -e PROXY_USER=user -e PROXY_PASSWORD=password serjs/go-socks5-proxyThen run the tests with:
bundle exec rake
Colorful diagnostic messages are enabled by default via:
Socksify::debug = true`The repository can be checked out with:
$ git-clone [email protected]:astro/socksify-ruby.git
Send patches via pull requests.
Resolv replacement code, so that programs which resolve by themselves don't leak DNS queriesSOCKSify Ruby is distributed under the terms of the GNU General Public License version 3 (see file COPYING) or the Ruby License (see file LICENSE) at your option.
No open issues yet, or sync has not completed.