Class: Jabber::Bytestreams::SOCKS5Socket
- Inherits:
-
TCPSocket
- Object
- TCPSocket
- Jabber::Bytestreams::SOCKS5Socket
- 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
-
#auth ⇒ Object
Authenticate for SOCKS5 proxy.
-
#connect_domain(domain, port) ⇒ Object
Issue a CONNECT request to a host name which is to be resolved by the proxy.
-
#initialize(socks_host, socks_port) ⇒ SOCKS5Socket
constructor
Connect to SOCKS5 proxy.
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
#auth ⇒ Object
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 |