Parent

Class/Module Index [+]

Quicksearch

Rex::Proto::Proxy::Socks4a

A Socks4a proxy server.

Attributes

opts[R]

Public Class Methods

new( opts={} ) click to toggle source

Create a new Socks4a server.

# File lib/rex/proto/proxy/socks4a.rb, line 354
def initialize( opts={} )
        @opts          = { 'ServerHost' => '0.0.0.0', 'ServerPort' => 1080 }
        @opts          = @opts.merge( opts )
        @server        = nil
        @clients       = ::Array.new
        @running       = false
        @server_thread = nil
end

Public Instance Methods

add_client( client ) click to toggle source
# File lib/rex/proto/proxy/socks4a.rb, line 427
def add_client( client )
        @clients << client
end
is_running?() click to toggle source

Check if the server is running.

# File lib/rex/proto/proxy/socks4a.rb, line 366
def is_running?
        return @running
end
join() click to toggle source

Block while the server is running.

# File lib/rex/proto/proxy/socks4a.rb, line 402
def join
        @server_thread.join if @server_thread
end
remove_client( client ) click to toggle source
# File lib/rex/proto/proxy/socks4a.rb, line 431
def remove_client( client )
        @clients.delete( client )
end
start() click to toggle source

Start the Socks4a server.

# File lib/rex/proto/proxy/socks4a.rb, line 373
def start
                begin
                        # create the servers main socket (ignore the context here because we don't want a remote bind)

                        @server = Rex::Socket::TcpServer.create( 'LocalHost' => @opts['ServerHost'], 'LocalPort' => @opts['ServerPort'] )
                        # signal we are now running

                        @running = true
                        # start the servers main thread to pick up new clients

                        @server_thread = Rex::ThreadFactory.spawn("SOCKS4AProxyServer", false) do
                                while( @running ) do
                                        begin
                                                # accept the client connection

                                                sock = @server.accept
                                                # and fire off a new client instance to handle it

                                                Client.new( self, sock ).start
                                        rescue
                                                wlog( "Socks4a.start - server_thread - #{$!}" )
                                        end
                                end
                        end
                rescue
                        wlog( "Socks4a.start - #{$!}" )
                        return false
                end
                return true
end
stop() click to toggle source

Stop the Socks4a server.

# File lib/rex/proto/proxy/socks4a.rb, line 409
def stop
        if( @running )
                # signal we are no longer running

                @running = false
                # stop any clients we have (create a new client array as client.stop will delete from @clients)

                clients = []
                clients.concat( @clients )
                clients.each do | client |
                        client.stop
                end
                # close the server socket

                @server.close if @server
                # if the server thread did not terminate gracefully, kill it.

                @server_thread.kill if( @server_thread and @server_thread.alive? )
        end
        return !@running
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.