An implementation of a SOCKS4 proxy. To use it, instantiate it, then pass the instantiated object via the :proxy key to Net::SSH.start:
require 'net/ssh/proxy/socks4' proxy = Net::SSH::Proxy::SOCKS4.new('proxy.host', proxy_port, :user => 'user') Net::SSH.start('host', 'user', :proxy => proxy) do |ssh| ... end
The packet type for connection requests
The status code for a successful connection
The SOCKS protocol version used by this class
The additional options that were given to the proxy's constructor.
The proxy's host name or IP address, as given to the constructor.
The proxy's port number.
Create a new proxy connection to the given proxy host and port. Optionally, a :user key may be given to identify the username with which to authenticate.
# File lib/net/ssh/proxy/socks4.rb, line 42 def initialize(proxy_host, proxy_port=1080, options={}) @proxy_host = proxy_host @proxy_port = proxy_port @options = options end
Return a new socket connected to the given host and port via the proxy that was requested when the socket factory was instantiated.
# File lib/net/ssh/proxy/socks4.rb, line 50 def open(host, port) socket = TCPSocket.new(proxy_host, proxy_port) ip_addr = IPAddr.new(Resolv.getaddress(host)) packet = [VERSION, CONNECT, port.to_i, ip_addr.to_i, options[:user]].pack("CCnNZ*") socket.send packet, 0 version, status, port, ip = socket.recv(8).unpack("CCnN") if status != GRANTED socket.close raise ConnectError, "error connecting to proxy (#{status})" end return socket end