Class: PacketGen::Plugin::NetBIOS::Datagram

Inherits:
Header::Base
  • Object
show all
Defined in:
lib/packetgen/plugin/netbios/datagram.rb

Overview

NetBIOS Datagram Service messages.

Author:

  • Sylvain Daubert

Constant Summary collapse

UDP_PORT =

Port number for NetBIOS Session Service over TCP

138
TYPES =

Datagram packet types

{
  'direct_unique' => 0x10,
  'direct_group' => 0x11,
  'broadcast' => 0x12,
  'error' => 0x13,
  'query_request' => 0x14,
  'positive_query_resp' => 0x15,
  'negative_query_resp' => 0x16,
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#:rsv(: rsv) ⇒ Integer

4-bit rsv field. 4 upper bits of #flags

Returns:

  • (Integer)


94
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 94

define_bit_fields_on :flags, :rsv, 4, :snt, 2, :f, :m

#:snt(: snt) ⇒ Integer

2-bit SNT (Source end-Node Type) field from #flags.

Returns:

  • (Integer)


94
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 94

define_bit_fields_on :flags, :rsv, 4, :snt, 2, :f, :m

#bodyString

User data. Ony present in direct_unique, direct_group and broadcast datagrams.

Returns:

  • (String)


78
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 78

define_field :body, PacketGen::Types::String, optional: ->(h) { (h.type >= 0x10) && (h.type <= 0x12) }

#dgm_idInteger

16-bit next transaction ID for datagrams

Returns:

  • (Integer)


46
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 46

define_field :dgm_id, PacketGen::Types::Int16

#dgm_lengthObject

Length of data + second level of encoded names. Not present in error datagram.



58
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 58

define_field :dgm_length, PacketGen::Types::Int16, optional: ->(h) { h.type != 0x13 }

#dst_nameObject

NetBIOS destination name. Present in all but error datagrams.

Returns:



74
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 74

define_field :dst_name, Name, default: '', optional: ->(h) { h.type != 0x13 }

#error_codeInteger

Error code. Only present in error datagrams.

Returns:

  • (Integer)


66
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 66

define_field :error_code, PacketGen::Types::Int16, optional: ->(h) { h.type == 0x13 }

#fBoolean

First packet flag. If set then this is first (and possibly only) fragment of NetBIOS datagram.

Returns:

  • (Boolean)


94
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 94

define_bit_fields_on :flags, :rsv, 4, :snt, 2, :f, :m

#flagsInteger

8-bit flags

Returns:

  • (Integer)


42
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 42

define_field :flags, PacketGen::Types::Int8

#mBoolean

More flag. If set then more NetBIOS datagram fragments follow.

Returns:

  • (Boolean)


94
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 94

define_bit_fields_on :flags, :rsv, 4, :snt, 2, :f, :m

#packet_offsetInteger

Not present in error datagram.

Returns:

  • (Integer)


62
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 62

define_field :packet_offset, PacketGen::Types::Int16, optional: ->(h) { h.type != 0x13 }

#src_ipObject

Source IP address



50
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 50

define_field :src_ip, PacketGen::Header::IP::Addr

#src_nameObject

NetBIOS source name. Only present in direct_unique, direct_group and broadcast datagrams.

Returns:



70
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 70

define_field :src_name, Name, default: '', optional: ->(h) { (h.type >= 0x10) && (h.type <= 0x12) }

#src_portObject

Source port



54
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 54

define_field :src_port, PacketGen::Types::Int16

#typeInteger

8-bit session packet type

Returns:

  • (Integer)


38
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 38

define_field :type, PacketGen::Types::Int8Enum, enum: TYPES

Class Method Details

.protocol_nameString

Give protocol name

Returns:

  • (String)


17
18
19
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 17

def self.protocol_name
  'NetBIOS::Datagram'
end

Instance Method Details

#calc_lengthInteger

Compute and set #dgm_length field

Returns:

  • (Integer)

    calculated length



98
99
100
101
102
103
# File 'lib/packetgen/plugin/netbios/datagram.rb', line 98

def calc_length
  length = self[:body].sz
  length += self[:src_name].sz if present?(:src_name)
  length += self[:dst_name].sz if present?(:dst_name)
  self.dgm_length = length
end