Class: PacketGen::Header::NetBIOS::Datagram

Inherits:
Base show all
Defined in:
lib/packetgen/header/netbios/datagram.rb

Overview

NetBIOS Session Service messages.

Author:

  • Sylvain Daubert

Since:

  • 2.5.1

Constant Summary collapse

UDP_PORT =

Port number for NetBIOS Session Service over TCP

Since:

  • 2.5.1

138
TYPES =

Datagram packet types

Since:

  • 2.5.1

{
  '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

Attributes inherited from Base

#packet

Instance Method Summary collapse

Methods inherited from Base

#added_to_packet, bind, bind_header, calculate_and_set_length, #header_id, inherited, #initialize, #ip_header, known_headers, #ll_header, #method_name, #parse?, #protocol_name, protocol_name

Methods inherited from Types::Fields

#[], #[]=, #bits_on, define_bit_fields_on, define_field, define_field_after, define_field_before, delete_field, fields, #fields, #force_binary, inherited, #initialize, #inspect, #is_optional?, #is_present?, #offset_of, #optional?, #optional_fields, #present?, #read, remove_bit_fields_on, remove_field, #sz, #to_h, #to_s, update_field

Constructor Details

This class inherits a constructor from PacketGen::Header::Base

Instance Attribute Details

#:rsv(: rsv) ⇒ Integer

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

Returns:

  • (Integer)


90
# File 'lib/packetgen/header/netbios/datagram.rb', line 90

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)


90
# File 'lib/packetgen/header/netbios/datagram.rb', line 90

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)


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

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

#dgm_idInteger

16-bit next transaction ID for datagrams

Returns:

  • (Integer)


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

define_field :dgm_id, Types::Int16

#dgm_lengthObject

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



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

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

#dst_nameObject

NetBIOS destination name. Present in all but error datagrams.

Returns:



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

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

#error_codeInteger

Error code. Only present in error datagrams.

Returns:

  • (Integer)


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

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


90
# File 'lib/packetgen/header/netbios/datagram.rb', line 90

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

#flagsInteger

8-bit flags

Returns:

  • (Integer)


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

define_field :flags, Types::Int8

#mBoolean

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

Returns:

  • (Boolean)


90
# File 'lib/packetgen/header/netbios/datagram.rb', line 90

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

#packet_offsetInteger

Not present in error datagram.

Returns:

  • (Integer)


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

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

#src_ipObject

Source IP address



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

define_field :src_ip, IP::Addr

#src_nameObject

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

Returns:



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

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

#src_portObject

Source port



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

define_field :src_port, Types::Int16

#typeInteger

8-bit session packet type

Returns:

  • (Integer)


34
# File 'lib/packetgen/header/netbios/datagram.rb', line 34

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

Instance Method Details

#calc_lengthInteger

Compute and set #dgm_length field

Returns:

  • (Integer)

    calculated length

Since:

  • 2.5.1



94
95
96
97
98
99
# File 'lib/packetgen/header/netbios/datagram.rb', line 94

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