packetgen 2.6.0 → 2.7.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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +28 -0
  4. data/Rakefile +6 -6
  5. data/bin/pgconsole +6 -6
  6. data/lib/packetgen.rb +4 -3
  7. data/lib/packetgen/capture.rb +5 -7
  8. data/lib/packetgen/config.rb +3 -3
  9. data/lib/packetgen/deprecation.rb +17 -0
  10. data/lib/packetgen/header.rb +40 -38
  11. data/lib/packetgen/header/arp.rb +46 -31
  12. data/lib/packetgen/header/asn1_base.rb +8 -8
  13. data/lib/packetgen/header/base.rb +108 -36
  14. data/lib/packetgen/header/bootp.rb +28 -19
  15. data/lib/packetgen/header/crypto.rb +6 -8
  16. data/lib/packetgen/header/dhcp.rb +4 -5
  17. data/lib/packetgen/header/dhcp/option.rb +46 -34
  18. data/lib/packetgen/header/dhcp/options.rb +0 -1
  19. data/lib/packetgen/header/dhcpv6.rb +10 -10
  20. data/lib/packetgen/header/dhcpv6/duid.rb +2 -3
  21. data/lib/packetgen/header/dhcpv6/option.rb +16 -21
  22. data/lib/packetgen/header/dhcpv6/relay.rb +6 -4
  23. data/lib/packetgen/header/dns.rb +13 -11
  24. data/lib/packetgen/header/dns/name.rb +4 -6
  25. data/lib/packetgen/header/dns/opt.rb +31 -31
  26. data/lib/packetgen/header/dns/option.rb +0 -2
  27. data/lib/packetgen/header/dns/qdsection.rb +1 -2
  28. data/lib/packetgen/header/dns/question.rb +19 -13
  29. data/lib/packetgen/header/dns/rr.rb +11 -14
  30. data/lib/packetgen/header/dns/rrsection.rb +5 -7
  31. data/lib/packetgen/header/dot11.rb +45 -29
  32. data/lib/packetgen/header/dot11/control.rb +3 -5
  33. data/lib/packetgen/header/dot11/data.rb +34 -6
  34. data/lib/packetgen/header/dot11/element.rb +0 -1
  35. data/lib/packetgen/header/dot11/management.rb +9 -5
  36. data/lib/packetgen/header/dot11/sub_mngt.rb +13 -14
  37. data/lib/packetgen/header/dot1q.rb +2 -2
  38. data/lib/packetgen/header/dot1x.rb +3 -4
  39. data/lib/packetgen/header/eap.rb +62 -53
  40. data/lib/packetgen/header/eap/fast.rb +0 -1
  41. data/lib/packetgen/header/eap/md5.rb +1 -2
  42. data/lib/packetgen/header/eap/tls.rb +9 -10
  43. data/lib/packetgen/header/eap/ttls.rb +9 -10
  44. data/lib/packetgen/header/esp.rb +33 -33
  45. data/lib/packetgen/header/eth.rb +11 -8
  46. data/lib/packetgen/header/gre.rb +5 -6
  47. data/lib/packetgen/header/http/headers.rb +11 -14
  48. data/lib/packetgen/header/http/request.rb +20 -20
  49. data/lib/packetgen/header/http/response.rb +16 -18
  50. data/lib/packetgen/header/http/verbs.rb +5 -5
  51. data/lib/packetgen/header/icmp.rb +1 -3
  52. data/lib/packetgen/header/icmpv6.rb +1 -3
  53. data/lib/packetgen/header/igmp.rb +5 -6
  54. data/lib/packetgen/header/igmpv3.rb +5 -9
  55. data/lib/packetgen/header/igmpv3/group_record.rb +4 -5
  56. data/lib/packetgen/header/igmpv3/mq.rb +2 -2
  57. data/lib/packetgen/header/igmpv3/mr.rb +4 -3
  58. data/lib/packetgen/header/ike.rb +33 -8
  59. data/lib/packetgen/header/ike/auth.rb +4 -6
  60. data/lib/packetgen/header/ike/cert.rb +0 -2
  61. data/lib/packetgen/header/ike/certreq.rb +1 -3
  62. data/lib/packetgen/header/ike/id.rb +1 -3
  63. data/lib/packetgen/header/ike/ke.rb +0 -2
  64. data/lib/packetgen/header/ike/nonce.rb +0 -2
  65. data/lib/packetgen/header/ike/notify.rb +22 -24
  66. data/lib/packetgen/header/ike/payload.rb +198 -199
  67. data/lib/packetgen/header/ike/sa.rb +21 -30
  68. data/lib/packetgen/header/ike/sk.rb +16 -17
  69. data/lib/packetgen/header/ike/ts.rb +22 -24
  70. data/lib/packetgen/header/ike/vendor_id.rb +0 -2
  71. data/lib/packetgen/header/ip.rb +30 -23
  72. data/lib/packetgen/header/ip/addr.rb +5 -6
  73. data/lib/packetgen/header/ip/option.rb +11 -15
  74. data/lib/packetgen/header/ip/options.rb +1 -2
  75. data/lib/packetgen/header/ipv6.rb +27 -12
  76. data/lib/packetgen/header/ipv6/addr.rb +2 -2
  77. data/lib/packetgen/header/ipv6/extension.rb +1 -1
  78. data/lib/packetgen/header/ipv6/hop_by_hop.rb +11 -11
  79. data/lib/packetgen/header/llc.rb +4 -3
  80. data/lib/packetgen/header/mdns.rb +11 -5
  81. data/lib/packetgen/header/mld.rb +4 -4
  82. data/lib/packetgen/header/mldv2.rb +4 -3
  83. data/lib/packetgen/header/mldv2/mcast_address_record.rb +3 -4
  84. data/lib/packetgen/header/mldv2/mlq.rb +3 -4
  85. data/lib/packetgen/header/mldv2/mlr.rb +4 -3
  86. data/lib/packetgen/header/netbios.rb +18 -5
  87. data/lib/packetgen/header/ospfv2.rb +6 -7
  88. data/lib/packetgen/header/ospfv2/db_description.rb +3 -4
  89. data/lib/packetgen/header/ospfv2/hello.rb +2 -3
  90. data/lib/packetgen/header/ospfv2/ls_ack.rb +2 -3
  91. data/lib/packetgen/header/ospfv2/ls_request.rb +2 -3
  92. data/lib/packetgen/header/ospfv2/ls_update.rb +5 -6
  93. data/lib/packetgen/header/ospfv2/lsa.rb +13 -14
  94. data/lib/packetgen/header/ospfv2/lsa_header.rb +4 -5
  95. data/lib/packetgen/header/ospfv3.rb +3 -4
  96. data/lib/packetgen/header/ospfv3/db_description.rb +3 -5
  97. data/lib/packetgen/header/ospfv3/hello.rb +2 -3
  98. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +7 -8
  99. data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -3
  100. data/lib/packetgen/header/ospfv3/ls_request.rb +2 -3
  101. data/lib/packetgen/header/ospfv3/ls_update.rb +5 -6
  102. data/lib/packetgen/header/ospfv3/lsa.rb +10 -11
  103. data/lib/packetgen/header/ospfv3/lsa_header.rb +3 -4
  104. data/lib/packetgen/header/snmp.rb +45 -32
  105. data/lib/packetgen/header/tcp.rb +13 -9
  106. data/lib/packetgen/header/tcp/option.rb +16 -11
  107. data/lib/packetgen/header/tcp/options.rb +3 -4
  108. data/lib/packetgen/header/tftp.rb +15 -17
  109. data/lib/packetgen/header/udp.rb +10 -4
  110. data/lib/packetgen/inspect.rb +7 -9
  111. data/lib/packetgen/packet.rb +44 -22
  112. data/lib/packetgen/pcapng.rb +1 -5
  113. data/lib/packetgen/pcapng/block.rb +17 -11
  114. data/lib/packetgen/pcapng/epb.rb +6 -11
  115. data/lib/packetgen/pcapng/file.rb +37 -44
  116. data/lib/packetgen/pcapng/idb.rb +17 -22
  117. data/lib/packetgen/pcapng/shb.rb +7 -10
  118. data/lib/packetgen/pcapng/spb.rb +21 -17
  119. data/lib/packetgen/pcapng/unknown_block.rb +17 -13
  120. data/lib/packetgen/proto.rb +1 -2
  121. data/lib/packetgen/types/array.rb +119 -34
  122. data/lib/packetgen/types/cstring.rb +1 -5
  123. data/lib/packetgen/types/enum.rb +8 -10
  124. data/lib/packetgen/types/fields.rb +34 -28
  125. data/lib/packetgen/types/int.rb +11 -13
  126. data/lib/packetgen/types/int_string.rb +6 -8
  127. data/lib/packetgen/types/oui.rb +3 -6
  128. data/lib/packetgen/types/string.rb +4 -6
  129. data/lib/packetgen/types/tlv.rb +11 -14
  130. data/lib/packetgen/utils.rb +15 -23
  131. data/lib/packetgen/utils/arp_spoofer.rb +12 -18
  132. data/lib/packetgen/version.rb +1 -1
  133. data/packetgen.gemspec +9 -8
  134. metadata +19 -17
@@ -4,15 +4,14 @@
4
4
  # This program is published under MIT license.
5
5
 
6
6
  # frozen_string_literal: true
7
+
7
8
  require 'stringio'
8
9
 
9
10
  module PacketGen
10
-
11
11
  # Module to handle PCAP-NG file format.
12
12
  # See http://xml2rfc.tools.ietf.org/cgi-bin/xml2rfc.cgi?url=https://raw.githubusercontent.com/pcapng/pcapng/master/draft-tuexen-opsawg-pcapng.xml&modeAsFormat=html/ascii&type=ascii
13
13
  # @author Sylvain Daubert
14
14
  module PcapNG
15
-
16
15
  # Section Header Block type number
17
16
  SHB_TYPE = Types::Int32.new(0x0A0D0D0A, :little)
18
17
  # Interface Description Block type number
@@ -44,12 +43,9 @@ module PacketGen
44
43
  class Error < PacketGen::Error; end
45
44
  # Invalid PcapNG file error
46
45
  class InvalidFileError < Error; end
47
-
48
46
  end
49
-
50
47
  end
51
48
 
52
-
53
49
  require_relative 'pcapng/block.rb'
54
50
  require_relative 'pcapng/unknown_block.rb'
55
51
  require_relative 'pcapng/shb.rb'
@@ -7,11 +7,9 @@
7
7
 
8
8
  module PacketGen
9
9
  module PcapNG
10
-
11
10
  # @abstract Base class for all block types
12
11
  # @author Sylvain Daubert
13
12
  class Block < Types::Fields
14
-
15
13
  # @return [:little, :big]
16
14
  attr_accessor :endian
17
15
 
@@ -34,8 +32,16 @@ module PacketGen
34
32
 
35
33
  # Has this block option?
36
34
  # @return [Boolean]
35
+ # @since 2.7.0
36
+ def options?
37
+ @fields.key?(:options) && @fields[:options].sz > 0
38
+ end
39
+
40
+ # @deprecated Use {#options?} instead.
41
+ # @return [Boolean]
37
42
  def has_options?
38
- @fields.has_key?(:options) && @fields[:options].sz > 0
43
+ Deprecation.deprecated(self.class, __method__, 'options?')
44
+ options?
39
45
  end
40
46
 
41
47
  # Calculate block length and update :block_len and block_len2 fields
@@ -50,7 +56,7 @@ module PacketGen
50
56
  # @return [void]
51
57
  def pad_field(*fields)
52
58
  fields.each do |field|
53
- unless @fields[field].size % 4 == 0
59
+ unless (@fields[field].size % 4).zero?
54
60
  @fields[field] << "\x00" * (4 - (@fields[field].size % 4))
55
61
  end
56
62
  end
@@ -60,15 +66,15 @@ module PacketGen
60
66
 
61
67
  # Set the endianness for the various Int classes handled by self.
62
68
  # Must be called by all subclass #initialize method.
63
- # @param [:little, :big] e
64
- # @return [:little, :big] returns e
65
- def set_endianness(e)
66
- unless [:little, :big].include? e
69
+ # @param [:little, :big] endian
70
+ # @return [:little, :big] returns endian
71
+ def set_endianness(endian)
72
+ unless %i[little big].include? endian
67
73
  raise ArgumentError, "unknown endianness for #{self.class}"
68
74
  end
69
- @endian = e
70
- @fields.each { |f_, v| v.endian = e if v.is_a?(Types::Int) }
71
- e
75
+ @endian = endian
76
+ @fields.each { |_f, v| v.endian = endian if v.is_a?(Types::Int) }
77
+ endian
72
78
  end
73
79
 
74
80
  def check_len_coherency
@@ -7,7 +7,6 @@
7
7
 
8
8
  module PacketGen
9
9
  module PcapNG
10
-
11
10
  # {EPB} represents a Enhanced Packet Block (EPB) of a pcapng file.
12
11
  #
13
12
  # == EPB Definition
@@ -23,9 +22,8 @@ module PacketGen
23
22
  # Int32 :block_len2
24
23
  # @author Sylvain Daubert
25
24
  class EPB < Block
26
-
27
25
  # Minimum EPB size
28
- MIN_SIZE = 8*4
26
+ MIN_SIZE = 8 * 4
29
27
 
30
28
  # @return [:little, :big]
31
29
  attr_accessor :endian
@@ -84,11 +82,11 @@ module PacketGen
84
82
  # @param [::String,IO] str_or_io
85
83
  # @return [self]
86
84
  def read(str_or_io)
87
- if str_or_io.respond_to? :read
88
- io = str_or_io
89
- else
90
- io = StringIO.new(force_binary(str_or_io.to_s))
91
- end
85
+ io = if str_or_io.respond_to? :read
86
+ str_or_io
87
+ else
88
+ StringIO.new(force_binary(str_or_io.to_s))
89
+ end
92
90
  return self if io.eof?
93
91
 
94
92
  self[:type].read io.read(4)
@@ -124,7 +122,6 @@ module PacketGen
124
122
  super
125
123
  end
126
124
 
127
-
128
125
  private
129
126
 
130
127
  def ts_resol
@@ -134,8 +131,6 @@ module PacketGen
134
131
  @interface.ts_resol
135
132
  end
136
133
  end
137
-
138
134
  end
139
-
140
135
  end
141
136
  end
@@ -7,11 +7,9 @@
7
7
 
8
8
  module PacketGen
9
9
  module PcapNG
10
-
11
10
  # PcapNG::File is a complete Pcap-NG file handler.
12
11
  # @author Sylvain Daubert
13
12
  class File
14
-
15
13
  # Known link types
16
14
  KNOWN_LINK_TYPES = {
17
15
  LINKTYPE_ETHERNET => 'Eth',
@@ -64,20 +62,17 @@ module PacketGen
64
62
  end
65
63
 
66
64
  ::File.open(fname, 'rb') do |f|
67
- while !f.eof? do
68
- parse_section(f)
69
- end
65
+ parse_section(f) until f.eof?
70
66
  end
71
67
 
72
- if blk
73
- count = 0
74
- @sections.each do |section|
75
- section.interfaces.each do |intf|
76
- intf.packets.each { |pkt| count += 1; yield pkt }
77
- end
68
+ return unless blk
69
+ count = 0
70
+ @sections.each do |section|
71
+ section.interfaces.each do |intf|
72
+ intf.packets.each { |pkt| count += 1; yield pkt }
78
73
  end
79
- count
80
74
  end
75
+ count
81
76
  end
82
77
 
83
78
  # Give an array of raw packets (raw data from packets).
@@ -143,7 +138,7 @@ module PacketGen
143
138
  # Return the object as a String
144
139
  # @return [String]
145
140
  def to_s
146
- @sections.map { |section| section.to_s }.join
141
+ @sections.map(&:to_s).join
147
142
  end
148
143
 
149
144
  # Clear the contents of the Pcapng::File.
@@ -173,9 +168,9 @@ module PacketGen
173
168
  @sections.each do |section|
174
169
  section.interfaces.each do |itf|
175
170
  if options[:keep_timestamps] || options[:keep_ts]
176
- ary.concat itf.packets.map { |pkt| { pkt.timestamp => pkt.data.to_s } }
171
+ ary.concat(itf.packets.map { |pkt| { pkt.timestamp => pkt.data.to_s } })
177
172
  else
178
- ary.concat itf.packets.map { |pkt| pkt.data.to_s}
173
+ ary.concat(itf.packets.map { |pkt| pkt.data.to_s })
179
174
  end
180
175
  end
181
176
  end
@@ -188,29 +183,28 @@ module PacketGen
188
183
  # the packets are appended to the file, rather than overwriting it
189
184
  # @return [Array] array of 2 elements: filename and size written
190
185
  def to_file(filename, options={})
191
- mode = ''
192
- if options[:append] and ::File.exists? filename
193
- mode = 'ab'
194
- else
195
- mode = 'wb'
196
- end
197
- ::File.open(filename, mode) {|f| f.write(self.to_s)}
186
+ mode = if options[:append] && ::File.exist?(filename)
187
+ 'ab'
188
+ else
189
+ 'wb'
190
+ end
191
+ ::File.open(filename, mode) { |f| f.write(self.to_s) }
198
192
  [filename, self.to_s.size]
199
193
  end
200
- alias_method :to_f, :to_file
194
+ alias to_f to_file
201
195
 
202
196
  # Shorthand method for writing to a file.
203
197
  # @param [#to_s] filename
204
198
  # @return [Array] see return value from {#to_file}
205
199
  def write(filename='out.pcapng')
206
- self.to_file(filename.to_s, :append => false)
200
+ self.to_file(filename.to_s, append: false)
207
201
  end
208
202
 
209
203
  # Shorthand method for appending to a file.
210
204
  # @param [#to_s] filename
211
205
  # @return [Array] see return value from {#to_file}
212
206
  def append(filename='out.pcapng')
213
- self.to_file(filename.to_s, :append => true)
207
+ self.to_file(filename.to_s, append: true)
214
208
  end
215
209
 
216
210
  # @overload array_to_file(ary)
@@ -235,12 +229,12 @@ module PacketGen
235
229
  when Hash
236
230
  filename = options[:filename] || options[:file]
237
231
  ary = options[:array] || options[:arr]
238
- unless ary.kind_of? Array
232
+ unless ary.is_a? Array
239
233
  raise ArgumentError, ':array parameter needs to be an array'
240
234
  end
241
235
  ts = options[:timestamp] || options[:ts] || Time.now
242
236
  ts_inc = options[:ts_inc] || 1
243
- append = !!options[:append]
237
+ append = !options[:append].nil?
244
238
  when Array
245
239
  ary = options
246
240
  ts = Time.now
@@ -253,7 +247,7 @@ module PacketGen
253
247
 
254
248
  section = SHB.new
255
249
  @sections << section
256
- itf = IDB.new(:endian => section.endian)
250
+ itf = IDB.new(endian: section.endian)
257
251
  classify_block section, itf
258
252
 
259
253
  ary.each_with_index do |pkt, i|
@@ -270,24 +264,23 @@ module PacketGen
270
264
  this_ts = (this_ts / itf.ts_resol).to_i
271
265
  this_tsh = this_ts >> 32
272
266
  this_tsl = this_ts & 0xffffffff
273
- this_pkt = EPB.new(:endian => section.endian,
274
- :interface_id => 0,
275
- :tsh => this_tsh,
276
- :tsl => this_tsl,
277
- :cap_len => this_cap_len,
278
- :orig_len => this_cap_len,
279
- :data => this_data)
267
+ this_pkt = EPB.new(endian: section.endian,
268
+ interface_id: 0,
269
+ tsh: this_tsh,
270
+ tsl: this_tsl,
271
+ cap_len: this_cap_len,
272
+ orig_len: this_cap_len,
273
+ data: this_data)
280
274
  classify_block section, this_pkt
281
275
  end
282
276
 
283
277
  if filename
284
- self.to_f(filename, :append => append)
278
+ self.to_f(filename, append: append)
285
279
  else
286
280
  self
287
281
  end
288
282
  end
289
283
 
290
-
291
284
  private
292
285
 
293
286
  # Parse a section. A section is made of at least a SHB. It than may contain
@@ -304,19 +297,19 @@ module PacketGen
304
297
  if shb.section_len.to_i != 0xffffffffffffffff
305
298
  # Section length is defined
306
299
  section = StringIO.new(io.read(shb.section_len.to_i))
307
- while !section.eof? do
300
+ until section.eof?
308
301
  shb = @sections.last
309
302
  type = Types::Int32.new(0, shb.endian).read(section.read(4))
310
303
  section.seek(-4, IO::SEEK_CUR)
311
- block = parse(type, section, shb)
304
+ parse(type, section, shb)
312
305
  end
313
306
  else
314
307
  # section length is undefined
315
- while !io.eof?
308
+ until io.eof?
316
309
  shb = @sections.last
317
310
  type = Types::Int32.new(0, shb.endian).read(io.read(4))
318
311
  io.seek(-4, IO::SEEK_CUR)
319
- block = parse(type, io, shb)
312
+ parse(type, io, shb)
320
313
  end
321
314
  end
322
315
  end
@@ -327,11 +320,11 @@ module PacketGen
327
320
  # @param [SHB] shb header of current section
328
321
  # @return [void]
329
322
  def parse(type, io, shb)
330
- types = PcapNG.constants(false).select { |c| c.to_s =~ /_TYPE/ }.
331
- map { |c| [PcapNG.const_get(c).to_i, c] }
323
+ types = PcapNG.constants(false).select { |c| c.to_s =~ /_TYPE/ }
324
+ .map { |c| [PcapNG.const_get(c).to_i, c] }
332
325
  types = Hash[types]
333
326
 
334
- if types.has_key?(type.to_i)
327
+ if types.key?(type.to_i)
335
328
  klass = PcapNG.const_get(types[type.to_i].to_s.gsub(/_TYPE/, '').to_sym)
336
329
  block = klass.new(endian: shb.endian)
337
330
  else
@@ -7,7 +7,6 @@
7
7
 
8
8
  module PacketGen
9
9
  module PcapNG
10
-
11
10
  # {IDB} represents a Interface Description Block (IDB) of a pcapng file.
12
11
  #
13
12
  # == IDB Definition
@@ -20,9 +19,8 @@ module PacketGen
20
19
  # Int32 :block_len2
21
20
  # @author Sylvain Daubert
22
21
  class IDB < Block
23
-
24
22
  # Minimum IDB size
25
- MIN_SIZE = 5*4
23
+ MIN_SIZE = 5 * 4
26
24
 
27
25
  # Option code for if_tsresol option
28
26
  OPTION_IF_TSRESOL = 9
@@ -73,11 +71,11 @@ module PacketGen
73
71
  # @param [::String,IO] str_or_io
74
72
  # @return [self]
75
73
  def read(str_or_io)
76
- if str_or_io.respond_to? :read
77
- io = str_or_io
78
- else
79
- io = StringIO.new(force_binary(str_or_io.to_s))
80
- end
74
+ io = if str_or_io.respond_to? :read
75
+ str_or_io
76
+ else
77
+ StringIO.new(force_binary(str_or_io.to_s))
78
+ end
81
79
  return self if io.eof?
82
80
 
83
81
  self[:type].read io.read(4)
@@ -104,23 +102,22 @@ module PacketGen
104
102
  # @param [Boolean] force if +true+, force decoding even if already done
105
103
  # @return [Float]
106
104
  def ts_resol(force: false)
107
- if @options_decoded and not force
105
+ if @options_decoded && !force
108
106
  @ts_resol
109
107
  else
110
- packstr = (@endian == :little) ? 'v' : 'n'
108
+ packstr = @endian == :little ? 'v' : 'n'
111
109
  idx = 0
112
110
  options = self[:options]
113
- opt_code = opt_len = 0
114
111
 
115
- while idx < options.length do
112
+ while idx < options.length
116
113
  opt_code, opt_len = options[idx, 4].unpack("#{packstr}2")
117
- if opt_code == OPTION_IF_TSRESOL and opt_len == 1
118
- tsresol = options[idx+4, 1].unpack('C').first
119
- if tsresol & 0x80 == 0
120
- @ts_resol = 10 ** -tsresol
121
- else
122
- @ts_resol = 2 ** -(tsresol & 0x7f)
123
- end
114
+ if opt_code == OPTION_IF_TSRESOL && opt_len == 1
115
+ tsresol = options[idx + 4, 1].unpack('C').first
116
+ @ts_resol = if (tsresol & 0x80).zero?
117
+ 10**-tsresol
118
+ else
119
+ 2**-(tsresol & 0x7f)
120
+ end
124
121
 
125
122
  @options_decoded = true
126
123
  return @ts_resol
@@ -130,7 +127,7 @@ module PacketGen
130
127
  end
131
128
 
132
129
  @options_decoded = true
133
- @ts_resol = 1E-6 # default value
130
+ @ts_resol = 1E-6 # default value
134
131
  end
135
132
  end
136
133
 
@@ -141,8 +138,6 @@ module PacketGen
141
138
  recalc_block_len
142
139
  super << @packets.map(&:to_s).join
143
140
  end
144
-
145
141
  end
146
-
147
142
  end
148
143
  end
@@ -7,7 +7,6 @@
7
7
 
8
8
  module PacketGen
9
9
  module PcapNG
10
-
11
10
  # {SHB} represents a Section Header Block (SHB) of a pcapng file.
12
11
  #
13
12
  # == SHB Definition
@@ -21,7 +20,6 @@ module PacketGen
21
20
  # Int32 :block_len2
22
21
  # @author Sylvain Daubert
23
22
  class SHB < Block
24
-
25
23
  # @return [:little, :big]
26
24
  attr_accessor :endian
27
25
  # Get interfaces for this section
@@ -39,7 +37,7 @@ module PacketGen
39
37
  MAGIC_BIG = [MAGIC_INT32].pack('N')
40
38
 
41
39
  # Minimum SHB size
42
- MIN_SIZE = 7*4
40
+ MIN_SIZE = 7 * 4
43
41
  # +section_len+ value for undefined length
44
42
  SECTION_LEN_UNDEFINED = 0xffffffff_ffffffff
45
43
 
@@ -91,11 +89,11 @@ module PacketGen
91
89
  # @param [::String,IO] str_or_io
92
90
  # @return [self]
93
91
  def read(str_or_io)
94
- if str_or_io.respond_to? :read
95
- io = str_or_io
96
- else
97
- io = StringIO.new(force_binary(str_or_io.to_s))
98
- end
92
+ io = if str_or_io.respond_to? :read
93
+ str_or_io
94
+ else
95
+ StringIO.new(force_binary(str_or_io.to_s))
96
+ end
99
97
  return self if io.eof?
100
98
 
101
99
  type_str = io.read(4)
@@ -159,12 +157,11 @@ module PacketGen
159
157
  super + body
160
158
  end
161
159
 
162
-
163
160
  private
164
161
 
165
162
  def force_endianness(endian)
166
163
  @endian = endian
167
- self[:type] = Types::Int32.new(self[:type].to_i, endian)
164
+ self[:type] = Types::Int32.new(self[:type].to_i, endian)
168
165
  self[:block_len] = Types::Int32.new(self[:block_len].to_i, endian)
169
166
  self[:magic] = Types::Int32.new(self[:magic].to_i, endian)
170
167
  self[:ver_major] = Types::Int16.new(self[:ver_major].to_i, endian)