Class: SmbRpc::Srvsvc

Inherits:
Rpc
  • Object
show all
Defined in:
lib/smbRpc/srvsvc.rb,
lib/smbRpc/srvsvc/netShareEnum.rb,
lib/smbRpc/srvsvc/serverGetInfo.rb

Defined Under Namespace

Classes: NetShareEnumReq, NetShareEnumRes, NetnameRemark, NetrServerGetInfoReq, NetrServerGetInfoRes, Server_info_101, Share_enum_struct, Share_info_0, Share_info_0_container, Share_info_1, Share_info_1_container

Instance Attribute Summary

Attributes inherited from Rpc

#smb

Instance Method Summary collapse

Methods inherited from Rpc

#bind, #close, #connect

Constructor Details

#initialize(**argv) ⇒ Srvsvc

Returns a new instance of Srvsvc.



6
7
8
9
10
# File 'lib/smbRpc/srvsvc.rb', line 6

def initialize(**argv)
  super(argv)
  self.connect
  self.bind(pipe:"srvsvc")
end

Instance Method Details

#netShareEnum(serverName: @ip) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/smbRpc/srvsvc/netShareEnum.rb', line 86

def netShareEnum(serverName:@ip)
  shareEnumReq = NetShareEnumReq.new(:srvName=> serverName, shareLevel:1)
  shareEnumRes = @file.ioctl_send_recv(shareEnumReq).buffer
  shares = NetShareEnumRes.read(shareEnumRes)
  out = []
  numShare = shares.share_enum_struct.share_info_container.entriesRead
  shi1_container = shares.share_enum_struct.share_info_container
  numShare.times do |i|
    type =  shi1_container.share_info_entries.shi1_type[i]
    shareName = shi1_container.share_info_entries.netname_remark[i].netname.str.unpack("v*").pack("c*").chop
    remark = shi1_container.share_info_entries.netname_remark[i].remark.str.unpack("v*").pack("c*").chop
    out << {shareName:shareName, remark:remark, type:type}
  end
  return out
end

#serverGetInfo(serverName: @ip) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/smbRpc/srvsvc/serverGetInfo.rb', line 40

def serverGetInfo(serverName:@ip)
  netrServerGetInfoReq = NetrServerGetInfoReq.new(:srvName=> serverName)
  netrServerGetInfoRes = @file.ioctl_send_recv(netrServerGetInfoReq).buffer
  netrServerGetInfoRes.raise_not_error_success("serverGetInfo")
  netrServerGetInfoRes = NetrServerGetInfoRes.read(netrServerGetInfoRes)
  info = netrServerGetInfoRes.infoStruct
  h = { :platform_id => info.sv101_platform_id,
        :version_major => info.sv101_version_major,
        :version_minor => info.sv101_version_minor,
        :type => info.serverType,
        :name => info.nameNdr.str.unpack("v*").pack("c*").chop, 
        :comment => info.commentNdr.str.unpack("v*").pack("c*").chop 
  }
  return h
end