Class: PacketGen::Plugin::SMB::Browser

Inherits:
Header::Base
  • Object
show all
Defined in:
lib/packetgen/plugin/smb/browser.rb,
lib/packetgen/plugin/smb/browser/host_announcement.rb,
lib/packetgen/plugin/smb/browser/domain_announcement.rb,
lib/packetgen/plugin/smb/browser/local_master_announcement.rb

Overview

Browser Trans sub-protocol. See subclasses.

Author:

  • Sylvain Daubert

Direct Known Subclasses

HostAnnouncement

Defined Under Namespace

Classes: DomainAnnouncement, HostAnnouncement, LocalMasterAnnouncement

Constant Summary collapse

OPCODES =
{
  'HostAnnouncement' => 1,
  'HostAnnouncementReq' => 2,
  'RequestElection' => 8,
  'GetBackupListReq' => 9,
  'GetBackupListResp' => 10,
  'BecomeBackup' => 11,
  'DomainAnnouncement' => 12,
  'MasterAnnouncement' => 13,
  'ResetStateRequest' => 14,
  'LocalMasterAnnouncement' => 15
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#bodyString

Returns:



39
# File 'lib/packetgen/plugin/smb/browser.rb', line 39

define_field :body, PacketGen::Types::String

#opcodeInteger

8-bit opcode

Returns:

  • (Integer)


36
# File 'lib/packetgen/plugin/smb/browser.rb', line 36

define_field :opcode, PacketGen::Types::Int8Enum, enum: OPCODES

Class Method Details

.protocol_nameString

Give protocol name for this class

Returns:



16
17
18
# File 'lib/packetgen/plugin/smb/browser.rb', line 16

def self.protocol_name
  'SMB::Browser'
end

Instance Method Details

#added_to_packet(packet) ⇒ void

This method returns an undefined value.

Callback called when a Browser header is added to a packet. Here, add #smb_browser method as a shortcut to existing #smb_browser_* method.

Parameters:

  • packet (Packet)


71
72
73
74
75
# File 'lib/packetgen/plugin/smb/browser.rb', line 71

def added_to_packet(packet)
  return if packet.respond_to? :smb_browser

  packet.instance_eval("def smb_browser(arg=nil); header(#{self.class}, arg); end")
end

#read(str) ⇒ Browser

Populate object from a binary string

Parameters:

Returns:

  • (Browser)

    may return a subclass object if a more specific class may be determined



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/packetgen/plugin/smb/browser.rb', line 48

def read(str)
  if self.class == Browser
    return self if str.nil?

    PacketGen.force_binary str
    self[:opcode].read str[0]

    opcode_klass = Browser.const_get(self[:opcode].to_human) if Browser.const_defined?(self[:opcode].to_human)
    if opcode_klass
      opcode_klass.new.read str
    else
      private_read str
    end
  else
    private_read str
  end
end