module Rex::Proto::Proxy::Socks4a::Client::Relay
A mixin for a socket to perform a relay to another socket.
Public Instance Methods
relay( relay_client, relay_sock )
click to toggle source
Relay
data coming in from relay_sock to this socket.
# File lib/rex/proto/proxy/socks4a.rb, line 164 def relay( relay_client, relay_sock ) @relay_client = relay_client @relay_sock = relay_sock # start the relay thread (modified from Rex::IO::StreamAbstraction) @relay_thread = Rex::ThreadFactory.spawn("SOCKS4AProxyServerRelay", false) do loop do closed = false buf = nil begin s = Rex::ThreadSafe.select( [ @relay_sock ], nil, nil, 0.2 ) if( s == nil || s[0] == nil ) next end rescue closed = true end if( closed == false ) begin buf = @relay_sock.sysread( 32768 ) closed = true if( buf == nil ) rescue closed = true end end if( closed == false ) total_sent = 0 total_length = buf.length while( total_sent < total_length ) begin data = buf[total_sent, buf.length] sent = self.write( data ) if( sent > 0 ) total_sent += sent end rescue closed = true break end end end if( closed ) @relay_client.stop ::Thread.exit end end end end