Sha256: b21f7976eaae182594973bcb23e0ed3bbb88bf9a9e3cb9ba6686e4a812217553
Contents?: true
Size: 1.61 KB
Versions: 3
Compression:
Stored size: 1.61 KB
Contents
module RubySMB module Dcerpc class Handle attr_accessor :pipe attr_accessor :last_msg attr_accessor :response PTYPES = [ RubySMB::Dcerpc::Request, nil, RubySMB::Dcerpc::Response ] # @param [RubySMB::SMB2::File] named_pipe # @return [RubySMB::Dcerpc::Handle] def initialize(named_pipe) @pipe = named_pipe end # @param [Class] endpoint def bind(options={}) ioctl_request(RubySMB::Dcerpc::Bind.new(options)) end # @param [Hash] options def request(opnum:, stub:, options:{}) ioctl_request( RubySMB::Dcerpc::Request.new( opnum: opnum, stub: stub.new(options).to_binary_s ) ) end # @param [BinData::Record] action # @param [Hash] options def ioctl_request(action, options={}) request = @pipe.set_header_fields(RubySMB::SMB2::Packet::IoctlRequest.new(options)) request.ctl_code = 0x0011C017 request.flags.is_fsctl = 0x00000001 request.buffer = action.to_binary_s @last_msg = @pipe.tree.client.send_recv(request) handle_msg(RubySMB::SMB2::Packet::IoctlResponse.read(@last_msg)) end # @param [BinData::Record] msg def handle_msg(msg) data = msg.buffer.to_binary_s headz = RubySMB::Dcerpc::PduHeader.read(data) pdu = PTYPES[headz.ptype] if pdu dcerpc_response_stub = pdu.read(msg.output_data).stub @response = dcerpc_response_stub.to_binary_s end data end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ruby_smb-0.0.21 | lib/ruby_smb/dcerpc/handle.rb |
ruby_smb-0.0.20 | lib/ruby_smb/dcerpc/handle.rb |
ruby_smb-0.0.19 | lib/ruby_smb/dcerpc/handle.rb |