Class Jabber::Bytestreams::SOCKS5Socket
In: lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb
Parent: TCPSocket

A SOCKS5 client implementation

Usage:

  • Initialize with proxy‘s address and port
  • Authenticate
  • Connect to target host

Methods

auth   connect_domain   new  

Public Class methods

Connect to SOCKS5 proxy

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb, line 20
20:       def initialize(socks_host, socks_port)
21:         super(socks_host, socks_port)
22:       end

Public Instance methods

Authenticate for SOCKS5 proxy

Currently supports only ‘no authentication required‘

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb, line 28
28:       def auth
29:         write("\x05\x01\x00")
30:         buf = read(2)
31:         if buf.nil? or buf != "\x05\x00"
32:           close
33:           raise SOCKS5Error.new("Invalid SOCKS5 authentication: #{buf.inspect}")
34:         end
35: 
36:         self
37:       end

Issue a CONNECT request to a host name which is to be resolved by the proxy.

domain:[String] Host name
port:[Fixnum] Port number

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb, line 44
44:       def connect_domain(domain, port)
45:         write("\x05\x01\x00\x03#{domain.size.chr}#{domain}#{[port].pack("n")}")
46:         buf = read(7 + domain.size)
47:         if buf.nil? or buf[0..1] != "\005\000"
48:           close
49:           raise SOCKS5Error.new("Invalid SOCKS5 connect: #{buf.inspect}")
50:         end
51: 
52:         self
53:       end

[Validate]