Class: Jabber::Bytestreams::SOCKS5Socket

Inherits:
TCPSocket
  • Object
show all
Defined in:
lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb

Overview

A SOCKS5 client implementation

Usage:

  • Initialize with proxy's address and port

  • Authenticate

  • Connect to target host

Instance Method Summary collapse

Constructor Details

#initialize(socks_host, socks_port) ⇒ SOCKS5Socket

Connect to SOCKS5 proxy


24
25
26
# File 'lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb', line 24

def initialize(socks_host, socks_port)
  super(socks_host, socks_port)
end

Instance Method Details

#authObject

Authenticate for SOCKS5 proxy

Currently supports only 'no authentication required'


32
33
34
35
36
37
38
39
40
41
# File 'lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb', line 32

def auth
  write("\x05\x01\x00")
  buf = read(2)
  if buf.nil? or buf != "\x05\x00"
    close
    raise SOCKS5Error.new("Invalid SOCKS5 authentication: #{buf.inspect}")
  end

  self
end

#connect_domain(domain, port) ⇒ Object

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

domain
String

Host name

port
Fixnum

Port number


48
49
50
51
52
53
54
55
56
57
# File 'lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb', line 48

def connect_domain(domain, port)
  write("\x05\x01\x00\x03#{domain.size.chr}#{domain}#{[port].pack("n")}")
  buf = read(7 + domain.size)
  if buf.nil? or buf[0..1] != "\005\000"
    close
    raise SOCKS5Error.new("Invalid SOCKS5 connect: #{buf.inspect}")
  end

  self
end