Parent

Class/Module Index [+]

Quicksearch

Rex::Proto::SunRPC::Client

XXX: CPORT!

Attributes

call_sock[RW]
context[RW]
pport[RW]
program[RW]
proto[RW]
rhost[RW]
rport[RW]
should_fragment[RW]
timeout[RW]
version[RW]

Public Class Methods

new(opts) click to toggle source
# File lib/rex/proto/sunrpc/client.rb, line 34
def initialize(opts)
        self.rhost   = opts[:rhost]
        self.rport   = opts[:rport]
        self.program = opts[:program]
        self.version = opts[:version]
        self.timeout = opts[:timeout] || 20
        self.context = opts[:context] || {}
        self.proto   = opts[:proto]

        if self.proto.downcase !~ /^(tcp|udp)$/
                raise ::Rex::ArgumentError, 'Protocol is not "tcp" or "udp"'
        end

        @pport = nil

        @auth_type = AUTH_NULL
        @auth_data = ''

        @call_sock = nil
end

Public Instance Methods

authnull_create() click to toggle source
# File lib/rex/proto/sunrpc/client.rb, line 96
def authnull_create
        @auth_type = AUTH_NULL
        @auth_data = ''
end
authunix_create(host, uid, gid, groupz) click to toggle source
# File lib/rex/proto/sunrpc/client.rb, line 101
        def authunix_create(host, uid, gid, groupz)
                raise ::Rex::ArgumentError, 'Hostname length is too long' if host.length > 255
# 10?
                raise ::Rex::ArgumentError, 'Too many groups' if groupz.length > 10

                @auth_type = AUTH_UNIX
                @auth_data =
                        Rex::Encoder::XDR.encode(0, host, uid, gid, groupz) # XXX: TIME! GROUPZ?!
        end
call(procedure, buffer, maxwait = self.timeout) click to toggle source
# File lib/rex/proto/sunrpc/client.rb, line 77
def call(procedure, buffer, maxwait = self.timeout)
        buf =
                Rex::Encoder::XDR.encode(CALL, 2, @program, @version, procedure,
                        @auth_type, [@auth_data, 400], AUTH_NULL, '')+
                buffer

        if ! @call_sock
                @call_sock = make_rpc(@proto, @rhost, @pport)
        end

        send_rpc(@call_sock, buf)
        recv_rpc(@call_sock, maxwait)
end
create() click to toggle source

XXX: Add optional parameter to have proto be something else

# File lib/rex/proto/sunrpc/client.rb, line 56
def create()
        proto_num = 0
        if @proto.eql?('tcp')
                proto_num = 6
        elsif @proto.eql?('udp')
                proto_num = 17
        end

        buf =
                Rex::Encoder::XDR.encode(CALL, 2, PMAP_PROG, PMAP_VERS, PMAP_GETPORT,
                        @auth_type, [@auth_data, 400], AUTH_NULL, '',
                        @program, @version, proto_num, 0)

        sock = make_rpc(@proto, @rhost, @rport)
        send_rpc(sock, buf)
        ret = recv_rpc(sock)
        close_rpc(sock)

        return ret
end
destroy() click to toggle source
# File lib/rex/proto/sunrpc/client.rb, line 91
def destroy
        close_rpc(@call_sock) if @call_sock
        @call_sock = nil
end
portmap_req(host, port, rpc_vers, procedure, buffer) click to toggle source

XXX: Dirty, integrate some sort of request system into create/call?

# File lib/rex/proto/sunrpc/client.rb, line 112
def portmap_req(host, port, rpc_vers, procedure, buffer)
        buf = Rex::Encoder::XDR.encode(CALL, 2, PMAP_PROG, rpc_vers, procedure,
                AUTH_NULL, '', AUTH_NULL, '') + buffer

        sock = make_rpc('tcp', host, port)
        send_rpc(sock, buf)
        ret = recv_rpc(sock)
        close_rpc(sock)

        return ret
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.