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.
- checksums.yaml +4 -4
- data/README.md +38 -22
- data/lib/packetgen/capture.rb +2 -2
- data/lib/packetgen/config.rb +0 -1
- data/lib/packetgen/deprecation.rb +14 -8
- data/lib/packetgen/header/arp.rb +17 -18
- data/lib/packetgen/header/asn1_base.rb +2 -1
- data/lib/packetgen/header/base.rb +42 -40
- data/lib/packetgen/header/bootp.rb +35 -37
- data/lib/packetgen/header/dhcp/option.rb +21 -21
- data/lib/packetgen/header/dhcp/options.rb +3 -3
- data/lib/packetgen/header/dhcp.rb +8 -9
- data/lib/packetgen/header/dhcpv6/duid.rb +16 -16
- data/lib/packetgen/header/dhcpv6/option.rb +83 -61
- data/lib/packetgen/header/dhcpv6/options.rb +4 -4
- data/lib/packetgen/header/dhcpv6/relay.rb +6 -5
- data/lib/packetgen/header/dhcpv6.rb +17 -18
- data/lib/packetgen/header/dns/name.rb +21 -16
- data/lib/packetgen/header/dns/opt.rb +5 -2
- data/lib/packetgen/header/dns/option.rb +14 -14
- data/lib/packetgen/header/dns/qdsection.rb +3 -3
- data/lib/packetgen/header/dns/question.rb +7 -8
- data/lib/packetgen/header/dns/rr.rb +56 -43
- data/lib/packetgen/header/dns/rrsection.rb +6 -6
- data/lib/packetgen/header/dns.rb +103 -90
- data/lib/packetgen/header/dot11/control.rb +12 -12
- data/lib/packetgen/header/dot11/data.rb +25 -24
- data/lib/packetgen/header/dot11/element.rb +4 -4
- data/lib/packetgen/header/dot11/management.rb +21 -18
- data/lib/packetgen/header/dot11/sub_mngt.rb +40 -53
- data/lib/packetgen/header/dot11.rb +117 -122
- data/lib/packetgen/header/dot1q.rb +12 -13
- data/lib/packetgen/header/dot1x.rb +13 -13
- data/lib/packetgen/header/eap/fast.rb +4 -4
- data/lib/packetgen/header/eap/md5.rb +16 -8
- data/lib/packetgen/header/eap/tls.rb +18 -19
- data/lib/packetgen/header/eap/ttls.rb +22 -21
- data/lib/packetgen/header/eap.rb +73 -48
- data/lib/packetgen/header/eth.rb +41 -27
- data/lib/packetgen/header/gre.rb +33 -11
- data/lib/packetgen/header/http/headers.rb +7 -6
- data/lib/packetgen/header/http/request.rb +38 -29
- data/lib/packetgen/header/http/response.rb +35 -27
- data/lib/packetgen/header/http/verbs.rb +1 -3
- data/lib/packetgen/header/icmp.rb +14 -14
- data/lib/packetgen/header/icmpv6.rb +10 -9
- data/lib/packetgen/header/igmp.rb +26 -15
- data/lib/packetgen/header/igmpv3/group_record.rb +18 -13
- data/lib/packetgen/header/igmpv3/mq.rb +16 -18
- data/lib/packetgen/header/igmpv3/mr.rb +5 -5
- data/lib/packetgen/header/igmpv3.rb +12 -11
- data/lib/packetgen/header/ip/addr.rb +19 -15
- data/lib/packetgen/header/ip/option.rb +47 -36
- data/lib/packetgen/header/ip/options.rb +1 -1
- data/lib/packetgen/header/ip.rb +77 -95
- data/lib/packetgen/header/ipv6/addr.rb +28 -27
- data/lib/packetgen/header/ipv6/extension.rb +13 -11
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +32 -13
- data/lib/packetgen/header/ipv6.rb +42 -35
- data/lib/packetgen/header/llc.rb +28 -21
- data/lib/packetgen/header/mdns.rb +10 -3
- data/lib/packetgen/header/mld.rb +15 -13
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +17 -12
- data/lib/packetgen/header/mldv2/mlq.rb +22 -24
- data/lib/packetgen/header/mldv2/mlr.rb +8 -8
- data/lib/packetgen/header/mldv2.rb +1 -1
- data/lib/packetgen/header/ospfv2/db_description.rb +17 -18
- data/lib/packetgen/header/ospfv2/hello.rb +18 -17
- data/lib/packetgen/header/ospfv2/ls_ack.rb +6 -7
- data/lib/packetgen/header/ospfv2/ls_request.rb +14 -13
- data/lib/packetgen/header/ospfv2/ls_update.rb +9 -9
- data/lib/packetgen/header/ospfv2/lsa.rb +79 -60
- data/lib/packetgen/header/ospfv2/lsa_header.rb +12 -11
- data/lib/packetgen/header/ospfv2.rb +49 -46
- data/lib/packetgen/header/ospfv3/db_description.rb +20 -22
- data/lib/packetgen/header/ospfv3/hello.rb +17 -16
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +22 -20
- data/lib/packetgen/header/ospfv3/ls_ack.rb +7 -8
- data/lib/packetgen/header/ospfv3/ls_request.rb +18 -18
- data/lib/packetgen/header/ospfv3/ls_update.rb +10 -10
- data/lib/packetgen/header/ospfv3/lsa.rb +62 -51
- data/lib/packetgen/header/ospfv3/lsa_header.rb +12 -11
- data/lib/packetgen/header/ospfv3.rb +54 -52
- data/lib/packetgen/header/sctp/chunk.rb +80 -56
- data/lib/packetgen/header/sctp/error.rb +174 -202
- data/lib/packetgen/header/sctp/padded32.rb +3 -3
- data/lib/packetgen/header/sctp/parameter.rb +89 -136
- data/lib/packetgen/header/sctp.rb +19 -8
- data/lib/packetgen/header/snmp.rb +108 -7
- data/lib/packetgen/header/tcp/option.rb +52 -39
- data/lib/packetgen/header/tcp/options.rb +13 -5
- data/lib/packetgen/header/tcp.rb +83 -65
- data/lib/packetgen/header/tftp.rb +31 -25
- data/lib/packetgen/header/udp.rb +21 -19
- data/lib/packetgen/header.rb +23 -18
- data/lib/packetgen/headerable.rb +21 -5
- data/lib/packetgen/inspect.rb +3 -8
- data/lib/packetgen/packet.rb +146 -71
- data/lib/packetgen/pcap.rb +15 -4
- data/lib/packetgen/pcapng/block.rb +20 -18
- data/lib/packetgen/pcapng/epb.rb +13 -15
- data/lib/packetgen/pcapng/file.rb +44 -111
- data/lib/packetgen/pcapng/idb.rb +11 -12
- data/lib/packetgen/pcapng/shb.rb +15 -16
- data/lib/packetgen/pcapng/spb.rb +9 -11
- data/lib/packetgen/pcapng/unknown_block.rb +6 -17
- data/lib/packetgen/pcapng.rb +6 -4
- data/lib/packetgen/pcaprub_wrapper.rb +17 -1
- data/lib/packetgen/proto.rb +5 -1
- data/lib/packetgen/unknown_packet.rb +5 -5
- data/lib/packetgen/utils/arp_spoofer.rb +18 -19
- data/lib/packetgen/utils.rb +4 -3
- data/lib/packetgen/version.rb +1 -1
- data/lib/packetgen.rb +12 -5
- metadata +29 -38
- data/lib/packetgen/types/abstract_tlv.rb +0 -278
- data/lib/packetgen/types/array.rb +0 -287
- data/lib/packetgen/types/cstring.rb +0 -109
- data/lib/packetgen/types/enum.rb +0 -171
- data/lib/packetgen/types/fieldable.rb +0 -66
- data/lib/packetgen/types/fields.rb +0 -622
- data/lib/packetgen/types/int.rb +0 -473
- data/lib/packetgen/types/int_string.rb +0 -102
- data/lib/packetgen/types/length_from.rb +0 -54
- data/lib/packetgen/types/oui.rb +0 -52
- data/lib/packetgen/types/string.rb +0 -97
- data/lib/packetgen/types/tlv.rb +0 -161
- data/lib/packetgen/types.rb +0 -26
@@ -16,45 +16,48 @@ module PacketGen
|
|
16
16
|
# (management frame).
|
17
17
|
#
|
18
18
|
# A IEEE 802.11 management header consists of:
|
19
|
-
# * a {#frame_ctrl} (
|
20
|
-
# * a {#id}/duration (
|
19
|
+
# * a {#frame_ctrl} (+BinStruct::Int16+),
|
20
|
+
# * a {#id}/duration (+BinStruct::Int16le+),
|
21
21
|
# * a {#mac1} ({Eth::MacAddr}).
|
22
22
|
# * a {#mac2} ({Eth::MacAddr}),
|
23
23
|
# * a {#mac3} ({Eth::MacAddr}),
|
24
|
-
# * a {#sequence_ctrl} (
|
25
|
-
# * a {#body} (a
|
26
|
-
# * and a Frame check sequence ({#fcs}, of type
|
24
|
+
# * a {#sequence_ctrl} (+BinStruct::Int16+),
|
25
|
+
# * a {#body} (a +BinStruct::String+ or another {Headerable} class),
|
26
|
+
# * and a Frame check sequence ({#fcs}, of type +BinStruct::Int32le+).
|
27
27
|
#
|
28
28
|
# Management frames should be constructed with more headers from
|
29
|
-
# {SubMngt} subclasses.
|
29
|
+
# {SubMngt} subclasses. Some frames also need to have {Element}.
|
30
30
|
#
|
31
|
-
#
|
31
|
+
# @example Build a {DeAuth} frame:
|
32
32
|
# PacketGen.gen('Dot11::Management').add('Dot11::DeAuth')
|
33
33
|
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
# pkt.dot11_beacon.
|
40
|
-
# pkt.dot11_beacon.
|
34
|
+
# @example a {Beacon} frame with elements:
|
35
|
+
# bssid = '00:01:02:03:04:05'
|
36
|
+
# pkt = PacketGen.gen('Dot11::Management', mac1: 'ff:ff:ff:ff:ff:ff', mac2: bssid, mac3: bssid)
|
37
|
+
# .add('Dot11::Beacon')
|
38
|
+
# # Directly add elements to Beacon
|
39
|
+
# pkt.dot11_beacon.elements << { type: 'SSID', value: "SSIDSSID" }
|
40
|
+
# pkt.dot11_beacon.elements << { type: 'Rates', value: "\x82\x84\x8b\x96\x12\x24\x48\x6c" }
|
41
|
+
# # Add elements to beacon through management header
|
42
|
+
# pkt.dot11_management.add_element(type: 'DSset', value: "\x06")
|
43
|
+
# pkt.dot11_management.add_element(type: 'TIM', value: "\x00\x01\x00\x00")
|
41
44
|
# @author Sylvain Daubert
|
42
45
|
class Management < Dot11
|
43
46
|
# @param [Hash] options
|
44
47
|
# @see Base#initialize
|
45
48
|
def initialize(options={})
|
46
49
|
super({ type: 0 }.merge!(options))
|
47
|
-
@
|
48
|
-
|
50
|
+
@applicable_attributes -= %i[mac4 qos_ctrl ht_ctrl]
|
51
|
+
define_applicable_attributes
|
49
52
|
end
|
50
53
|
|
51
|
-
# Add an {Element}
|
54
|
+
# Add an {Element} to header in body (for example, a {Dot11::Beacon})
|
52
55
|
# @param [Integer,String] type element type
|
53
56
|
# @param [Object] value element value
|
54
57
|
# @return [self]
|
55
58
|
# @since 2.1.3
|
56
59
|
def add_element(type:, value:)
|
57
|
-
raise FormatError, 'Before adding an Element, you have to add a Dot11::SubMngt subclass instance' unless self[:body].is_a?
|
60
|
+
raise FormatError, 'Before adding an Element, you have to add a Dot11::SubMngt subclass instance' unless self[:body].is_a?(SubMngt)
|
58
61
|
|
59
62
|
self[:body].elements << { type: type, value: value }
|
60
63
|
self
|
@@ -19,22 +19,9 @@ module PacketGen
|
|
19
19
|
# may be accessed through {#elements}.
|
20
20
|
# @author Sylvain Daubert
|
21
21
|
class SubMngt < Base
|
22
|
+
# Elements of submngt header
|
22
23
|
# @return [Array<Element>]
|
23
|
-
|
24
|
-
|
25
|
-
# Add an {Element} to header
|
26
|
-
# @param [Integer,String] type element type
|
27
|
-
# @param [Object] value element value
|
28
|
-
# @return [self]
|
29
|
-
# @since 2.1.3
|
30
|
-
# @since 3.1.1 #elements in no more an Array but an {ArrayOfElements}
|
31
|
-
# @deprecated Prefer use of +submngt.element << {type: type, value: value}+
|
32
|
-
def add_element(type:, value:)
|
33
|
-
Deprecation.deprecated(self.class, __method__, 'elements')
|
34
|
-
element = Element.new(type: type, value: value)
|
35
|
-
self.elements << element
|
36
|
-
self
|
37
|
-
end
|
24
|
+
define_attr :elements, ArrayOfElements
|
38
25
|
end
|
39
26
|
|
40
27
|
# IEEE 802.11 Association Request frame
|
@@ -42,16 +29,16 @@ module PacketGen
|
|
42
29
|
# Specialize {Dot11::Management} with +subtype+ set to 0.
|
43
30
|
#
|
44
31
|
# Add fields:
|
45
|
-
# * {#cap} (
|
46
|
-
# * {#listen_interval} (
|
32
|
+
# * {#cap} (+BinStruct::Int16le+),
|
33
|
+
# * {#listen_interval} (+BinStruct::Int16le+).
|
47
34
|
# @author Sylvain Daubert
|
48
35
|
class AssoReq < SubMngt
|
49
36
|
# @!attribute cap
|
50
37
|
# @return [Integer] 16-bit capabillities word
|
51
|
-
|
38
|
+
define_attr_before :elements, :cap, BinStruct::Int16le
|
52
39
|
# @!attribute listen_interval
|
53
40
|
# @return [Integer] 16-bit listen interval value
|
54
|
-
|
41
|
+
define_attr_before :elements, :listen_interval, BinStruct::Int16le, default: 0x00c8
|
55
42
|
end
|
56
43
|
Header.add_class AssoReq
|
57
44
|
Management.bind AssoReq, type: 0, subtype: 0
|
@@ -61,20 +48,20 @@ module PacketGen
|
|
61
48
|
# Specialize {Dot11::Management} with +subtype+ set to 1.
|
62
49
|
#
|
63
50
|
# Add fields:
|
64
|
-
# * {#cap} (
|
65
|
-
# * {#status} (
|
66
|
-
# * {#aid} (
|
51
|
+
# * {#cap} (+BinStruct::Int16le+),
|
52
|
+
# * {#status} (+BinStruct::Int16le+),
|
53
|
+
# * {#aid} (+BinStruct::Int16le+).
|
67
54
|
# @author Sylvain Daubert
|
68
55
|
class AssoResp < SubMngt
|
69
56
|
# @!attribute cap
|
70
57
|
# @return [Integer] 16-bit capabillities word
|
71
|
-
|
58
|
+
define_attr_before :elements, :cap, BinStruct::Int16le
|
72
59
|
# @!attribute status
|
73
60
|
# @return [Integer] 16-bit status word
|
74
|
-
|
61
|
+
define_attr_before :elements, :status, BinStruct::Int16le
|
75
62
|
# @!attribute aid
|
76
63
|
# @return [Integer] 16-bit AID word
|
77
|
-
|
64
|
+
define_attr_before :elements, :aid, BinStruct::Int16le
|
78
65
|
end
|
79
66
|
Header.add_class AssoResp
|
80
67
|
Management.bind AssoResp, type: 0, subtype: 1
|
@@ -84,14 +71,14 @@ module PacketGen
|
|
84
71
|
# Specialize {Dot11::Management} with +subtype+ set to 2.
|
85
72
|
#
|
86
73
|
# Add fields:
|
87
|
-
# * {#cap} (
|
88
|
-
# * {#listen_interval} (
|
74
|
+
# * {#cap} (+BinStruct::Int16le+),
|
75
|
+
# * {#listen_interval} (+BinStruct::Int16le+),
|
89
76
|
# * {#current_ap} ({Eth::MacAddr}).
|
90
77
|
# @author Sylvain Daubert
|
91
78
|
class ReAssoReq < AssoReq
|
92
79
|
# @!attribute current_ap
|
93
80
|
# @return [Eth::MAcAddr]
|
94
|
-
|
81
|
+
define_attr_before :elements, :current_ap, Eth::MacAddr
|
95
82
|
end
|
96
83
|
Header.add_class ReAssoReq
|
97
84
|
Management.bind ReAssoReq, type: 0, subtype: 2
|
@@ -101,9 +88,9 @@ module PacketGen
|
|
101
88
|
# Specialize {Dot11::Management} with +subtype+ set to 3.
|
102
89
|
#
|
103
90
|
# Add fields:
|
104
|
-
# * {#cap} (
|
105
|
-
# * {#status} (
|
106
|
-
# * {#aid} (
|
91
|
+
# * {#cap} (+BinStruct::Int16le+),
|
92
|
+
# * {#status} (+BinStruct::Int16le+),
|
93
|
+
# * {#aid} (+BinStruct::Int16le+).
|
107
94
|
# @author Sylvain Daubert
|
108
95
|
class ReAssoResp < AssoResp
|
109
96
|
end
|
@@ -126,20 +113,20 @@ module PacketGen
|
|
126
113
|
# Specialize {Dot11::Management} with +subtype+ set to 5.
|
127
114
|
#
|
128
115
|
# Add fields:
|
129
|
-
# * {#timestamp} (
|
130
|
-
# * {#beacon_interval} (
|
131
|
-
# * {#cap} (
|
116
|
+
# * {#timestamp} (+BinStruct::Int64le+),
|
117
|
+
# * {#beacon_interval} (+BinStruct::Int16le+),
|
118
|
+
# * {#cap} (+BinStruct::Int16le+).
|
132
119
|
# @author Sylvain Daubert
|
133
120
|
class ProbeResp < SubMngt
|
134
121
|
# @!attribute timestamp
|
135
122
|
# @return [Integer] 64-bit timestamp
|
136
|
-
|
123
|
+
define_attr_before :elements, :timestamp, BinStruct::Int64le
|
137
124
|
# @!attribute beacon_interval
|
138
125
|
# @return [Integer] 16-bit beacon interval value
|
139
|
-
|
126
|
+
define_attr_before :elements, :beacon_interval, BinStruct::Int16le, default: 0x0064
|
140
127
|
# @!attribute cap
|
141
128
|
# @return [Integer] 16-bit capabillities word
|
142
|
-
|
129
|
+
define_attr_before :elements, :cap, BinStruct::Int16le
|
143
130
|
end
|
144
131
|
Header.add_class ProbeResp
|
145
132
|
Management.bind ProbeResp, type: 0, subtype: 5
|
@@ -149,20 +136,20 @@ module PacketGen
|
|
149
136
|
# Specialize {Dot11::Management} with +subtype+ set to 8.
|
150
137
|
#
|
151
138
|
# Add fields:
|
152
|
-
# * {#timestamp} (
|
153
|
-
# * {#interval} (
|
154
|
-
# * {#cap} (
|
139
|
+
# * {#timestamp} (+BinStruct::Int64le+),
|
140
|
+
# * {#interval} (+BinStruct::Int16le+),
|
141
|
+
# * {#cap} (+BinStruct::Int16le+).
|
155
142
|
# @author Sylvain Daubert
|
156
143
|
class Beacon < SubMngt
|
157
144
|
# @!attribute timestamp
|
158
145
|
# @return [Integer] 64-bit timestamp
|
159
|
-
|
146
|
+
define_attr_before :elements, :timestamp, BinStruct::Int64le
|
160
147
|
# @!attribute interval
|
161
148
|
# @return [Integer] 16-bit interval value
|
162
|
-
|
149
|
+
define_attr_before :elements, :interval, BinStruct::Int16le, default: 0x64
|
163
150
|
# @!attribute cap
|
164
151
|
# @return [Integer] 16-bit capabillities word
|
165
|
-
|
152
|
+
define_attr_before :elements, :cap, BinStruct::Int16le
|
166
153
|
end
|
167
154
|
Header.add_class Beacon
|
168
155
|
Management.bind Beacon, type: 0, subtype: 8
|
@@ -182,12 +169,12 @@ module PacketGen
|
|
182
169
|
# Specialize {Dot11::Management} with +subtype+ set to 10.
|
183
170
|
#
|
184
171
|
# Add fields:
|
185
|
-
# * {#reason} (
|
172
|
+
# * {#reason} (+BinStruct::Int16le+).
|
186
173
|
# @author Sylvain Daubert
|
187
174
|
class Disas < SubMngt
|
188
175
|
# @!attribute reason
|
189
176
|
# @return [Integer] 16-bit reason value
|
190
|
-
|
177
|
+
define_attr_before :elements, :reason, BinStruct::Int16le
|
191
178
|
end
|
192
179
|
Header.add_class Disas
|
193
180
|
Management.bind Disas, type: 0, subtype: 10
|
@@ -197,20 +184,20 @@ module PacketGen
|
|
197
184
|
# Specialize {Dot11::Management} with +subtype+ set to 11.
|
198
185
|
#
|
199
186
|
# Add fields:
|
200
|
-
# * {#algo} (
|
201
|
-
# * {#seqnum} (
|
202
|
-
# * {#status} (
|
187
|
+
# * {#algo} (+BinStruct::Int16le+),
|
188
|
+
# * {#seqnum} (+BinStruct::Int16le+),
|
189
|
+
# * {#status} (+BinStruct::Int16le+).
|
203
190
|
# @author Sylvain Daubert
|
204
191
|
class Auth < SubMngt
|
205
192
|
# @!attribute algo
|
206
193
|
# @return [Integer] 16-bit algo value
|
207
|
-
|
194
|
+
define_attr_before :elements, :algo, BinStruct::Int16le
|
208
195
|
# @!attribute seqnum
|
209
196
|
# @return [Integer] 16-bit seqnum value
|
210
|
-
|
197
|
+
define_attr_before :elements, :seqnum, BinStruct::Int16le
|
211
198
|
# @!attribute status
|
212
199
|
# @return [Integer] 16-bit status word
|
213
|
-
|
200
|
+
define_attr_before :elements, :status, BinStruct::Int16le
|
214
201
|
end
|
215
202
|
Header.add_class Auth
|
216
203
|
Management.bind Auth, type: 0, subtype: 11
|
@@ -220,12 +207,12 @@ module PacketGen
|
|
220
207
|
# Specialize {Dot11::Management} with +subtype+ set to 12.
|
221
208
|
#
|
222
209
|
# Add fields:
|
223
|
-
# * {#reason} (
|
210
|
+
# * {#reason} (+BinStruct::Int16le+).
|
224
211
|
# @author Sylvain Daubert
|
225
212
|
class DeAuth < SubMngt
|
226
213
|
# @!attribute reason
|
227
214
|
# @return [Integer] 16-bit reason value
|
228
|
-
|
215
|
+
define_attr_before :elements, :reason, BinStruct::Int16le
|
229
216
|
end
|
230
217
|
Header.add_class DeAuth
|
231
218
|
Management.bind DeAuth, type: 0, subtype: 12
|