packetgen 3.1.3 → 3.1.8
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/README.md +0 -1
- data/bin/pgconsole +1 -0
- data/lib/packetgen.rb +33 -4
- data/lib/packetgen/capture.rb +51 -28
- data/lib/packetgen/config.rb +17 -11
- data/lib/packetgen/deprecation.rb +33 -7
- data/lib/packetgen/header.rb +2 -9
- data/lib/packetgen/header/arp.rb +2 -2
- data/lib/packetgen/header/asn1_base.rb +2 -2
- data/lib/packetgen/header/base.rb +70 -74
- data/lib/packetgen/header/bootp.rb +3 -3
- data/lib/packetgen/header/dhcp.rb +2 -2
- data/lib/packetgen/header/dhcp/option.rb +2 -2
- data/lib/packetgen/header/dhcp/options.rb +2 -2
- data/lib/packetgen/header/dhcpv6.rb +12 -12
- data/lib/packetgen/header/dhcpv6/duid.rb +11 -5
- data/lib/packetgen/header/dhcpv6/option.rb +8 -16
- data/lib/packetgen/header/dhcpv6/options.rb +2 -2
- data/lib/packetgen/header/dhcpv6/relay.rb +2 -2
- data/lib/packetgen/header/dns.rb +9 -9
- data/lib/packetgen/header/dns/name.rb +20 -9
- data/lib/packetgen/header/dns/opt.rb +2 -2
- data/lib/packetgen/header/dns/option.rb +2 -2
- data/lib/packetgen/header/dns/qdsection.rb +3 -3
- data/lib/packetgen/header/dns/question.rb +37 -35
- data/lib/packetgen/header/dns/rr.rb +3 -3
- data/lib/packetgen/header/dns/rrsection.rb +2 -2
- data/lib/packetgen/header/dot11.rb +30 -51
- data/lib/packetgen/header/dot11/control.rb +5 -5
- data/lib/packetgen/header/dot11/data.rb +11 -7
- data/lib/packetgen/header/dot11/element.rb +16 -16
- data/lib/packetgen/header/dot11/management.rb +2 -2
- data/lib/packetgen/header/dot11/sub_mngt.rb +2 -12
- data/lib/packetgen/header/dot1q.rb +2 -2
- data/lib/packetgen/header/dot1x.rb +7 -20
- data/lib/packetgen/header/eap.rb +30 -33
- data/lib/packetgen/header/eap/fast.rb +2 -2
- data/lib/packetgen/header/eap/md5.rb +2 -2
- data/lib/packetgen/header/eap/tls.rb +2 -2
- data/lib/packetgen/header/eap/ttls.rb +2 -2
- data/lib/packetgen/header/eth.rb +13 -11
- data/lib/packetgen/header/gre.rb +2 -2
- data/lib/packetgen/header/http.rb +2 -0
- data/lib/packetgen/header/http/headers.rb +6 -4
- data/lib/packetgen/header/http/request.rb +36 -21
- data/lib/packetgen/header/http/response.rb +7 -7
- data/lib/packetgen/header/http/verbs.rb +3 -3
- data/lib/packetgen/header/icmp.rb +2 -2
- data/lib/packetgen/header/icmpv6.rb +2 -2
- data/lib/packetgen/header/igmp.rb +4 -4
- data/lib/packetgen/header/igmpv3.rb +3 -3
- data/lib/packetgen/header/igmpv3/group_record.rb +8 -6
- data/lib/packetgen/header/igmpv3/mq.rb +2 -2
- data/lib/packetgen/header/igmpv3/mr.rb +2 -2
- data/lib/packetgen/header/ip.rb +30 -31
- data/lib/packetgen/header/ip/addr.rb +10 -3
- data/lib/packetgen/header/ip/option.rb +8 -10
- data/lib/packetgen/header/ip/options.rb +3 -5
- data/lib/packetgen/header/ipv6.rb +2 -2
- data/lib/packetgen/header/ipv6/addr.rb +9 -2
- data/lib/packetgen/header/ipv6/extension.rb +2 -2
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +3 -3
- data/lib/packetgen/header/llc.rb +2 -2
- data/lib/packetgen/header/mdns.rb +2 -2
- data/lib/packetgen/header/mld.rb +2 -2
- data/lib/packetgen/header/mldv2.rb +2 -2
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +4 -2
- data/lib/packetgen/header/mldv2/mlq.rb +2 -2
- data/lib/packetgen/header/mldv2/mlr.rb +2 -2
- data/lib/packetgen/header/ospfv2.rb +9 -9
- data/lib/packetgen/header/ospfv2/db_description.rb +2 -2
- data/lib/packetgen/header/ospfv2/hello.rb +2 -2
- data/lib/packetgen/header/ospfv2/ls_ack.rb +2 -2
- data/lib/packetgen/header/ospfv2/ls_request.rb +4 -2
- data/lib/packetgen/header/ospfv2/ls_update.rb +2 -2
- data/lib/packetgen/header/ospfv2/lsa.rb +9 -5
- data/lib/packetgen/header/ospfv2/lsa_header.rb +8 -7
- data/lib/packetgen/header/ospfv3.rb +2 -2
- data/lib/packetgen/header/ospfv3/db_description.rb +2 -2
- data/lib/packetgen/header/ospfv3/hello.rb +2 -2
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +4 -2
- data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -2
- data/lib/packetgen/header/ospfv3/ls_request.rb +4 -2
- data/lib/packetgen/header/ospfv3/ls_update.rb +2 -2
- data/lib/packetgen/header/ospfv3/lsa.rb +5 -5
- data/lib/packetgen/header/ospfv3/lsa_header.rb +9 -8
- data/lib/packetgen/header/snmp.rb +33 -29
- data/lib/packetgen/header/tcp.rb +4 -23
- data/lib/packetgen/header/tcp/option.rb +11 -11
- data/lib/packetgen/header/tcp/options.rb +2 -2
- data/lib/packetgen/header/tftp.rb +6 -6
- data/lib/packetgen/header/udp.rb +3 -3
- data/lib/packetgen/headerable.rb +5 -4
- data/lib/packetgen/inject.rb +23 -0
- data/lib/packetgen/inspect.rb +23 -20
- data/lib/packetgen/packet.rb +82 -53
- data/lib/packetgen/pcap.rb +29 -0
- data/lib/packetgen/pcapng.rb +13 -13
- data/lib/packetgen/pcapng/block.rb +26 -13
- data/lib/packetgen/pcapng/epb.rb +25 -22
- data/lib/packetgen/pcapng/file.rb +260 -138
- data/lib/packetgen/pcapng/idb.rb +36 -38
- data/lib/packetgen/pcapng/shb.rb +51 -53
- data/lib/packetgen/pcapng/spb.rb +19 -19
- data/lib/packetgen/pcapng/unknown_block.rb +5 -13
- data/lib/packetgen/pcaprub_wrapper.rb +81 -0
- data/lib/packetgen/proto.rb +2 -2
- data/lib/packetgen/types.rb +3 -0
- data/lib/packetgen/types/abstract_tlv.rb +27 -7
- data/lib/packetgen/types/array.rb +22 -15
- data/lib/packetgen/types/cstring.rb +57 -20
- data/lib/packetgen/types/enum.rb +7 -2
- data/lib/packetgen/types/fieldable.rb +65 -0
- data/lib/packetgen/types/fields.rb +182 -117
- data/lib/packetgen/types/int.rb +18 -6
- data/lib/packetgen/types/int_string.rb +10 -2
- data/lib/packetgen/types/length_from.rb +20 -12
- data/lib/packetgen/types/oui.rb +4 -2
- data/lib/packetgen/types/string.rb +59 -8
- data/lib/packetgen/types/tlv.rb +4 -2
- data/lib/packetgen/utils.rb +4 -4
- data/lib/packetgen/utils/arp_spoofer.rb +2 -2
- data/lib/packetgen/version.rb +3 -3
- metadata +39 -61
- data/.gitignore +0 -13
- data/.rubocop.yml +0 -30
- data/.travis.yml +0 -19
- data/Gemfile +0 -4
- data/Rakefile +0 -21
- data/packetgen.gemspec +0 -36
@@ -1,10 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is part of PacketGen
|
2
4
|
# See https://github.com/sdaubert/packetgen for more informations
|
3
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
6
|
# This program is published under MIT license.
|
5
7
|
|
6
|
-
# frozen_string_literal: true
|
7
|
-
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class DNS
|
@@ -98,7 +98,7 @@ module PacketGen
|
|
98
98
|
def human_rrclass
|
99
99
|
if self[:name].dns.is_a? MDNS
|
100
100
|
str = self.class::CLASSES.key(self.rrclass & 0x7fff) || '0x%04x' % (self.rrclass & 0x7fff)
|
101
|
-
str += ' CACHE-FLUSH' if self.rrclass & 0x8000
|
101
|
+
str += ' CACHE-FLUSH' if (self.rrclass & 0x8000).positive?
|
102
102
|
str
|
103
103
|
else
|
104
104
|
self.class::CLASSES.key(self.rrclass) || '0x%04x' % self.rrclass
|
@@ -1,10 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is part of PacketGen
|
2
4
|
# See https://github.com/sdaubert/packetgen for more informations
|
3
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
6
|
# This program is published under MIT license.
|
5
7
|
|
6
|
-
# frozen_string_literal: true
|
7
|
-
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class DNS
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is part of PacketGen
|
3
5
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
7
|
# This program is published under MIT license.
|
6
8
|
|
7
|
-
# frozen_string_literal: true
|
8
|
-
|
9
9
|
require 'zlib'
|
10
10
|
|
11
11
|
module PacketGen
|
@@ -28,7 +28,7 @@ module PacketGen
|
|
28
28
|
define_field :dlt, Types::Int32le
|
29
29
|
# @!attribute ppi_fields
|
30
30
|
# @return [Type::String] concatenation of PPI fields
|
31
|
-
define_field :ppi_fields, Types::String
|
31
|
+
define_field :ppi_fields, Types::String, builder: ->(h, t) { t.new(length_from: -> { h.length - 8 }) }
|
32
32
|
# @!attribute body
|
33
33
|
# @return [Type::String]
|
34
34
|
define_field :body, Types::String
|
@@ -36,21 +36,6 @@ module PacketGen
|
|
36
36
|
# @return [Boolean] align flag from {#flags} attribute
|
37
37
|
define_bit_fields_on :flags, :reserved, 7, :align
|
38
38
|
|
39
|
-
# @param [String] str
|
40
|
-
# @return [PPI] self
|
41
|
-
def read(str)
|
42
|
-
return self if str.nil?
|
43
|
-
|
44
|
-
force_binary str
|
45
|
-
self[:version].read str[0, 1]
|
46
|
-
self[:flags].read str[1, 1]
|
47
|
-
self[:length].read str[2, 2]
|
48
|
-
self[:dlt].read str[4, 4]
|
49
|
-
self[:ppi_fields].read str[8, length - 8]
|
50
|
-
self[:body].read str[length, str.size]
|
51
|
-
self
|
52
|
-
end
|
53
|
-
|
54
39
|
# Check version field
|
55
40
|
# @see [Base#parse?]
|
56
41
|
def parse?
|
@@ -68,9 +53,7 @@ module PacketGen
|
|
68
53
|
# @param [String] iface interface name
|
69
54
|
# @return [void]
|
70
55
|
def to_w(iface)
|
71
|
-
|
72
|
-
pcap.inject self.to_s
|
73
|
-
pcap.close
|
56
|
+
Inject.inject(iface: iface, data: self)
|
74
57
|
end
|
75
58
|
end
|
76
59
|
self.add_class PPI
|
@@ -93,26 +76,11 @@ module PacketGen
|
|
93
76
|
define_field :present_flags, Types::Int32le
|
94
77
|
# @!attribute radio_fields
|
95
78
|
# @return [Type::String] concatenation of RadioTap fields
|
96
|
-
define_field :radio_fields, Types::String
|
79
|
+
define_field :radio_fields, Types::String, builder: ->(h, t) { t.new(length_from: -> { h.length - 8 }) }
|
97
80
|
# @!attribute body
|
98
81
|
# @return [Type::String]
|
99
82
|
define_field :body, Types::String
|
100
83
|
|
101
|
-
# @param [String] str
|
102
|
-
# @return [RadioTap] self
|
103
|
-
def read(str)
|
104
|
-
return self if str.nil?
|
105
|
-
|
106
|
-
force_binary str
|
107
|
-
self[:version].read str[0, 1]
|
108
|
-
self[:pad].read str[1, 1]
|
109
|
-
self[:length].read str[2, 2]
|
110
|
-
self[:present_flags].read str[4, 4]
|
111
|
-
self[:radio_fields].read str[8, length - 8]
|
112
|
-
self[:body].read str[length, str.size]
|
113
|
-
self
|
114
|
-
end
|
115
|
-
|
116
84
|
# Check version field
|
117
85
|
# @see [Base#parse?]
|
118
86
|
def parse?
|
@@ -130,10 +98,7 @@ module PacketGen
|
|
130
98
|
# @param [String] iface interface name
|
131
99
|
# @return [void]
|
132
100
|
def to_w(iface)
|
133
|
-
|
134
|
-
PCAP_TIMEOUT)
|
135
|
-
pcap.inject self.to_s
|
136
|
-
pcap.close
|
101
|
+
Inject.inject(iface: iface, data: self)
|
137
102
|
end
|
138
103
|
end
|
139
104
|
self.add_class RadioTap
|
@@ -315,7 +280,7 @@ module PacketGen
|
|
315
280
|
def read(str)
|
316
281
|
fcs = Dot11.fcs?
|
317
282
|
|
318
|
-
if self.
|
283
|
+
if self.instance_of? Dot11
|
319
284
|
return self if str.nil?
|
320
285
|
|
321
286
|
force_binary str
|
@@ -358,7 +323,7 @@ module PacketGen
|
|
358
323
|
|
359
324
|
# @return [String]
|
360
325
|
def inspect
|
361
|
-
str = if self.
|
326
|
+
str = if self.instance_of? Dot11
|
362
327
|
Inspect.dashed_line("#{self.class} #{human_type}", 1)
|
363
328
|
elsif self.respond_to? :human_subtype
|
364
329
|
Inspect.dashed_line("#{self.class} #{human_subtype}", 1)
|
@@ -379,10 +344,7 @@ module PacketGen
|
|
379
344
|
# @param [String] iface interface name
|
380
345
|
# @return [void]
|
381
346
|
def to_w(iface)
|
382
|
-
|
383
|
-
PCAP_TIMEOUT)
|
384
|
-
pcap.inject self.to_s
|
385
|
-
pcap.close
|
347
|
+
Inject.inject(iface: iface, data: self)
|
386
348
|
end
|
387
349
|
|
388
350
|
# Callback called when a Dot11 header is added to a packet
|
@@ -398,27 +360,44 @@ module PacketGen
|
|
398
360
|
|
399
361
|
private
|
400
362
|
|
401
|
-
def
|
363
|
+
def remove_from_applicable_fields(fields)
|
364
|
+
fields = [fields] unless fields.is_a? Array
|
365
|
+
@applicable_fields -= fields
|
366
|
+
end
|
367
|
+
|
368
|
+
def handle_mac4
|
402
369
|
if to_ds? && from_ds?
|
403
370
|
@applicable_fields[6, 0] = :mac4 unless @applicable_fields.include? :mac4
|
404
371
|
else
|
405
|
-
|
372
|
+
remove_from_applicable_fields :mac4
|
406
373
|
end
|
374
|
+
end
|
375
|
+
|
376
|
+
def handle_ht_ctrl
|
407
377
|
if order?
|
408
378
|
unless @applicable_fields.include? :ht_ctrl
|
409
379
|
idx = @applicable_fields.index(:body)
|
410
380
|
@applicable_fields[idx, 0] = :ht_ctrl
|
411
381
|
end
|
412
382
|
else
|
413
|
-
|
383
|
+
remove_from_applicable_fields %i[ht_ctrl]
|
414
384
|
end
|
385
|
+
end
|
386
|
+
|
387
|
+
def handle_fcs
|
415
388
|
if Dot11.fcs?
|
416
389
|
@applicable_fields << :fcs unless @applicable_fields.include? :fcs
|
417
390
|
else
|
418
|
-
|
391
|
+
remove_from_applicable_fields :fcs
|
419
392
|
end
|
420
393
|
end
|
421
394
|
|
395
|
+
def define_applicable_fields
|
396
|
+
handle_mac4
|
397
|
+
handle_ht_ctrl
|
398
|
+
handle_fcs
|
399
|
+
end
|
400
|
+
|
422
401
|
def private_read(str, fcs)
|
423
402
|
self[:frame_ctrl].read str[0, 2]
|
424
403
|
define_applicable_fields
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is part of PacketGen
|
3
5
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
7
|
# This program is published under MIT license.
|
6
8
|
|
7
|
-
# frozen_string_literal: true
|
8
|
-
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class Dot11
|
@@ -25,9 +25,9 @@ module PacketGen
|
|
25
25
|
class Control < Dot11
|
26
26
|
# Control subtypes
|
27
27
|
SUBTYPES = {
|
28
|
-
7
|
29
|
-
8
|
30
|
-
9
|
28
|
+
7 => 'Wrapper',
|
29
|
+
8 => 'Block Ack Request',
|
30
|
+
9 => 'Block Ack',
|
31
31
|
10 => 'PS-Poll',
|
32
32
|
11 => 'RTS',
|
33
33
|
12 => 'CTS',
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is part of PacketGen
|
3
5
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
7
|
# This program is published under MIT license.
|
6
8
|
|
7
|
-
# frozen_string_literal: true
|
8
|
-
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class Dot11
|
@@ -44,22 +44,22 @@ module PacketGen
|
|
44
44
|
case ds
|
45
45
|
when 0
|
46
46
|
# MAC1: RA/DA, MAC2: TA/SA
|
47
|
-
|
47
|
+
invert_mac :mac1, :mac2
|
48
48
|
when 1
|
49
49
|
# MAC1: RA/BSSID, MAC2: TA/SA, MAC3: DA
|
50
|
-
|
50
|
+
invert_mac :mac1, :mac2
|
51
51
|
self.to_ds = false
|
52
52
|
self.from_ds = true
|
53
53
|
when 2
|
54
54
|
# MAC1: RA/DA, MAC2: BSSID, MAC3: SA or BSSID
|
55
|
-
|
55
|
+
invert_mac :mac1, :mac2
|
56
56
|
self.to_ds = true
|
57
57
|
self.from_ds = false
|
58
58
|
when 3
|
59
59
|
# MAC1: RA, MAC2: TA
|
60
|
-
|
60
|
+
invert_mac :mac1, :mac2
|
61
61
|
# MAC3: DA, MAC4: SA
|
62
|
-
|
62
|
+
invert_mac :mac3, :mac4
|
63
63
|
end
|
64
64
|
self
|
65
65
|
end
|
@@ -135,6 +135,10 @@ module PacketGen
|
|
135
135
|
@applicable_fields -= %i[qos_ctrl]
|
136
136
|
end
|
137
137
|
end
|
138
|
+
|
139
|
+
def invert_mac(mac1, mac2)
|
140
|
+
self[mac1], self[mac2] = self[mac2], self[mac1]
|
141
|
+
end
|
138
142
|
end
|
139
143
|
end
|
140
144
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is part of PacketGen
|
3
5
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
7
|
# This program is published under MIT license.
|
6
8
|
|
7
|
-
# frozen_string_literal: true
|
8
|
-
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class Dot11
|
@@ -22,20 +22,20 @@ module PacketGen
|
|
22
22
|
class Element
|
23
23
|
# Known element types
|
24
24
|
TYPES = {
|
25
|
-
0 =>
|
26
|
-
1 =>
|
27
|
-
2 =>
|
28
|
-
3 =>
|
29
|
-
4 =>
|
30
|
-
5 =>
|
31
|
-
6 =>
|
32
|
-
16 =>
|
33
|
-
42 =>
|
34
|
-
46 =>
|
35
|
-
47 =>
|
36
|
-
48 =>
|
37
|
-
50 =>
|
38
|
-
68 =>
|
25
|
+
0 => 'SSID',
|
26
|
+
1 => 'Rates',
|
27
|
+
2 => 'FHset',
|
28
|
+
3 => 'DSset',
|
29
|
+
4 => 'CFset',
|
30
|
+
5 => 'TIM',
|
31
|
+
6 => 'IBSSset',
|
32
|
+
16 => 'challenge',
|
33
|
+
42 => 'ERPinfo',
|
34
|
+
46 => 'QoS Cap.',
|
35
|
+
47 => 'ERPinfo',
|
36
|
+
48 => 'RSNinfo',
|
37
|
+
50 => 'ESRates',
|
38
|
+
68 => 'reserved',
|
39
39
|
221 => 'vendor'
|
40
40
|
}.freeze
|
41
41
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is part of PacketGen
|
3
5
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
7
|
# This program is published under MIT license.
|
6
8
|
|
7
|
-
# frozen_string_literal: true
|
8
|
-
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class Dot11
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is part of PacketGen
|
3
5
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
7
|
# This program is published under MIT license.
|
6
8
|
|
7
|
-
# frozen_string_literal: true
|
8
|
-
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class Dot11
|
@@ -21,16 +21,6 @@ module PacketGen
|
|
21
21
|
# @return [Array<Element>]
|
22
22
|
define_field :elements, ArrayOfElements
|
23
23
|
|
24
|
-
# @return [String]
|
25
|
-
#def inspect
|
26
|
-
# str = super
|
27
|
-
# str << Inspect.dashed_line('Dot11 Elements', 2)
|
28
|
-
# @elements.each do |el|
|
29
|
-
# str << Inspect.shift_level(2) << el.to_human << "\n"
|
30
|
-
# end
|
31
|
-
# str
|
32
|
-
#end
|
33
|
-
|
34
24
|
# Add an {Element} to header
|
35
25
|
# @param [Integer,String] type element type
|
36
26
|
# @param [Object] value element value
|
@@ -1,10 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is part of PacketGen
|
2
4
|
# See https://github.com/sdaubert/packetgen for more informations
|
3
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
6
|
# This program is published under MIT license.
|
5
7
|
|
6
|
-
# frozen_string_literal: true
|
7
|
-
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
# IEEE 802.1Q VLAN tagging
|
@@ -1,10 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is part of PacketGen
|
2
4
|
# See https://github.com/sdaubert/packetgen for more informations
|
3
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
6
|
# This program is published under MIT license.
|
5
7
|
|
6
|
-
# frozen_string_literal: true
|
7
|
-
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
# IEEE 802.1X / EAPOL
|
@@ -27,10 +27,10 @@ module PacketGen
|
|
27
27
|
|
28
28
|
# IEEE 802.1X packet types
|
29
29
|
TYPES = {
|
30
|
-
'EAP Packet'
|
31
|
-
'Start'
|
32
|
-
'Logoff'
|
33
|
-
'Key'
|
30
|
+
'EAP Packet' => 0,
|
31
|
+
'Start' => 1,
|
32
|
+
'Logoff' => 2,
|
33
|
+
'Key' => 3,
|
34
34
|
'Encap-ASF-Alert' => 4
|
35
35
|
}.freeze
|
36
36
|
|
@@ -45,20 +45,7 @@ module PacketGen
|
|
45
45
|
define_field :length, Types::Int16
|
46
46
|
# @!attribute body
|
47
47
|
# @return [Types::String,Header::Base]
|
48
|
-
define_field :body, Types::String
|
49
|
-
|
50
|
-
# Populate object from string
|
51
|
-
# @param [String] str
|
52
|
-
# @return [self]
|
53
|
-
def read(str)
|
54
|
-
return self if str.nil?
|
55
|
-
|
56
|
-
self[:version].read(str[0, 1])
|
57
|
-
self[:type].read(str[1, 1])
|
58
|
-
self[:length].read(str[2, 2])
|
59
|
-
self[:body].read(str[4, self.length])
|
60
|
-
self
|
61
|
-
end
|
48
|
+
define_field :body, Types::String, builder: ->(h, t) { t.new(length_from: h[:length]) }
|
62
49
|
|
63
50
|
# Get human readable type
|
64
51
|
# @return [String]
|
data/lib/packetgen/header/eap.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is part of PacketGen
|
2
4
|
# See https://github.com/sdaubert/packetgen for more informations
|
3
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
6
|
# This program is published under MIT license.
|
5
7
|
|
6
|
-
# frozen_string_literal: true
|
7
|
-
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
# Extensible Authentication Protocol (EAP),
|
@@ -58,25 +58,25 @@ module PacketGen
|
|
58
58
|
class EAP < Base
|
59
59
|
# EAP known codes
|
60
60
|
CODES = {
|
61
|
-
'Request'
|
62
|
-
'Response'
|
63
|
-
'Success'
|
64
|
-
'Failure'
|
61
|
+
'Request' => 1,
|
62
|
+
'Response' => 2,
|
63
|
+
'Success' => 3,
|
64
|
+
'Failure' => 4
|
65
65
|
}.freeze
|
66
66
|
|
67
67
|
# EAP known request/response types
|
68
68
|
TYPES = {
|
69
|
-
'Identity'
|
70
|
-
'Notification'
|
71
|
-
'Nak'
|
72
|
-
'MD5-Challenge'
|
73
|
-
'One Time Password'
|
69
|
+
'Identity' => 1,
|
70
|
+
'Notification' => 2,
|
71
|
+
'Nak' => 3,
|
72
|
+
'MD5-Challenge' => 4,
|
73
|
+
'One Time Password' => 5,
|
74
74
|
'Generic Token Card' => 6,
|
75
|
-
'EAP-TLS'
|
76
|
-
'EAP-TTLS'
|
77
|
-
'EAP-FAST'
|
78
|
-
'Expanded Types'
|
79
|
-
'Experimental Use'
|
75
|
+
'EAP-TLS' => 13,
|
76
|
+
'EAP-TTLS' => 21,
|
77
|
+
'EAP-FAST' => 43,
|
78
|
+
'Expanded Types' => 254,
|
79
|
+
'Experimental Use' => 255
|
80
80
|
}.freeze
|
81
81
|
|
82
82
|
# @!attribute code
|
@@ -95,7 +95,8 @@ module PacketGen
|
|
95
95
|
# This field is present only for Request or Response packets,
|
96
96
|
# with type different from Expanded Types (254).
|
97
97
|
# @return [Integer] 8-bit request or response type
|
98
|
-
define_field :type, Types::Int8Enum,
|
98
|
+
define_field :type, Types::Int8Enum,
|
99
|
+
enum: TYPES,
|
99
100
|
optional: ->(eap) { eap.type? }
|
100
101
|
|
101
102
|
# @!attribute vendor_id
|
@@ -131,22 +132,18 @@ module PacketGen
|
|
131
132
|
# may be determined
|
132
133
|
def read(str)
|
133
134
|
super str
|
134
|
-
return self unless self.
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
else
|
147
|
-
self
|
148
|
-
end
|
149
|
-
obj
|
135
|
+
return self unless self.instance_of?(EAP)
|
136
|
+
return self unless type?
|
137
|
+
|
138
|
+
case self.type
|
139
|
+
when 4
|
140
|
+
EAP::MD5.new.read(str)
|
141
|
+
when 13
|
142
|
+
EAP::TLS.new.read(str)
|
143
|
+
when 21
|
144
|
+
EAP::TTLS.new.read(str)
|
145
|
+
when 43
|
146
|
+
EAP::FAST.new.read(str)
|
150
147
|
else
|
151
148
|
self
|
152
149
|
end
|