packetgen 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +13 -4
  3. data/lib/packetgen.rb +3 -1
  4. data/lib/packetgen/capture.rb +2 -0
  5. data/lib/packetgen/config.rb +1 -0
  6. data/lib/packetgen/header.rb +5 -0
  7. data/lib/packetgen/header/arp.rb +2 -0
  8. data/lib/packetgen/header/asn1_base.rb +2 -0
  9. data/lib/packetgen/header/base.rb +16 -0
  10. data/lib/packetgen/header/bootp.rb +2 -0
  11. data/lib/packetgen/header/crypto.rb +2 -0
  12. data/lib/packetgen/header/dhcp.rb +2 -0
  13. data/lib/packetgen/header/dhcp/option.rb +3 -0
  14. data/lib/packetgen/header/dhcp/options.rb +2 -0
  15. data/lib/packetgen/header/dhcpv6.rb +109 -0
  16. data/lib/packetgen/header/dhcpv6/duid.rb +147 -0
  17. data/lib/packetgen/header/dhcpv6/option.rb +391 -0
  18. data/lib/packetgen/header/dhcpv6/options.rb +29 -0
  19. data/lib/packetgen/header/dhcpv6/relay.rb +48 -0
  20. data/lib/packetgen/header/dns.rb +10 -2
  21. data/lib/packetgen/header/dns/name.rb +7 -0
  22. data/lib/packetgen/header/dns/opt.rb +6 -0
  23. data/lib/packetgen/header/dns/option.rb +7 -0
  24. data/lib/packetgen/header/dns/qdsection.rb +7 -1
  25. data/lib/packetgen/header/dns/question.rb +7 -0
  26. data/lib/packetgen/header/dns/rr.rb +7 -0
  27. data/lib/packetgen/header/dns/rrsection.rb +7 -0
  28. data/lib/packetgen/header/dot11.rb +4 -2
  29. data/lib/packetgen/header/dot11/control.rb +2 -0
  30. data/lib/packetgen/header/dot11/data.rb +2 -0
  31. data/lib/packetgen/header/dot11/element.rb +2 -0
  32. data/lib/packetgen/header/dot11/management.rb +2 -0
  33. data/lib/packetgen/header/dot11/sub_mngt.rb +2 -0
  34. data/lib/packetgen/header/dot1q.rb +2 -0
  35. data/lib/packetgen/header/dot1x.rb +3 -1
  36. data/lib/packetgen/header/eap.rb +3 -1
  37. data/lib/packetgen/header/eap/fast.rb +2 -0
  38. data/lib/packetgen/header/eap/md5.rb +2 -0
  39. data/lib/packetgen/header/eap/tls.rb +2 -0
  40. data/lib/packetgen/header/eap/ttls.rb +2 -0
  41. data/lib/packetgen/header/esp.rb +7 -0
  42. data/lib/packetgen/header/eth.rb +2 -0
  43. data/lib/packetgen/header/gre.rb +4 -9
  44. data/lib/packetgen/header/http/headers.rb +2 -0
  45. data/lib/packetgen/header/http/request.rb +3 -1
  46. data/lib/packetgen/header/http/response.rb +3 -1
  47. data/lib/packetgen/header/icmp.rb +4 -11
  48. data/lib/packetgen/header/icmpv6.rb +4 -11
  49. data/lib/packetgen/header/igmp.rb +4 -11
  50. data/lib/packetgen/header/igmpv3.rb +4 -11
  51. data/lib/packetgen/header/igmpv3/group_record.rb +2 -0
  52. data/lib/packetgen/header/igmpv3/mq.rb +2 -0
  53. data/lib/packetgen/header/igmpv3/mr.rb +2 -0
  54. data/lib/packetgen/header/ike.rb +13 -6
  55. data/lib/packetgen/header/ike/auth.rb +2 -0
  56. data/lib/packetgen/header/ike/cert.rb +2 -0
  57. data/lib/packetgen/header/ike/certreq.rb +2 -0
  58. data/lib/packetgen/header/ike/id.rb +2 -0
  59. data/lib/packetgen/header/ike/ke.rb +2 -0
  60. data/lib/packetgen/header/ike/nonce.rb +2 -0
  61. data/lib/packetgen/header/ike/notify.rb +7 -0
  62. data/lib/packetgen/header/ike/payload.rb +9 -0
  63. data/lib/packetgen/header/ike/sa.rb +11 -4
  64. data/lib/packetgen/header/ike/sk.rb +7 -0
  65. data/lib/packetgen/header/ike/ts.rb +2 -0
  66. data/lib/packetgen/header/ike/vendor_id.rb +2 -0
  67. data/lib/packetgen/header/ip.rb +48 -11
  68. data/lib/packetgen/header/ip/addr.rb +8 -0
  69. data/lib/packetgen/header/ip/option.rb +2 -0
  70. data/lib/packetgen/header/ip/options.rb +2 -0
  71. data/lib/packetgen/header/ipv6.rb +5 -3
  72. data/lib/packetgen/header/ipv6/addr.rb +8 -0
  73. data/lib/packetgen/header/ipv6/extension.rb +2 -0
  74. data/lib/packetgen/header/ipv6/hop_by_hop.rb +2 -0
  75. data/lib/packetgen/header/llc.rb +2 -0
  76. data/lib/packetgen/header/mld.rb +2 -0
  77. data/lib/packetgen/header/mldv2.rb +4 -2
  78. data/lib/packetgen/header/mldv2/mcast_address_record.rb +3 -1
  79. data/lib/packetgen/header/mldv2/mlq.rb +2 -0
  80. data/lib/packetgen/header/mldv2/mlr.rb +4 -2
  81. data/lib/packetgen/header/ospfv2.rb +249 -0
  82. data/lib/packetgen/header/ospfv2/db_description.rb +105 -0
  83. data/lib/packetgen/header/ospfv2/hello.rb +104 -0
  84. data/lib/packetgen/header/ospfv2/ls_ack.rb +55 -0
  85. data/lib/packetgen/header/ospfv2/ls_request.rb +90 -0
  86. data/lib/packetgen/header/ospfv2/ls_update.rb +72 -0
  87. data/lib/packetgen/header/ospfv2/lsa.rb +252 -0
  88. data/lib/packetgen/header/ospfv2/lsa_header.rb +122 -0
  89. data/lib/packetgen/header/ospfv3.rb +216 -0
  90. data/lib/packetgen/header/ospfv3/db_description.rb +114 -0
  91. data/lib/packetgen/header/ospfv3/hello.rb +104 -0
  92. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +103 -0
  93. data/lib/packetgen/header/ospfv3/ls_ack.rb +51 -0
  94. data/lib/packetgen/header/ospfv3/ls_request.rb +108 -0
  95. data/lib/packetgen/header/ospfv3/ls_update.rb +74 -0
  96. data/lib/packetgen/header/ospfv3/lsa.rb +252 -0
  97. data/lib/packetgen/header/ospfv3/lsa_header.rb +123 -0
  98. data/lib/packetgen/header/snmp.rb +2 -0
  99. data/lib/packetgen/header/tcp.rb +14 -14
  100. data/lib/packetgen/header/tcp/option.rb +7 -1
  101. data/lib/packetgen/header/tcp/options.rb +7 -0
  102. data/lib/packetgen/header/tftp.rb +2 -0
  103. data/lib/packetgen/header/udp.rb +6 -14
  104. data/lib/packetgen/inspect.rb +5 -1
  105. data/lib/packetgen/packet.rb +3 -1
  106. data/lib/packetgen/pcapng.rb +2 -0
  107. data/lib/packetgen/pcapng/block.rb +2 -0
  108. data/lib/packetgen/pcapng/epb.rb +2 -0
  109. data/lib/packetgen/pcapng/file.rb +2 -0
  110. data/lib/packetgen/pcapng/idb.rb +2 -0
  111. data/lib/packetgen/pcapng/shb.rb +2 -0
  112. data/lib/packetgen/pcapng/spb.rb +2 -0
  113. data/lib/packetgen/pcapng/unknown_block.rb +2 -0
  114. data/lib/packetgen/proto.rb +2 -0
  115. data/lib/packetgen/types/array.rb +3 -0
  116. data/lib/packetgen/types/cstring.rb +3 -1
  117. data/lib/packetgen/types/enum.rb +2 -0
  118. data/lib/packetgen/types/fields.rb +8 -4
  119. data/lib/packetgen/types/int.rb +3 -1
  120. data/lib/packetgen/types/int_string.rb +2 -0
  121. data/lib/packetgen/types/oui.rb +2 -0
  122. data/lib/packetgen/types/string.rb +3 -0
  123. data/lib/packetgen/types/tlv.rb +8 -0
  124. data/lib/packetgen/utils.rb +6 -4
  125. data/lib/packetgen/utils/arp_spoofer.rb +2 -0
  126. data/lib/packetgen/version.rb +3 -1
  127. metadata +25 -3
@@ -0,0 +1,123 @@
1
+ # This file is part of PacketGen
2
+ # See https://github.com/sdaubert/packetgen for more informations
3
+ # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
8
+ module PacketGen
9
+ module Header
10
+ class OSPFv3
11
+
12
+ # This class handles {OSPFv3 OSPFv3} LSA header. A LSA header has the
13
+ # following format:
14
+ # 0 1 2 3
15
+ # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
16
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
17
+ # | LS Age | LS Type |
18
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
19
+ # | Link State ID |
20
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
21
+ # | Advertising Router |
22
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
23
+ # | LS sequence number |
24
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
25
+ # | LS checksum | length |
26
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
27
+ #
28
+ # == About LSA headers
29
+ # LSA headers are used as-is in {DbDescription} and {LSAck} payloads.
30
+ # But this class is also a base class for different LSA class, as {LSARouter}.
31
+ # @author Sylvain Daubert
32
+ class LSAHeader < Types::Fields
33
+ # LSA known types
34
+ TYPES = {
35
+ 'Router' => 0x2001,
36
+ 'Network' => 0x2002,
37
+ 'Inter-Area-Prefix' => 0x2003,
38
+ 'Inter-Area-Router' => 0x2004,
39
+ 'AS-External' => 0x4005,
40
+ 'NSSA' => 0x2007,
41
+ 'Link' => 0x0008,
42
+ 'Intra-Area-Prefix' => 0x2009
43
+ }
44
+
45
+ # @!attribute age
46
+ # The time in seconds since the LSA was originated.
47
+ # @return [Integer]
48
+ define_field :age, Types::Int16
49
+ # @!attribute type
50
+ # The type of the LSA.
51
+ # @return [Integer]
52
+ define_field :type, Types::Int16Enum, enum: TYPES
53
+ # @!attribute link_state_id
54
+ # This field identifies the portion of the internet environment
55
+ # that is being described by the LSA.
56
+ # @return [String]
57
+ define_field :link_state_id, IP::Addr
58
+ # @!attribute advertising_router
59
+ # The Router ID of the router that originated the LSA.
60
+ # @return [String]
61
+ define_field :advertising_router, IP::Addr
62
+ # @!attribute sequence_number
63
+ # @return [Integer]
64
+ define_field :sequence_number, Types::Int32
65
+ alias seqnum sequence_number
66
+ alias seqnum= sequence_number=
67
+ # @!attribute checksum
68
+ # The Fletcher checksum of the complete contents of the LSA,
69
+ # including the LSA header but excluding the LS age field.
70
+ # @return [Integer]
71
+ define_field :checksum, Types::Int16
72
+ # @!attribute length
73
+ # Length of the LSA, including the header.
74
+ # @return [Integer]
75
+ define_field :length, Types::Int16
76
+
77
+ # Compute and set Fletcher-16 checksum on LSA
78
+ # @return [Integer]
79
+ def calc_checksum
80
+ self.checksum = 0
81
+ bytes = to_s[2..-1].unpack('C*')
82
+
83
+ c0 = c1 = 0
84
+ bytes.each do |byte|
85
+ c0 += byte
86
+ c1 += c0
87
+ end
88
+ c0 %= 255
89
+ c1 %= 255
90
+
91
+ x = ((sz - 16 - 1) * c0 - c1) % 255
92
+ x += 255 if x <= 0
93
+ y = 255 * 2 - c0 - x
94
+ y -= 255 if y > 255
95
+ self.checksum = (x << 8) | y
96
+ end
97
+
98
+ # Compute length and set +length+ field
99
+ # @return [Integer]
100
+ def calc_length
101
+ self.length = Base.calculate_and_set_length(self)
102
+ end
103
+
104
+ # Get human-readable type
105
+ # @return [String]
106
+ def human_type
107
+ self[:type].to_human
108
+ end
109
+
110
+ # @return [String]
111
+ def to_human
112
+ "LSA<#{human_type},#{link_state_id},#{advertising_router}>"
113
+ end
114
+
115
+ # Extract header from current LSA
116
+ # @return [LSAHeader]
117
+ def to_lsa_header
118
+ LSAHeader.new(self.to_h)
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Header
9
11
 
@@ -1,3 +1,10 @@
1
+ # This file is part of PacketGen
2
+ # See https://github.com/sdaubert/packetgen for more informations
3
+ # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
1
8
  module PacketGen
2
9
  module Header
3
10
 
@@ -7,7 +14,7 @@ module PacketGen
7
14
  # * a sequence number ({#seqnum}, {Types::Int32} type),
8
15
  # * an acknownledge number ({#acknum}, +Int32+ type),
9
16
  # * a 16-bit field ({#u16}, +Int16+ type) composed of:
10
- # * a 4-bit {#data_offset} value,
17
+ # * a 4-bit {#data_offset} self[attr],
11
18
  # * a 3-bit {#reserved} field,
12
19
  # * a 9-bit {#flags} field,
13
20
  # * a {#window} field (+Int16+ type),
@@ -44,7 +51,7 @@ module PacketGen
44
51
  # {#options} TCP attribute is a {Options}. {Option} may added to it:
45
52
  # tcph.options << PacketGen::Header::TCP::MSS.new(1250)
46
53
  # or:
47
- # tcph.options << { opt: 'MSS', value: 1250 }
54
+ # tcph.options << { opt: 'MSS', self[attr]: 1250 }
48
55
  # @author Sylvain Daubert
49
56
  class TCP < Base
50
57
  end
@@ -188,15 +195,8 @@ module PacketGen
188
195
  sum = ip_header(self).pseudo_header_checksum
189
196
  sum += IP_PROTOCOL
190
197
  sum += self.sz
191
- str = self.to_s
192
- str << "\x00" if str.length % 2 == 1
193
- sum += str.unpack('n*').reduce(:+)
194
-
195
- while sum > 0xffff do
196
- sum = (sum & 0xffff) + (sum >> 16)
197
- end
198
- sum = ~sum & 0xffff
199
- self[:checksum].value = (sum == 0) ? 0xffff : sum
198
+ sum += IP.sum16(self)
199
+ self.checksum = IP.reduce_checksum(sum)
200
200
  end
201
201
 
202
202
  # Compute header length and set +data_offset+ field
@@ -212,14 +212,14 @@ module PacketGen
212
212
  def inspect
213
213
  str = Inspect.dashed_line(self.class, 2)
214
214
  shift = Inspect.shift_level(2)
215
- to_h.each do |attr, value|
215
+ fields.each do |attr|
216
216
  next if attr == :body
217
- str << Inspect.inspect_attribute(attr, value, 2)
217
+ str << Inspect.inspect_attribute(attr, self[attr], 2)
218
218
  if attr == :u16
219
219
  doff = Inspect.int_dec_hex(data_offset, 1)
220
220
  str << shift + Inspect::FMT_ATTR % ['', 'data_offset', doff]
221
221
  str << shift + Inspect::FMT_ATTR % ['', 'reserved', reserved]
222
- flags = ''
222
+ flags = ''.dup
223
223
  %w(ns cwr ece urg ack psh rst syn fin).each do |fl|
224
224
  flags << (send("flag_#{fl}?") ? fl[0].upcase : '.')
225
225
  end
@@ -1,3 +1,10 @@
1
+ # This file is part of PacketGen
2
+ # See https://github.com/sdaubert/packetgen for more informations
3
+ # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
1
8
  module PacketGen
2
9
  module Header
3
10
  class TCP
@@ -235,4 +242,3 @@ module PacketGen
235
242
  end
236
243
  end
237
244
  end
238
-
@@ -1,3 +1,10 @@
1
+ # This file is part of PacketGen
2
+ # See https://github.com/sdaubert/packetgen for more informations
3
+ # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
1
8
  module PacketGen
2
9
  module Header
3
10
  class TCP
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module Header
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module Header
8
10
 
@@ -72,25 +74,15 @@ module PacketGen
72
74
  ip = ip_header(self)
73
75
  sum = ip.pseudo_header_checksum
74
76
  sum += IP_PROTOCOL
75
- sum += length
76
- sum += sport
77
- sum += dport
78
- sum += length
79
- payload = body.to_s
80
- payload << "\x00" unless payload.size % 2 == 0
81
- payload.unpack('n*').each { |x| sum += x }
82
-
83
- while sum > 0xffff do
84
- sum = (sum & 0xffff) + (sum >> 16)
85
- end
86
- sum = ~sum & 0xffff
87
- self[:checksum].value = (sum == 0) ? 0xffff : sum
77
+ sum += self.sz
78
+ sum += IP.sum16(self)
79
+ self.checksum = IP.reduce_checksum(sum)
88
80
  end
89
81
 
90
82
  # Compute length and set +length+ field
91
83
  # @return [Integer]
92
84
  def calc_length
93
- self[:length].value = self.sz
85
+ Base.calculate_and_set_length self
94
86
  end
95
87
  end
96
88
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
 
8
10
  # {Inspect} module provides methods to help writing +inspect+
@@ -27,7 +29,7 @@ module PacketGen
27
29
 
28
30
  # @return [String]
29
31
  def self.shift_level(level=1)
30
- ' ' + ' ' * level
32
+ ' ' * (level + 1)
31
33
  end
32
34
 
33
35
  # @param [#to_i] value
@@ -53,6 +55,8 @@ module PacketGen
53
55
  "%-10s (0x%0#{value.sz * 2}x)" % [value.to_human, value.to_i]
54
56
  elsif value.is_a?(Types::Int) or value.is_a?(Integer)
55
57
  int_dec_hex(value, value.sz * 2)
58
+ elsif value.is_a?(String)
59
+ value.to_s.inspect
56
60
  elsif value.respond_to? :to_human
57
61
  value.to_human
58
62
  else
@@ -3,6 +3,8 @@
3
3
  # See https://github.com/sdaubert/packetgen for more informations
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
+
7
+ # frozen_string_literal: true
6
8
  require 'pcaprub'
7
9
 
8
10
  module PacketGen
@@ -377,7 +379,7 @@ module PacketGen
377
379
  if bindings.nil?
378
380
  bindings = prev_header.class.known_headers[header.class.superclass]
379
381
  if bindings.nil?
380
- msg = "#{prev_header.class} knowns no layer association with #{header.protocol_name}. "
382
+ msg = "#{prev_header.class} knowns no layer association with #{header.protocol_name}. ".dup
381
383
  msg << "Try #{prev_header.class}.bind_layer(#{header.class}, "
382
384
  msg << "#{prev_header.method_name}_proto_field: "
383
385
  msg << "value_for_#{header.method_name})"
@@ -2,6 +2,8 @@
2
2
  # See https://github.com/sdaubert/packetgen for more informations
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
5
7
  require 'stringio'
6
8
 
7
9
  module PacketGen
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module PcapNG
8
10
 
@@ -3,6 +3,8 @@
3
3
  # See https://github.com/sdaubert/packetgen for more informations
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
+
7
+ # frozen_string_literal: true
6
8
  require 'socket'
7
9
 
8
10
  module PacketGen
@@ -3,6 +3,8 @@
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
5
 
6
+ # frozen_string_literal: true
7
+
6
8
  module PacketGen
7
9
  module Types
8
10
 
@@ -40,6 +42,7 @@ module PacketGen
40
42
  def read(str)
41
43
  clear
42
44
  return self if str.nil?
45
+ return self if @counter and @counter.to_i == 0
43
46
  force_binary str
44
47
  klass = self.class.class_eval { @klass }
45
48
  while str.length > 0
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Types
9
11
 
@@ -59,7 +61,7 @@ module PacketGen
59
61
  # @return [String]
60
62
  def to_human
61
63
  idx = self.index(0.chr) || self.sz
62
- self[0, idx].inspect
64
+ self[0, idx]
63
65
  end
64
66
  end
65
67
  end