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)


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

define_bit_attr :flags, rsv: 4, snt: 2, f: 1, m: 1

#:snt(: snt) ⇒ Integer

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

Returns:

  • (Integer)


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

define_bit_attr :flags, rsv: 4, snt: 2, f: 1, m: 1

#bodyString

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

Returns:

  • (String)


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

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

#dgm_idInteger

16-bit next transaction ID for datagrams

Returns:

  • (Integer)


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

define_attr :dgm_id, BinStruct::Int16

#dgm_lengthObject

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



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

define_attr :dgm_length, BinStruct::Int16, optional: ->(h) { h.type != 0x13 }

#dst_nameObject

NetBIOS destination name. Present in all but error datagrams.

Returns:



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

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

#error_codeInteger

Error code. Only present in error datagrams.

Returns:

  • (Integer)


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

define_attr :error_code, BinStruct::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)


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

define_bit_attr :flags, rsv: 4, snt: 2, f: 1, m: 1

#flagsInteger

8-bit flags

Returns:

  • (Integer)


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

define_bit_attr :flags, rsv: 4, snt: 2, f: 1, m: 1

#mBoolean

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

Returns:

  • (Boolean)


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

define_bit_attr :flags, rsv: 4, snt: 2, f: 1, m: 1

#packet_offsetInteger

Not present in error datagram.

Returns:

  • (Integer)


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

define_attr :packet_offset, BinStruct::Int16, optional: ->(h) { h.type != 0x13 }

#src_ipObject

Source IP address



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

define_attr :src_ip, PacketGen::Header::IP::Addr

#src_nameObject

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

Returns:



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

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

#src_portObject

Source port



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

define_attr :src_port, BinStruct::Int16

#typeInteger

8-bit session packet type

Returns:

  • (Integer)


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

define_attr :type, BinStruct::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



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

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