Module: RubySMB::Dcerpc

Included in:
SMB1::Pipe, SMB2::Pipe
Defined in:
lib/ruby_smb/dcerpc/error.rb,
lib/ruby_smb/dcerpc.rb,
lib/ruby_smb/dcerpc/ndr.rb,
lib/ruby_smb/dcerpc/bind.rb,
lib/ruby_smb/dcerpc/uuid.rb,
lib/ruby_smb/dcerpc/ptypes.rb,
lib/ruby_smb/dcerpc/srvsvc.rb,
lib/ruby_smb/dcerpc/winreg.rb,
lib/ruby_smb/dcerpc/request.rb,
lib/ruby_smb/dcerpc/bind_ack.rb,
lib/ruby_smb/dcerpc/response.rb,
lib/ruby_smb/dcerpc/pdu_header.rb,
lib/ruby_smb/dcerpc/p_syntax_id_t.rb,
lib/ruby_smb/dcerpc/winreg/regsam.rb,
lib/ruby_smb/dcerpc/rrp_unicode_string.rb,
lib/ruby_smb/dcerpc/winreg/enum_key_request.rb,
lib/ruby_smb/dcerpc/winreg/open_key_request.rb,
lib/ruby_smb/dcerpc/winreg/close_key_request.rb,
lib/ruby_smb/dcerpc/winreg/enum_key_response.rb,
lib/ruby_smb/dcerpc/winreg/open_key_response.rb,
lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb,
lib/ruby_smb/dcerpc/winreg/close_key_response.rb,
lib/ruby_smb/dcerpc/winreg/enum_value_request.rb,
lib/ruby_smb/dcerpc/winreg/enum_value_response.rb,
lib/ruby_smb/dcerpc/winreg/query_value_request.rb,
lib/ruby_smb/dcerpc/winreg/query_value_response.rb,
lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb,
lib/ruby_smb/dcerpc/winreg/open_root_key_response.rb,
lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb,
lib/ruby_smb/dcerpc/winreg/query_info_key_response.rb

Overview

Contains all the DCERPC specific Error classes.

Defined Under Namespace

Modules: Error, Ndr, PTypes, Srvsvc, Winreg Classes: Bind, BindAck, PContElemT, PContListT, PDUHeader, PResultListT, PResultT, PSyntaxIdT, PortAnyT, PrrpUnicodeString, Request, Response, RrpUnicodeString, Uuid

Constant Summary collapse

MAX_XMIT_FRAG =
4280
MAX_RECV_FRAG =
4280

Instance Method Summary collapse

Instance Method Details

#bind(options = {}) ⇒ RubySMB::Dcerpc::BindAck

Bind to the remote server interface endpoint.

Parameters:

  • options (Hash) (defaults to: {})

    the options to pass to the Bind request packet. At least, :endpoint must but provided with an existing Dcerpc class

Returns:

Raises:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ruby_smb/dcerpc.rb', line 28

def bind(options={})
  bind_req = RubySMB::Dcerpc::Bind.new(options)
  write(data: bind_req.to_binary_s)
  @size = 1024
  dcerpc_raw_response = read()
  begin
    dcerpc_response = RubySMB::Dcerpc::BindAck.read(dcerpc_raw_response)
  rescue IOError
    raise RubySMB::Dcerpc::Error::InvalidPacket, "Error reading the DCERPC response"
  end
  unless dcerpc_response.pdu_header.ptype == RubySMB::Dcerpc::PTypes::BIND_ACK
    raise RubySMB::Dcerpc::Error::BindError, "Not a BindAck packet"
  end

  res_list = dcerpc_response.p_result_list
  if res_list.n_results == 0 ||
     res_list.p_results[0].result != RubySMB::Dcerpc::BindAck::ACCEPTANCE
    raise RubySMB::Dcerpc::Error::BindError,
      "Bind Failed (Result: #{res_list.p_results[0].result}, Reason: #{res_list.p_results[0].reason})"
  end
  @tree.client.max_buffer_size = dcerpc_response.max_xmit_frag
  dcerpc_response
end