class Net::SSH::Proxy::SOCKS4
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
Constants
- CONNECT
-
The packet type for connection requests
- GRANTED
-
The status code for a successful connection
- VERSION
-
The SOCKS protocol version used by this class
Attributes
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.
Public Class Methods
Source
# File lib/net/ssh/proxy/socks4.rb, line 40 def initialize(proxy_host, proxy_port = 1080, options = {}) @proxy_host = proxy_host @proxy_port = proxy_port @options = options end
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.
Public Instance Methods
Source
# File lib/net/ssh/proxy/socks4.rb, line 48 def open(host, port, connection_options) socket = Socket.tcp(proxy_host, proxy_port, nil, nil, connect_timeout: connection_options[:timeout]) 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
Return a new socket connected to the given host and port via the proxy that was requested when the socket factory was instantiated.