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
@@ -8,12 +8,10 @@
8
8
 
9
9
  module PacketGen
10
10
  module Types
11
-
12
11
  # Base integer class to handle binary integers
13
12
  # @abstract
14
13
  # @author Sylvain Daubert
15
14
  class Int
16
-
17
15
  # Integer value
18
16
  # @return [Integer]
19
17
  attr_accessor :value
@@ -135,17 +133,17 @@ module PacketGen
135
133
  # @return [self]
136
134
  def read(value)
137
135
  return self if value.nil?
138
- @value = if value.is_a?(Integer)
139
- value.to_i
140
- else
141
- up8 = down16 = 0
142
- if @endian == :big
143
- up8, down16 = value.to_s.unpack('Cn')
144
- else
145
- down16, up8 = value.to_s.unpack('vC')
146
- end
147
- (up8 << 16) | down16
148
- end
136
+ @value = if value.is_a?(Integer)
137
+ value.to_i
138
+ else
139
+ up8 = down16 = 0
140
+ if @endian == :big
141
+ up8, down16 = value.to_s.unpack('Cn')
142
+ else
143
+ down16, up8 = value.to_s.unpack('vC')
144
+ end
145
+ (up8 << 16) | down16
146
+ end
149
147
  self
150
148
  end
151
149
 
@@ -8,12 +8,10 @@
8
8
 
9
9
  module PacketGen
10
10
  module Types
11
-
12
11
  # Provides a class for creating strings preceeded by their length as a {Int}.
13
12
  # By default, a null string will have one byte length (length byte set to 0).
14
13
  # @author Sylvain Daubert
15
14
  class IntString
16
-
17
15
  # internal string
18
16
  # @return [String]
19
17
  attr_reader :string
@@ -40,9 +38,9 @@ module PacketGen
40
38
 
41
39
  # @param [Integer] l
42
40
  # @return [Integer]
43
- def length=(l)
44
- @length.read l
45
- l
41
+ def length=(len)
42
+ @length.read len
43
+ len
46
44
  end
47
45
 
48
46
  # @return [Integer]
@@ -52,9 +50,9 @@ module PacketGen
52
50
 
53
51
  # @param [#to_s] s
54
52
  # @return [String]
55
- def string=(s)
56
- @length.value = s.to_s.size
57
- @string = s.to_s
53
+ def string=(str)
54
+ @length.value = str.to_s.size
55
+ @string = str.to_s
58
56
  end
59
57
 
60
58
  # Get binary string
@@ -8,12 +8,11 @@
8
8
 
9
9
  module PacketGen
10
10
  module Types
11
-
12
11
  # OUI type, defined as a set of 3 bytes
13
12
  # oui = OUI.new
14
13
  # oui.from_human('00:01:02')
15
14
  # oui.to_human # => "00:01:02"
16
- #@author Sylvain Daubert
15
+ # @author Sylvain Daubert
17
16
  class OUI < Types::Fields
18
17
  # @attribute b2
19
18
  # @return [Integer] left-most byte
@@ -31,9 +30,7 @@ module PacketGen
31
30
  def from_human(str)
32
31
  return self if str.nil?
33
32
  bytes = str.split(/:/)
34
- unless bytes.size == 3
35
- raise ArgumentError, 'not a OUI'
36
- end
33
+ raise ArgumentError, 'not a OUI' unless bytes.size == 3
37
34
  self[:b2].read(bytes[0].to_i(16))
38
35
  self[:b1].read(bytes[1].to_i(16))
39
36
  self[:b0].read(bytes[2].to_i(16))
@@ -43,7 +40,7 @@ module PacketGen
43
40
  # Get OUI in human readable form (colon-separated bytes)
44
41
  # @return [String]
45
42
  def to_human
46
- fields.map { |m| "#{'%02x' % self[m]}" }.join(':')
43
+ fields.map { |m| '%02x' % self[m] }.join(':')
47
44
  end
48
45
  end
49
46
  end
@@ -8,12 +8,10 @@
8
8
 
9
9
  module PacketGen
10
10
  module Types
11
-
12
11
  # This class is just like regular String. It only adds {#read} and {#sz} methods
13
12
  # to be compatible with others {Types}.
14
13
  # @author Sylvain Daubert
15
14
  class String < ::String
16
-
17
15
  # @param [Hash] options
18
16
  # @option options [Types::Int,Proc] :length_from object or proc from which
19
17
  # takes length when reading
@@ -30,14 +28,14 @@ module PacketGen
30
28
  s = str.to_s
31
29
  str_end = case @length_from
32
30
  when Types::Int
33
- str_end = @length_from.to_i
31
+ @length_from.to_i
34
32
  when Proc
35
- str_end = @length_from.call
33
+ @length_from.call
36
34
  else
37
35
  if @static_length.is_a? Integer
38
- str_end = @static_length
36
+ @static_length
39
37
  else
40
- str_end = s.size
38
+ s.size
41
39
  end
42
40
  end
43
41
  str_end = 0 if str_end < 0
@@ -8,7 +8,6 @@
8
8
 
9
9
  module PacketGen
10
10
  module Types
11
-
12
11
  # Class to handle Type-Length-Value attributes
13
12
  #
14
13
  # TLV fields handles three subfields:
@@ -64,7 +63,7 @@ module PacketGen
64
63
  # @param [String] str
65
64
  # @return [Fields] self
66
65
  def read(str)
67
- idx = 0
66
+ idx = 0
68
67
  self[:type].read str[idx, self[:type].sz]
69
68
  idx += self[:type].sz
70
69
  self[:length].read str[idx, self[:length].sz]
@@ -86,11 +85,9 @@ module PacketGen
86
85
  when Integer
87
86
  self.old_type = val
88
87
  else
89
- unless has_human_types?
90
- raise TypeError, 'need an Integer'
91
- end
88
+ raise TypeError, 'need an Integer' unless human_types?
92
89
  new_val = self.class::TYPES.key(val.to_s)
93
- raise ArgumentError, "unknown #{val.to_s} type" if new_val.nil?
90
+ raise ArgumentError, "unknown #{val} type" if new_val.nil?
94
91
  self.old_type = new_val
95
92
  end
96
93
  end
@@ -125,7 +122,7 @@ module PacketGen
125
122
  # Return human readable type, if TYPES is defined
126
123
  # @return [String]
127
124
  def human_type
128
- if has_human_types?
125
+ if human_types?
129
126
  htype = self.class::TYPES[type]
130
127
  htype = type if htype.nil?
131
128
  htype.to_s
@@ -137,20 +134,20 @@ module PacketGen
137
134
  # @return [String]
138
135
  def to_human
139
136
  name = self.class.to_s.gsub(/.*::/, '')
140
- @typestr ||= if has_human_types?
137
+ @typestr ||= if human_types?
141
138
  types = self.class::TYPES.values
142
- "%-#{types.max { |a,b| a.length <=> b.length }.size}s"
139
+ "%-#{types.max_by(&:length).size}s"
143
140
  else
144
- "%s"
141
+ '%s'
145
142
  end
146
- @lenstr ||= "%-#{(2**(self[:length].width*8) - 1).to_s.size}u"
147
- "#{name} type:#@typestr length:#@lenstr value:#{value.inspect}" % [human_type,
148
- length]
143
+ @lenstr ||= "%-#{(2**(self[:length].width * 8) - 1).to_s.size}u"
144
+ "#{name} type:#{@typestr} length:#{@lenstr} value:#{value.inspect}" % [human_type,
145
+ length]
149
146
  end
150
147
 
151
148
  private
152
149
 
153
- def has_human_types?
150
+ def human_types?
154
151
  self.class.const_defined? :TYPES
155
152
  end
156
153
  end
@@ -4,11 +4,11 @@
4
4
  # This program is published under MIT license.
5
5
 
6
6
  # frozen_string_literal: true
7
+
7
8
  require_relative 'config'
8
9
  require_relative 'utils/arp_spoofer'
9
10
 
10
11
  module PacketGen
11
-
12
12
  # Collection of some network utilities.
13
13
  #
14
14
  # This module is not enabled by default. You need to:
@@ -16,29 +16,26 @@ module PacketGen
16
16
  # @author Sylvain Daubert
17
17
  # @since 2.1.3
18
18
  module Utils
19
-
20
19
  # Get local ARP cache
21
20
  # @return [Hash] key: IP address, value: array containing MAC address and
22
21
  # interface name
23
22
  def self.arp_cache
24
- raw_cache = %x(/usr/sbin/arp -an)
23
+ raw_cache = `/usr/sbin/arp -an`
25
24
 
26
25
  cache = {}
27
26
  raw_cache.split(/\n/).each do |line|
28
27
  match = line.match(/\((\d+\.\d+\.\d+\.\d+)\) at (([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})(?: \[ether\])? on (\w+)/)
29
- if match
30
- cache[match[1]] = [match[2], match[4]]
31
- end
28
+ cache[match[1]] = [match[2], match[4]] if match
32
29
  end
33
-
30
+
34
31
  cache
35
32
  end
36
-
33
+
37
34
  # Get MAC address from an IP address, or nil if this IP address is unknown
38
35
  # on local network.
39
36
  # @param [String] ipaddr dotted-octet IP address
40
37
  # @param [Hash] options
41
- # @option options [String] :iface interface name. Default to
38
+ # @option options [String] :iface interface name. Default to
42
39
  # {PacketGen.default_iface}
43
40
  # @option options [Boolean] :no_cache if +true+, do not query local ARP
44
41
  # cache and always send an ARP request on wire. Default to +false+
@@ -48,7 +45,7 @@ module PacketGen
48
45
  def self.arp(ipaddr, options={})
49
46
  unless options[:no_cache]
50
47
  local_cache = self.arp_cache
51
- return local_cache[ipaddr].first if local_cache.has_key? ipaddr
48
+ return local_cache[ipaddr].first if local_cache.key? ipaddr
52
49
  end
53
50
 
54
51
  iface = options[:iface] || PacketGen.default_iface
@@ -56,8 +53,8 @@ module PacketGen
56
53
  my_hwaddr = Config.instance.hwaddr(iface)
57
54
  arp_pkt = Packet.gen('Eth', dst: 'ff:ff:ff:ff:ff:ff', src: my_hwaddr)
58
55
  arp_pkt.add('ARP', sha: Config.instance.hwaddr, spa: Config.instance.ipaddr,
59
- tpa: ipaddr)
60
-
56
+ tpa: ipaddr)
57
+
61
58
  capture = Capture.new(iface: iface, timeout: timeout, max: 1,
62
59
  filter: "arp src #{ipaddr} and ether dst #{my_hwaddr}")
63
60
  cap_thread = Thread.new do
@@ -66,18 +63,13 @@ module PacketGen
66
63
 
67
64
  arp_pkt.to_w(iface)
68
65
  cap_thread.join
69
-
70
- if capture.packets.size > 0
71
- capture.packets.each do |pkt|
72
- if pkt.arp.spa.to_s == ipaddr
73
- break pkt.arp.sha.to_s
74
- end
75
- end
76
- else
77
- nil
66
+
67
+ return if capture.packets.empty?
68
+ capture.packets.each do |pkt|
69
+ break pkt.arp.sha.to_s if pkt.arp.spa.to_s == ipaddr
78
70
  end
79
71
  end
80
-
72
+
81
73
  # Do ARP spoofing on given IP address. Call to this method blocks.
82
74
  # @note This method is provided for test purpose.
83
75
  # For more control, see {ARPSpoofer} class.
@@ -133,7 +125,7 @@ module PacketGen
133
125
  spoofer = Utils::ARPSpoofer.new(options)
134
126
  spoofer.add target1, target2, options
135
127
  spoofer.add target2, target1, options
136
-
128
+
137
129
  my_mac = Config.instance.hwaddr(options[:iface])
138
130
  my_ip = Config.instance.ipaddr(options[:iface])
139
131
  capture = Capture.new(iface: options[:iface],
@@ -4,11 +4,11 @@
4
4
  # This program is published under MIT license.
5
5
 
6
6
  # frozen_string_literal: true
7
+
7
8
  require 'thread'
8
9
 
9
10
  module PacketGen
10
11
  module Utils
11
-
12
12
  # @note This class is provided for test purpose.
13
13
  # Utility class to make ARP spoofing.
14
14
  # spoofer = PacketGen::Utils::ARPSpoofer.new
@@ -23,7 +23,6 @@ module PacketGen
23
23
  # @author Sylvain Daubert
24
24
  # @since 2.1.3
25
25
  class ARPSpoofer
26
-
27
26
  # @param [Integer,Float,nil] timeout spoof will happen for this amount
28
27
  # of time
29
28
  # @param [Integer,Float] interval time between 2 ARP packets
@@ -51,7 +50,7 @@ module PacketGen
51
50
  # an ARP request is made to get it.
52
51
  # @return [void]
53
52
  def add(target_ip, spoofed_ip, options={})
54
- @targets[target_ip] = options.merge({spoofed_ip: spoofed_ip, active: false})
53
+ @targets[target_ip] = options.merge(spoofed_ip: spoofed_ip, active: false)
55
54
  end
56
55
 
57
56
  # Remove target from spoofer.
@@ -104,7 +103,7 @@ module PacketGen
104
103
  activate target_ip
105
104
  end
106
105
  end
107
-
106
+
108
107
  # Stop spoofing on all targets.
109
108
  # @return [void]
110
109
  def stop_all
@@ -117,11 +116,8 @@ module PacketGen
117
116
  # @param [String] target_ip target IP address
118
117
  # @return [Boolean,nil]
119
118
  def active?(target_ip)
120
- if @targets.has_key?(target_ip)
121
- @targets[target_ip][:active]
122
- else
123
- nil
124
- end
119
+ return unless @targets.key?(target_ip)
120
+ @targets[target_ip][:active]
125
121
  end
126
122
 
127
123
  # Wait for spoofing to finish. Wait forever if no +timeout+ options
@@ -138,16 +134,14 @@ module PacketGen
138
134
  def activate(target_ip)
139
135
  @arp_packets[target_ip] = make_arp_packet(target_ip)
140
136
  @queue << @arp_packets.values
141
- unless @spoof_thread
142
- create_spoof_thread
143
- end
137
+ create_spoof_thread unless @spoof_thread
144
138
  @targets[target_ip][:active] = true
145
139
  end
146
-
140
+
147
141
  # Create spoof thread
148
142
  def create_spoof_thread
149
- @spoof_thread = Thread.new(@queue, @iface, @timeout, @interval) do |queue, iface, timeout, interval|
150
- while timeout.nil? or timeout > 0.0 do
143
+ @spoof_thread = Thread.new(@queue, @timeout, @interval) do |queue, timeout, interval|
144
+ while timeout.nil? || timeout > 0.0
151
145
  packets = queue.pop unless queue.empty?
152
146
  send_packets_on_wire(packets) unless packets.empty?
153
147
  timeout -= interval if timeout
@@ -184,9 +178,9 @@ module PacketGen
184
178
 
185
179
  target_mac = params[:target_mac] || Utils.arp(target_ip)
186
180
 
187
- Packet.gen('Eth', dst: target_mac, src: mac).
188
- add('ARP', op: 'reply', sha: mac, spa: params[:spoofed_ip],
189
- tha: target_mac, tpa: target_ip)
181
+ Packet.gen('Eth', dst: target_mac, src: mac)
182
+ .add('ARP', op: 'reply', sha: mac, spa: params[:spoofed_ip],
183
+ tha: target_mac, tpa: target_ip)
190
184
  end
191
185
  end
192
186
  end
@@ -10,5 +10,5 @@
10
10
  # @author Sylvain Daubert
11
11
  module PacketGen
12
12
  # PacketGen version
13
- VERSION = '2.6.0'
13
+ VERSION = '2.7.0'
14
14
  end
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'packetgen/version'
5
6
 
@@ -10,8 +11,8 @@ Gem::Specification.new do |spec|
10
11
  spec.authors = ['Sylvain Daubert']
11
12
  spec.email = ['sylvain.daubert@laposte.net']
12
13
 
13
- spec.summary = %q{Network packet generator and analyzor}
14
- #spec.description = %q{TODO: Write a longer description or delete this line.}
14
+ spec.summary = 'Network packet generator and dissector'
15
+ # spec.description = %q{TODO: Write a longer description or delete this line.}
15
16
  spec.homepage = 'https://github.com/sdaubert/packetgen'
16
17
 
17
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -23,13 +24,13 @@ Gem::Specification.new do |spec|
23
24
 
24
25
  spec.required_ruby_version = '>= 2.2.0'
25
26
 
26
- spec.add_dependency 'pcaprub', '~>0.12.4'
27
27
  spec.add_dependency 'interfacez', '~>1.0'
28
+ spec.add_dependency 'pcaprub', '~>0.12.4'
28
29
  spec.add_dependency 'rasn1', '~>0.5', '>= 0.6.3'
29
30
 
30
- spec.add_development_dependency 'bundler', '~> 1.7'
31
- spec.add_development_dependency 'rake', '~> 12.0'
32
- spec.add_development_dependency 'rspec', '~> 3.0'
33
- spec.add_development_dependency 'simplecov', '~> 0.12'
31
+ spec.add_development_dependency 'bundler', '~> 1.16'
32
+ spec.add_development_dependency 'rake', '~> 12.3'
33
+ spec.add_development_dependency 'rspec', '~> 3.7'
34
+ spec.add_development_dependency 'simplecov', '~> 0.16'
34
35
  spec.add_development_dependency 'yard', '~> 0.9'
35
36
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packetgen
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Daubert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-04 00:00:00.000000000 Z
11
+ date: 2018-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pcaprub
14
+ name: interfacez
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.12.4
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.12.4
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: interfacez
28
+ name: pcaprub
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: 0.12.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
40
+ version: 0.12.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rasn1
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -64,56 +64,56 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.7'
67
+ version: '1.16'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '1.7'
74
+ version: '1.16'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rake
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '12.0'
81
+ version: '12.3'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '12.0'
88
+ version: '12.3'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '3.0'
95
+ version: '3.7'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '3.0'
102
+ version: '3.7'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: simplecov
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.12'
109
+ version: '0.16'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '0.12'
116
+ version: '0.16'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: yard
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -137,6 +137,7 @@ extensions: []
137
137
  extra_rdoc_files: []
138
138
  files:
139
139
  - ".gitignore"
140
+ - ".rubocop.yml"
140
141
  - ".travis.yml"
141
142
  - Gemfile
142
143
  - LICENSE
@@ -146,6 +147,7 @@ files:
146
147
  - lib/packetgen.rb
147
148
  - lib/packetgen/capture.rb
148
149
  - lib/packetgen/config.rb
150
+ - lib/packetgen/deprecation.rb
149
151
  - lib/packetgen/header.rb
150
152
  - lib/packetgen/header/arp.rb
151
153
  - lib/packetgen/header/asn1_base.rb
@@ -296,5 +298,5 @@ rubyforge_project:
296
298
  rubygems_version: 2.7.6
297
299
  signing_key:
298
300
  specification_version: 4
299
- summary: Network packet generator and analyzor
301
+ summary: Network packet generator and dissector
300
302
  test_files: []