packetgen 3.3.3 → 4.1.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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -22
  3. data/lib/packetgen/capture.rb +2 -2
  4. data/lib/packetgen/config.rb +0 -1
  5. data/lib/packetgen/deprecation.rb +14 -8
  6. data/lib/packetgen/header/arp.rb +17 -18
  7. data/lib/packetgen/header/asn1_base.rb +2 -1
  8. data/lib/packetgen/header/base.rb +42 -40
  9. data/lib/packetgen/header/bootp.rb +35 -37
  10. data/lib/packetgen/header/dhcp/option.rb +21 -21
  11. data/lib/packetgen/header/dhcp/options.rb +3 -3
  12. data/lib/packetgen/header/dhcp.rb +8 -9
  13. data/lib/packetgen/header/dhcpv6/duid.rb +16 -16
  14. data/lib/packetgen/header/dhcpv6/option.rb +83 -61
  15. data/lib/packetgen/header/dhcpv6/options.rb +4 -4
  16. data/lib/packetgen/header/dhcpv6/relay.rb +6 -5
  17. data/lib/packetgen/header/dhcpv6.rb +17 -18
  18. data/lib/packetgen/header/dns/name.rb +21 -16
  19. data/lib/packetgen/header/dns/opt.rb +5 -2
  20. data/lib/packetgen/header/dns/option.rb +14 -14
  21. data/lib/packetgen/header/dns/qdsection.rb +3 -3
  22. data/lib/packetgen/header/dns/question.rb +7 -8
  23. data/lib/packetgen/header/dns/rr.rb +56 -43
  24. data/lib/packetgen/header/dns/rrsection.rb +6 -6
  25. data/lib/packetgen/header/dns.rb +103 -90
  26. data/lib/packetgen/header/dot11/control.rb +12 -12
  27. data/lib/packetgen/header/dot11/data.rb +25 -24
  28. data/lib/packetgen/header/dot11/element.rb +4 -4
  29. data/lib/packetgen/header/dot11/management.rb +21 -18
  30. data/lib/packetgen/header/dot11/sub_mngt.rb +40 -53
  31. data/lib/packetgen/header/dot11.rb +117 -122
  32. data/lib/packetgen/header/dot1q.rb +12 -13
  33. data/lib/packetgen/header/dot1x.rb +13 -13
  34. data/lib/packetgen/header/eap/fast.rb +4 -4
  35. data/lib/packetgen/header/eap/md5.rb +16 -8
  36. data/lib/packetgen/header/eap/tls.rb +18 -19
  37. data/lib/packetgen/header/eap/ttls.rb +22 -21
  38. data/lib/packetgen/header/eap.rb +73 -48
  39. data/lib/packetgen/header/eth.rb +41 -27
  40. data/lib/packetgen/header/gre.rb +33 -11
  41. data/lib/packetgen/header/http/headers.rb +7 -6
  42. data/lib/packetgen/header/http/request.rb +38 -29
  43. data/lib/packetgen/header/http/response.rb +35 -27
  44. data/lib/packetgen/header/http/verbs.rb +1 -3
  45. data/lib/packetgen/header/icmp.rb +14 -14
  46. data/lib/packetgen/header/icmpv6.rb +10 -9
  47. data/lib/packetgen/header/igmp.rb +26 -15
  48. data/lib/packetgen/header/igmpv3/group_record.rb +18 -13
  49. data/lib/packetgen/header/igmpv3/mq.rb +16 -18
  50. data/lib/packetgen/header/igmpv3/mr.rb +5 -5
  51. data/lib/packetgen/header/igmpv3.rb +12 -11
  52. data/lib/packetgen/header/ip/addr.rb +19 -15
  53. data/lib/packetgen/header/ip/option.rb +47 -36
  54. data/lib/packetgen/header/ip/options.rb +1 -1
  55. data/lib/packetgen/header/ip.rb +77 -95
  56. data/lib/packetgen/header/ipv6/addr.rb +28 -27
  57. data/lib/packetgen/header/ipv6/extension.rb +13 -11
  58. data/lib/packetgen/header/ipv6/hop_by_hop.rb +32 -13
  59. data/lib/packetgen/header/ipv6.rb +42 -35
  60. data/lib/packetgen/header/llc.rb +28 -21
  61. data/lib/packetgen/header/mdns.rb +10 -3
  62. data/lib/packetgen/header/mld.rb +15 -13
  63. data/lib/packetgen/header/mldv2/mcast_address_record.rb +17 -12
  64. data/lib/packetgen/header/mldv2/mlq.rb +22 -24
  65. data/lib/packetgen/header/mldv2/mlr.rb +8 -8
  66. data/lib/packetgen/header/mldv2.rb +1 -1
  67. data/lib/packetgen/header/ospfv2/db_description.rb +17 -18
  68. data/lib/packetgen/header/ospfv2/hello.rb +18 -17
  69. data/lib/packetgen/header/ospfv2/ls_ack.rb +6 -7
  70. data/lib/packetgen/header/ospfv2/ls_request.rb +14 -13
  71. data/lib/packetgen/header/ospfv2/ls_update.rb +9 -9
  72. data/lib/packetgen/header/ospfv2/lsa.rb +79 -60
  73. data/lib/packetgen/header/ospfv2/lsa_header.rb +12 -11
  74. data/lib/packetgen/header/ospfv2.rb +49 -46
  75. data/lib/packetgen/header/ospfv3/db_description.rb +20 -22
  76. data/lib/packetgen/header/ospfv3/hello.rb +17 -16
  77. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +22 -20
  78. data/lib/packetgen/header/ospfv3/ls_ack.rb +7 -8
  79. data/lib/packetgen/header/ospfv3/ls_request.rb +18 -18
  80. data/lib/packetgen/header/ospfv3/ls_update.rb +10 -10
  81. data/lib/packetgen/header/ospfv3/lsa.rb +62 -51
  82. data/lib/packetgen/header/ospfv3/lsa_header.rb +12 -11
  83. data/lib/packetgen/header/ospfv3.rb +54 -52
  84. data/lib/packetgen/header/sctp/chunk.rb +80 -56
  85. data/lib/packetgen/header/sctp/error.rb +174 -202
  86. data/lib/packetgen/header/sctp/padded32.rb +3 -3
  87. data/lib/packetgen/header/sctp/parameter.rb +89 -136
  88. data/lib/packetgen/header/sctp.rb +19 -8
  89. data/lib/packetgen/header/snmp.rb +108 -7
  90. data/lib/packetgen/header/tcp/option.rb +52 -39
  91. data/lib/packetgen/header/tcp/options.rb +13 -5
  92. data/lib/packetgen/header/tcp.rb +83 -65
  93. data/lib/packetgen/header/tftp.rb +31 -25
  94. data/lib/packetgen/header/udp.rb +21 -19
  95. data/lib/packetgen/header.rb +23 -18
  96. data/lib/packetgen/headerable.rb +21 -5
  97. data/lib/packetgen/inspect.rb +3 -8
  98. data/lib/packetgen/packet.rb +146 -71
  99. data/lib/packetgen/pcap.rb +15 -4
  100. data/lib/packetgen/pcapng/block.rb +20 -18
  101. data/lib/packetgen/pcapng/epb.rb +13 -15
  102. data/lib/packetgen/pcapng/file.rb +44 -111
  103. data/lib/packetgen/pcapng/idb.rb +11 -12
  104. data/lib/packetgen/pcapng/shb.rb +15 -16
  105. data/lib/packetgen/pcapng/spb.rb +9 -11
  106. data/lib/packetgen/pcapng/unknown_block.rb +6 -17
  107. data/lib/packetgen/pcapng.rb +6 -4
  108. data/lib/packetgen/pcaprub_wrapper.rb +17 -1
  109. data/lib/packetgen/proto.rb +5 -1
  110. data/lib/packetgen/unknown_packet.rb +5 -5
  111. data/lib/packetgen/utils/arp_spoofer.rb +18 -19
  112. data/lib/packetgen/utils.rb +4 -3
  113. data/lib/packetgen/version.rb +1 -1
  114. data/lib/packetgen.rb +12 -5
  115. metadata +29 -38
  116. data/lib/packetgen/types/abstract_tlv.rb +0 -278
  117. data/lib/packetgen/types/array.rb +0 -287
  118. data/lib/packetgen/types/cstring.rb +0 -109
  119. data/lib/packetgen/types/enum.rb +0 -171
  120. data/lib/packetgen/types/fieldable.rb +0 -66
  121. data/lib/packetgen/types/fields.rb +0 -622
  122. data/lib/packetgen/types/int.rb +0 -473
  123. data/lib/packetgen/types/int_string.rb +0 -102
  124. data/lib/packetgen/types/length_from.rb +0 -54
  125. data/lib/packetgen/types/oui.rb +0 -52
  126. data/lib/packetgen/types/string.rb +0 -97
  127. data/lib/packetgen/types/tlv.rb +0 -161
  128. data/lib/packetgen/types.rb +0 -26
@@ -20,7 +20,7 @@ module PacketGen
20
20
 
21
21
  def initialize
22
22
  @headers = [].freeze
23
- @binary_str = PacketGen.force_binary('')
23
+ @binary_str = ::String.new # Return empty string with encoding ASCII-8BIT, so BINARY
24
24
  end
25
25
 
26
26
  # Unknown packet, so unknown protocol.
@@ -30,7 +30,7 @@ module PacketGen
30
30
  end
31
31
 
32
32
  # Get packet body
33
- # @return [Types]
33
+ # @return [String]
34
34
  def body
35
35
  @binary_str
36
36
  end
@@ -40,7 +40,7 @@ module PacketGen
40
40
  # @param [String] str
41
41
  # @return [void]
42
42
  def body=(str)
43
- @binary_str = PacketGen.force_binary(str)
43
+ @binary_str = str.b
44
44
  end
45
45
 
46
46
  # Write packet to a PCapNG file on disk.
@@ -56,7 +56,7 @@ module PacketGen
56
56
  # @param [String] binary_str
57
57
  # @return [self]
58
58
  def parse(binary_str, _first_header: nil)
59
- @binary_str = PacketGen.force_binary(binary_str)
59
+ @binary_str = binary_str.b
60
60
  self
61
61
  end
62
62
 
@@ -66,7 +66,7 @@ module PacketGen
66
66
  str << Inspect.inspect_body(body)
67
67
  end
68
68
 
69
- # equality if {#to_s} is equal
69
+ # equality if {#to_s} are equal
70
70
  # @return [Boolean]
71
71
  def ==(other)
72
72
  to_s == other.to_s
@@ -22,15 +22,15 @@ module PacketGen
22
22
  # @author Sylvain Daubert
23
23
  # @since 2.1.3
24
24
  class ARPSpoofer
25
- # @param [Integer,Float,nil] timeout spoof will happen for this amount
25
+ # @param [Numeric,nil] timeout spoof will happen for this amount
26
26
  # of time
27
- # @param [Integer,Float] interval time between 2 ARP packets
27
+ # @param [Numeric] interval time between 2 ARP packets
28
28
  # @param [String,nil] iface network interface on which do spoofing.
29
29
  # Defaults to {PacketGen.default_iface}
30
30
  def initialize(timeout: nil, interval: 1.0, iface: nil)
31
31
  @timeout = timeout
32
32
  @timeout = @timeout.to_f if @timeout
33
- @interval = interval
33
+ @interval = interval.to_f
34
34
  @iface = iface || PacketGen.default_iface
35
35
  @targets = {}
36
36
  @arp_packets = {}
@@ -56,19 +56,19 @@ module PacketGen
56
56
  # @param [String] target_ip target IP address
57
57
  # @return [void]
58
58
  def remove(target_ip)
59
- @targets.delete target_ip
60
- @arp_packets.delete target_ip
59
+ @targets.delete(target_ip)
60
+ @arp_packets.delete(target_ip)
61
61
  end
62
62
 
63
63
  # Get registered targets (all targets, registered with {#add} and {#start})
64
- # @return [Array<String>] list of target IP addresses
64
+ # @return [Array<String>] list of registeres IP addresses
65
65
  def registered_targets
66
66
  @targets.keys
67
67
  end
68
68
 
69
69
  # Get active targets (registered with {#start}, or all after using
70
70
  # {#start_all})
71
- # @return [Array<String>] list of target IP addresses
71
+ # @return [Array<String>] list of active IP addresses
72
72
  def active_targets
73
73
  @arp_packets.keys
74
74
  end
@@ -83,23 +83,23 @@ module PacketGen
83
83
  # an ARP request is made to get it.
84
84
  # @return [void]
85
85
  def start(target_ip, spoofed_ip, options={})
86
- add target_ip, spoofed_ip, options
87
- activate target_ip
86
+ add(target_ip, spoofed_ip, options)
87
+ activate(target_ip)
88
88
  end
89
89
 
90
90
  # Stop spoofing on given target
91
91
  # @param [String] target_ip target IP address
92
92
  # @return [void]
93
93
  def stop(target_ip)
94
- deactivate target_ip
95
- remove target_ip
94
+ deactivate(target_ip)
95
+ remove(target_ip)
96
96
  end
97
97
 
98
98
  # Start spoofing on all targets added with {#add}.
99
99
  # @return [void]
100
100
  def start_all
101
101
  @targets.each_key do |target_ip|
102
- activate target_ip
102
+ activate(target_ip)
103
103
  end
104
104
  end
105
105
 
@@ -107,7 +107,7 @@ module PacketGen
107
107
  # @return [void]
108
108
  def stop_all
109
109
  @targets.each_key do |target_ip|
110
- deactivate target_ip
110
+ deactivate(target_ip)
111
111
  end
112
112
  end
113
113
 
@@ -115,9 +115,7 @@ module PacketGen
115
115
  # @param [String] target_ip target IP address
116
116
  # @return [Boolean]
117
117
  def active?(target_ip)
118
- # rubocop:disable Style/ReturnNilInPredicateMethodDefinition
119
- return unless @targets.key?(target_ip)
120
- # rubocop:enable Style/ReturnNilInPredicateMethodDefinition
118
+ return false unless @targets.key?(target_ip)
121
119
 
122
120
  @targets[target_ip][:active]
123
121
  end
@@ -126,6 +124,7 @@ module PacketGen
126
124
  # was set on {#initialize}.
127
125
  def wait
128
126
  @spoof_thread.join
127
+ @spoof_thread = nil
129
128
  end
130
129
 
131
130
  private
@@ -143,7 +142,7 @@ module PacketGen
143
142
  # Create spoof thread
144
143
  def create_spoof_thread
145
144
  @spoof_thread = Thread.new(@queue, @timeout, @interval) do |queue, timeout, interval|
146
- while timeout.nil? || timeout > 0.0
145
+ while timeout.nil? || timeout.positive?
147
146
  packets = queue.pop unless queue.empty?
148
147
  send_packets_on_wire(packets) unless packets.empty?
149
148
  timeout -= interval if timeout
@@ -161,9 +160,9 @@ module PacketGen
161
160
  # @param [String] target_ip
162
161
  # @return [void]
163
162
  def deactivate(target_ip)
164
- @arp_packets.delete target_ip
163
+ @arp_packets.delete(target_ip)
165
164
  if @arp_packets.empty?
166
- @spoof_thread.kill
165
+ @spoof_thread&.kill
167
166
  @spoof_thread = nil
168
167
  else
169
168
  @queue << @arp_packets.values
@@ -31,9 +31,9 @@ module PacketGen
31
31
  # @private
32
32
  IP_PATH = '/usr/bin/ip'
33
33
  # @private
34
- ARP_LINE_RE = /\((\d+\.\d+\.\d+\.\d+)\) at (([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})(?: \[ether\])? on (\w+)/.freeze
34
+ ARP_LINE_RE = /\((\d+\.\d+\.\d+\.\d+)\) at (([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})(?: \[ether\])? on (\w+)/
35
35
  # @private
36
- IP_LINE_RE = /^(\d+\.\d+\.\d+\.\d+) dev (\w+) lladdr (([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})/.freeze
36
+ IP_LINE_RE = /^(\d+\.\d+\.\d+\.\d+) dev (\w+) lladdr (([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})/
37
37
 
38
38
  # Get local ARP cache
39
39
  # @return [Hash] key: IP address, value: array containing MAC address and
@@ -168,7 +168,8 @@ module PacketGen
168
168
  def self.mitm(target1, target2, options={}, &block)
169
169
  options = { iface: PacketGen.default_iface }.merge(options)
170
170
 
171
- spoofer = Utils::ARPSpoofer.new(options)
171
+ spoofer_options = options.slice(:timeout, :interval, :iface)
172
+ spoofer = Utils::ARPSpoofer.new(**spoofer_options.compact)
172
173
  spoofer.add target1, target2, options
173
174
  spoofer.add target2, target1, options
174
175
 
@@ -11,5 +11,5 @@
11
11
  # @author Sylvain Daubert
12
12
  module PacketGen
13
13
  # PacketGen version
14
- VERSION = '3.3.3'
14
+ VERSION = '4.1.0'
15
15
  end
data/lib/packetgen.rb CHANGED
@@ -8,10 +8,12 @@
8
8
  # This program is published under MIT license.
9
9
 
10
10
  require 'packetgen/version'
11
+ require 'bin_struct'
11
12
  require 'interfacez'
12
13
 
13
14
  # PacketGen is a network packet generator and analyzor.
14
15
  # @author Sylvain Daubert
16
+ # @author LemonTree
15
17
  module PacketGen
16
18
  # Base exception class for PacketGen exceptions
17
19
  class Error < StandardError; end
@@ -32,12 +34,15 @@ module PacketGen
32
34
  # @return [Headerable]
33
35
  attr_reader :hdr
34
36
 
37
+ # @param [Headerable] prev_hdr
38
+ # @param [Headerable] hdr
35
39
  def initialize(prev_hdr, hdr)
36
40
  super()
37
41
  @prev_hdr = prev_hdr
38
42
  @hdr = hdr
39
43
  end
40
44
 
45
+ # @return [String]
41
46
  def message
42
47
  "#{prev_hdr.class} knowns no layer association with #{hdr.protocol_name}. " \
43
48
  "Try #{prev_hdr.class}.bind_layer(#{hdr.class}, " \
@@ -91,8 +96,10 @@ module PacketGen
91
96
  # Force binary encoding for +str+
92
97
  # @param [String] str
93
98
  # @return [String] binary encoded string
99
+ # @deprecated Use +String#b+ instead.
94
100
  def self.force_binary(str)
95
- str.dup.force_encoding(Encoding::BINARY)
101
+ Deprecation.deprecated(self, :force_binary, 'String#b')
102
+ str.b
96
103
  end
97
104
 
98
105
  # Get default network interface (ie. first non-loopback declared interface)
@@ -100,12 +107,13 @@ module PacketGen
100
107
  def self.default_iface
101
108
  return @default_iface if defined? @default_iface
102
109
 
103
- @default_iface = Interfacez.raw_interface_addresses.each do |iface|
110
+ Interfacez.raw_interface_addresses.each do |iface|
104
111
  next unless iface.broadaddr
105
112
  next unless Interfacez.ipv4_address_of(iface.name)
106
113
  next unless Interfacez.ipv6_address_of(iface.name)
107
114
 
108
- break iface.name
115
+ @default_iface = iface.name
116
+ break
109
117
  end
110
118
  end
111
119
 
@@ -118,7 +126,7 @@ module PacketGen
118
126
  # Shortcut to get a header class
119
127
  # @example builtin class
120
128
  # # same as PacketGen::Header::Dot11:Data.new(id: 0xfedc)
121
- # dot11 = PacketGen.header('Dot11::Data', id: 0xfedc) #=> PacketGen::Header::Dot11:Data
129
+ # dot11 = PacketGen.header('Dot11::Data', id: 0xfedc)
122
130
  # @example plugin class
123
131
  # require 'packet-plugin-smb'
124
132
  # # same as PacketGen::Plugin::SMB::CloseRequest.new(fid: 0x1234)
@@ -133,7 +141,6 @@ end
133
141
 
134
142
  require 'packetgen/deprecation'
135
143
  require 'packetgen/inspect'
136
- require 'packetgen/types'
137
144
  require 'packetgen/pcapng'
138
145
  require 'packetgen/pcap'
139
146
  require 'packetgen/packet'
metadata CHANGED
@@ -1,77 +1,84 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packetgen
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.3
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LemonTree55
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-07-15 00:00:00.000000000 Z
10
+ date: 2025-03-08 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: interfacez
13
+ name: bin_struct
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '1.0'
18
+ version: 0.5.0
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: '1.0'
25
+ version: 0.5.0
27
26
  - !ruby/object:Gem::Dependency
28
- name: pcaprub
27
+ name: digest-crc
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: 0.13.0
32
+ version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: 0.13.0
39
+ version: '0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: rasn1
41
+ name: interfacez
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '0.13'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 0.13.1
46
+ version: '1.0'
51
47
  type: :runtime
52
48
  prerelease: false
53
49
  version_requirements: !ruby/object:Gem::Requirement
54
50
  requirements:
55
51
  - - "~>"
56
52
  - !ruby/object:Gem::Version
57
- version: '0.13'
58
- - - ">="
53
+ version: '1.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: pcaprub
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.13.1
60
+ version: 0.13.0
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.13.0
61
68
  - !ruby/object:Gem::Dependency
62
- name: digest-crc
69
+ name: rasn1
63
70
  requirement: !ruby/object:Gem::Requirement
64
71
  requirements:
65
72
  - - "~>"
66
73
  - !ruby/object:Gem::Version
67
- version: '0'
74
+ version: '0.14'
68
75
  type: :runtime
69
76
  prerelease: false
70
77
  version_requirements: !ruby/object:Gem::Requirement
71
78
  requirements:
72
79
  - - "~>"
73
80
  - !ruby/object:Gem::Version
74
- version: '0'
81
+ version: '0.14'
75
82
  description: |
76
83
  PacketGen is a network packet manipulation library. It allows reading, parsing
77
84
  and sending network packets with fun.
@@ -197,24 +204,10 @@ files:
197
204
  - lib/packetgen/pcapng/unknown_block.rb
198
205
  - lib/packetgen/pcaprub_wrapper.rb
199
206
  - lib/packetgen/proto.rb
200
- - lib/packetgen/types.rb
201
- - lib/packetgen/types/abstract_tlv.rb
202
- - lib/packetgen/types/array.rb
203
- - lib/packetgen/types/cstring.rb
204
- - lib/packetgen/types/enum.rb
205
- - lib/packetgen/types/fieldable.rb
206
- - lib/packetgen/types/fields.rb
207
- - lib/packetgen/types/int.rb
208
- - lib/packetgen/types/int_string.rb
209
- - lib/packetgen/types/length_from.rb
210
- - lib/packetgen/types/oui.rb
211
- - lib/packetgen/types/string.rb
212
- - lib/packetgen/types/tlv.rb
213
207
  - lib/packetgen/unknown_packet.rb
214
208
  - lib/packetgen/utils.rb
215
209
  - lib/packetgen/utils/arp_spoofer.rb
216
210
  - lib/packetgen/version.rb
217
- homepage:
218
211
  licenses:
219
212
  - MIT
220
213
  metadata:
@@ -223,7 +216,6 @@ metadata:
223
216
  bug_tracker_uri: https://github.com/lemontree55/packetgen/issues
224
217
  documentation_uri: https://www.rubydoc.info/gems/packetgen
225
218
  wiki_uri: https://github.com/lemontree55/packetgen/wiki
226
- post_install_message:
227
219
  rdoc_options:
228
220
  - "--title"
229
221
  - PacketGen - network packet dissector
@@ -237,15 +229,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
237
229
  requirements:
238
230
  - - ">="
239
231
  - !ruby/object:Gem::Version
240
- version: 2.7.0
232
+ version: 3.0.0
241
233
  required_rubygems_version: !ruby/object:Gem::Requirement
242
234
  requirements:
243
235
  - - ">="
244
236
  - !ruby/object:Gem::Version
245
237
  version: '0'
246
238
  requirements: []
247
- rubygems_version: 3.3.15
248
- signing_key:
239
+ rubygems_version: 3.6.2
249
240
  specification_version: 4
250
241
  summary: Network packet generator and dissector
251
242
  test_files: []