packetgen 1.4.3 → 2.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -4
- data/README.md +6 -6
- data/lib/packetgen.rb +0 -1
- data/lib/packetgen/capture.rb +15 -37
- data/lib/packetgen/header.rb +6 -2
- data/lib/packetgen/header/asn1_base.rb +86 -0
- data/lib/packetgen/header/base.rb +68 -44
- data/lib/packetgen/header/crypto.rb +62 -0
- data/lib/packetgen/header/dns.rb +3 -3
- data/lib/packetgen/header/dot11.rb +5 -0
- data/lib/packetgen/header/esp.rb +7 -43
- data/lib/packetgen/header/ike.rb +235 -0
- data/lib/packetgen/header/ike/auth.rb +197 -0
- data/lib/packetgen/header/ike/cert.rb +105 -0
- data/lib/packetgen/header/ike/certreq.rb +69 -0
- data/lib/packetgen/header/ike/id.rb +131 -0
- data/lib/packetgen/header/ike/ke.rb +74 -0
- data/lib/packetgen/header/ike/nonce.rb +35 -0
- data/lib/packetgen/header/ike/notify.rb +220 -0
- data/lib/packetgen/header/ike/payload.rb +307 -0
- data/lib/packetgen/header/ike/sa.rb +577 -0
- data/lib/packetgen/header/ike/sk.rb +255 -0
- data/lib/packetgen/header/ike/ts.rb +287 -0
- data/lib/packetgen/header/ike/vendor_id.rb +34 -0
- data/lib/packetgen/header/ip.rb +4 -4
- data/lib/packetgen/header/ipv6.rb +3 -3
- data/lib/packetgen/header/snmp.rb +283 -0
- data/lib/packetgen/header/tcp.rb +3 -3
- data/lib/packetgen/inspect.rb +35 -9
- data/lib/packetgen/packet.rb +23 -9
- data/lib/packetgen/types/fields.rb +11 -3
- data/lib/packetgen/version.rb +1 -1
- data/packetgen.gemspec +2 -0
- metadata +52 -2
data/lib/packetgen/packet.rb
CHANGED
@@ -44,6 +44,12 @@ module PacketGen
|
|
44
44
|
# == Save packets to a file
|
45
45
|
# Packet.write 'file.pcapng', packets
|
46
46
|
#
|
47
|
+
# @since 2.0.0
|
48
|
+
#
|
49
|
+
# Packet accessor has changed. When header class is in a namespace
|
50
|
+
# (for example Dot11::* header classes), to avoid clashes in names, such
|
51
|
+
# accessors are named +namespace_class+. For example {Header::Dot11::Data}
|
52
|
+
# header is now accessed through +Packet#dot11_data+ and nor more +Packet#data+).
|
47
53
|
# @author Sylvain Daubert
|
48
54
|
class Packet
|
49
55
|
# @return [Array<Header::Base]
|
@@ -216,10 +222,15 @@ module PacketGen
|
|
216
222
|
|
217
223
|
# Encapulate another packet in +self+
|
218
224
|
# @param [Packet] other
|
225
|
+
# @param [Boolean] parsing set to +true+ to not update last current header field
|
226
|
+
# from binding with first other's one. Use only when current heade field as
|
227
|
+
# its value set accordingly.
|
219
228
|
# @return [self] +self+ with new headers from +other+
|
220
229
|
# @since 1.1.0
|
221
|
-
def encapsulate(other)
|
222
|
-
other.headers.
|
230
|
+
def encapsulate(other, parsing: false)
|
231
|
+
other.headers.each_with_index do |h, i|
|
232
|
+
add_header h, parsing: (i > 0) || parsing
|
233
|
+
end
|
223
234
|
end
|
224
235
|
|
225
236
|
# Remove headers from +self+
|
@@ -327,19 +338,19 @@ module PacketGen
|
|
327
338
|
# Add a header to packet
|
328
339
|
# @param [Header::Base] header
|
329
340
|
# @param [Header::Base] previous_header
|
341
|
+
# @param [Boolean] parsing
|
330
342
|
# @return [void]
|
331
343
|
def add_header(header, previous_header: nil, parsing: false)
|
332
|
-
protocol = header.protocol_name
|
333
344
|
prev_header = previous_header || @headers.last
|
334
345
|
if prev_header
|
335
346
|
bindings = prev_header.class.known_headers[header.class]
|
336
347
|
if bindings.nil?
|
337
348
|
bindings = prev_header.class.known_headers[header.class.superclass]
|
338
349
|
if bindings.nil?
|
339
|
-
msg = "#{prev_header.class} knowns no layer association with #{
|
340
|
-
msg << "Try #{prev_header.class}.bind_layer(
|
341
|
-
msg << "#{prev_header.
|
342
|
-
msg << "value_for_#{
|
350
|
+
msg = "#{prev_header.class} knowns no layer association with #{header.protocol_name}. "
|
351
|
+
msg << "Try #{prev_header.class}.bind_layer(#{header.class}, "
|
352
|
+
msg << "#{prev_header.method_name}_proto_field: "
|
353
|
+
msg << "value_for_#{header.method_name})"
|
343
354
|
raise ArgumentError, msg
|
344
355
|
end
|
345
356
|
end
|
@@ -348,8 +359,8 @@ module PacketGen
|
|
348
359
|
end
|
349
360
|
header.packet = self
|
350
361
|
@headers << header unless previous_header
|
351
|
-
unless respond_to?
|
352
|
-
self.class.class_eval "def #{
|
362
|
+
unless respond_to? header.method_name
|
363
|
+
self.class.class_eval "def #{header.method_name}(arg=nil);" \
|
353
364
|
"header(#{header.class}, arg); end"
|
354
365
|
end
|
355
366
|
end
|
@@ -375,11 +386,14 @@ module PacketGen
|
|
375
386
|
decode_packet_bottom_up = true
|
376
387
|
while decode_packet_bottom_up do
|
377
388
|
last_known_hdr = @headers.last
|
389
|
+
break unless last_known_hdr.respond_to? :body
|
390
|
+
break if last_known_hdr.body.empty?
|
378
391
|
search_header(last_known_hdr) do |nh|
|
379
392
|
str = last_known_hdr.body
|
380
393
|
nheader = nh.new
|
381
394
|
nheader = nheader.read(str)
|
382
395
|
add_header nheader, parsing: true
|
396
|
+
nheader.dissect if nheader.respond_to? :dissect
|
383
397
|
end
|
384
398
|
decode_packet_bottom_up = (@headers.last != last_known_hdr)
|
385
399
|
end
|
@@ -187,13 +187,21 @@ module PacketGen
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
+
# Delete a previously defined field
|
191
|
+
# @param [Symbol] name
|
192
|
+
# @return [void]
|
193
|
+
def self.delete_field(name)
|
194
|
+
@ordered_fields.delete name
|
195
|
+
@field_defs.delete name
|
196
|
+
end
|
197
|
+
|
190
198
|
# Define a bitfield on given attribute
|
191
199
|
# class MyHeader < PacketGen::Types::Fields
|
192
200
|
# define_field :flags, Types::Int16
|
193
201
|
# # define a bit field on :flag attribute:
|
194
202
|
# # flag1, flag2 and flag3 are 1-bit fields
|
195
203
|
# # type and stype are 3-bit fields. reserved is a 6-bit field
|
196
|
-
# define_bit_fields_on :flags, :flag1, :flag2, :flag3, :type, 3, :stype, 3, :reserved
|
204
|
+
# define_bit_fields_on :flags, :flag1, :flag2, :flag3, :type, 3, :stype, 3, :reserved, 7
|
197
205
|
# end
|
198
206
|
# A bitfield of size 1 bit defines 2 methods:
|
199
207
|
# * +#field?+ which returns a Boolean,
|
@@ -340,9 +348,9 @@ module PacketGen
|
|
340
348
|
# @return [String]
|
341
349
|
def inspect
|
342
350
|
str = Inspect.dashed_line(self.class, 2)
|
343
|
-
|
351
|
+
fields.each do |attr|
|
344
352
|
next if attr == :body
|
345
|
-
str << Inspect.inspect_attribute(attr,
|
353
|
+
str << Inspect.inspect_attribute(attr, self[attr], 2)
|
346
354
|
end
|
347
355
|
str
|
348
356
|
end
|
data/lib/packetgen/version.rb
CHANGED
data/packetgen.gemspec
CHANGED
@@ -25,6 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency 'pcaprub', '~>0.12.4'
|
26
26
|
spec.add_dependency 'pry', '~>0.10'
|
27
27
|
spec.add_dependency 'network_interface'
|
28
|
+
spec.add_dependency 'net-proto', '~>1.2'
|
29
|
+
spec.add_dependency 'rasn1', '~>0.3', '>= 0.3.1'
|
28
30
|
|
29
31
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
30
32
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packetgen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.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: 2017-
|
11
|
+
date: 2017-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pcaprub
|
@@ -52,6 +52,40 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: net-proto
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rasn1
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.3'
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 0.3.1
|
79
|
+
type: :runtime
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - "~>"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0.3'
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.3.1
|
55
89
|
- !ruby/object:Gem::Dependency
|
56
90
|
name: bundler
|
57
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,7 +176,9 @@ files:
|
|
142
176
|
- lib/packetgen/config.rb
|
143
177
|
- lib/packetgen/header.rb
|
144
178
|
- lib/packetgen/header/arp.rb
|
179
|
+
- lib/packetgen/header/asn1_base.rb
|
145
180
|
- lib/packetgen/header/base.rb
|
181
|
+
- lib/packetgen/header/crypto.rb
|
146
182
|
- lib/packetgen/header/dns.rb
|
147
183
|
- lib/packetgen/header/dns/name.rb
|
148
184
|
- lib/packetgen/header/dns/opt.rb
|
@@ -163,9 +199,23 @@ files:
|
|
163
199
|
- lib/packetgen/header/eth.rb
|
164
200
|
- lib/packetgen/header/icmp.rb
|
165
201
|
- lib/packetgen/header/icmpv6.rb
|
202
|
+
- lib/packetgen/header/ike.rb
|
203
|
+
- lib/packetgen/header/ike/auth.rb
|
204
|
+
- lib/packetgen/header/ike/cert.rb
|
205
|
+
- lib/packetgen/header/ike/certreq.rb
|
206
|
+
- lib/packetgen/header/ike/id.rb
|
207
|
+
- lib/packetgen/header/ike/ke.rb
|
208
|
+
- lib/packetgen/header/ike/nonce.rb
|
209
|
+
- lib/packetgen/header/ike/notify.rb
|
210
|
+
- lib/packetgen/header/ike/payload.rb
|
211
|
+
- lib/packetgen/header/ike/sa.rb
|
212
|
+
- lib/packetgen/header/ike/sk.rb
|
213
|
+
- lib/packetgen/header/ike/ts.rb
|
214
|
+
- lib/packetgen/header/ike/vendor_id.rb
|
166
215
|
- lib/packetgen/header/ip.rb
|
167
216
|
- lib/packetgen/header/ipv6.rb
|
168
217
|
- lib/packetgen/header/llc.rb
|
218
|
+
- lib/packetgen/header/snmp.rb
|
169
219
|
- lib/packetgen/header/tcp.rb
|
170
220
|
- lib/packetgen/header/tcp/option.rb
|
171
221
|
- lib/packetgen/header/tcp/options.rb
|