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
data/lib/packetgen/types/enum.rb
DELETED
@@ -1,171 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
# This file is part of PacketGen
|
5
|
-
# See https://github.com/lemontree55/packetgen for more informations
|
6
|
-
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
7
|
-
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
8
|
-
# This program is published under MIT license.
|
9
|
-
|
10
|
-
module PacketGen
|
11
|
-
module Types
|
12
|
-
# @abstract Base enum class to handle binary integers with limited
|
13
|
-
# authorized values
|
14
|
-
# An {Enum} type is used to handle an {Int} field with limited
|
15
|
-
# and named values.
|
16
|
-
#
|
17
|
-
# == Simple example
|
18
|
-
# enum = Int8Enum.new('low' => 0, 'medium' => 1, 'high' => 2})
|
19
|
-
# In this example, +enum+ is a 8-bit field which may take one
|
20
|
-
# among three values: +low+, +medium+ or +high+:
|
21
|
-
# enum.value = 'high'
|
22
|
-
# enum.value # => 2
|
23
|
-
# enum.value = 1
|
24
|
-
# enum.value # => 1
|
25
|
-
# enum.to_human # => "medium"
|
26
|
-
# Setting an unknown value will raise an exception:
|
27
|
-
# enum.value = 4 # => raise!
|
28
|
-
# enum.value = 'unknown' # => raise!
|
29
|
-
# But {#read} will not raise when reading an outbound value. This
|
30
|
-
# to enable decoding (or forging) of bad packets.
|
31
|
-
# @since 2.1.3
|
32
|
-
# @author Sylvain Daubert
|
33
|
-
class Enum < Int
|
34
|
-
# @return [Hash]
|
35
|
-
attr_reader :enum
|
36
|
-
|
37
|
-
# @param [Hash] enum enumerated values. Default value is taken from
|
38
|
-
# first element unless given.
|
39
|
-
# @param [:little,:big,nil] endian
|
40
|
-
# @param [Integer,nil] width
|
41
|
-
# @param [Integer,nil] default default value
|
42
|
-
def initialize(enum, endian=nil, width=nil, default=nil)
|
43
|
-
default ||= enum[enum.keys.first]
|
44
|
-
super(nil, endian, width, default)
|
45
|
-
@enum = enum
|
46
|
-
end
|
47
|
-
|
48
|
-
# Setter for value attribute
|
49
|
-
# @param [#to_i, String,nil] value value as an Integer or as a String
|
50
|
-
# from enumration
|
51
|
-
# @return [Integer]
|
52
|
-
# @raise [ArgumentError] String value is unknown
|
53
|
-
def value=(value)
|
54
|
-
ival = case value
|
55
|
-
when NilClass
|
56
|
-
nil
|
57
|
-
when ::String
|
58
|
-
raise ArgumentError, "#{value.inspect} not in enumeration" unless @enum.key? value
|
59
|
-
|
60
|
-
@enum[value]
|
61
|
-
else
|
62
|
-
value.to_i
|
63
|
-
end
|
64
|
-
@value = ival
|
65
|
-
end
|
66
|
-
|
67
|
-
# To handle human API: set value from a String
|
68
|
-
alias from_human value=
|
69
|
-
|
70
|
-
# Get human readable value (enum name)
|
71
|
-
# @return [String]
|
72
|
-
def to_human
|
73
|
-
@enum.key(to_i) || "<unknown:#{@value}>"
|
74
|
-
end
|
75
|
-
|
76
|
-
def format_inspect
|
77
|
-
format_str % [to_human, to_i]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# Enumeration on one byte. See {Enum}.
|
82
|
-
# @author Sylvain Daubert
|
83
|
-
# @since 2.1.3
|
84
|
-
class Int8Enum < Enum
|
85
|
-
# @param [Integer] default
|
86
|
-
# @param [Hash] enum
|
87
|
-
def initialize(enum, default=nil)
|
88
|
-
super(enum, nil, 1, default)
|
89
|
-
@packstr = { nil => 'C' }
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Enumeration on 2-byte integer. See {Enum}.
|
94
|
-
# @author Sylvain Daubert
|
95
|
-
# @since 2.1.3
|
96
|
-
class Int16Enum < Enum
|
97
|
-
# @param [Hash] enum
|
98
|
-
# @param [:big, :little] endian
|
99
|
-
# @param [Integer,nil] default default value
|
100
|
-
def initialize(enum, endian=:big, default=nil)
|
101
|
-
super(enum, endian, 2, default)
|
102
|
-
@packstr = { big: 'n', little: 'v' }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
# Enumeration on big endian 2-byte integer. See {Enum}.
|
107
|
-
# @author Sylvain Daubert
|
108
|
-
# @since 2.1.3
|
109
|
-
class Int16beEnum < Int16Enum
|
110
|
-
undef endian=
|
111
|
-
|
112
|
-
# @param [Hash] enum
|
113
|
-
# @param [Integer,nil] default default value
|
114
|
-
def initialize(enum, default=nil)
|
115
|
-
super(enum, :big, default)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# Enumeration on big endian 2-byte integer. See {Enum}.
|
120
|
-
# @author Sylvain Daubert
|
121
|
-
# @since 2.1.3
|
122
|
-
class Int16leEnum < Int16Enum
|
123
|
-
undef endian=
|
124
|
-
|
125
|
-
# @param [Hash] enum
|
126
|
-
# @param [Integer,nil] default default value
|
127
|
-
def initialize(enum, default=nil)
|
128
|
-
super(enum, :little, default)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
# Enumeration on 4-byte integer. See {Enum}.
|
133
|
-
# @author Sylvain Daubert
|
134
|
-
# @since 2.1.3
|
135
|
-
class Int32Enum < Enum
|
136
|
-
# @param [Hash] enum
|
137
|
-
# @param [:big, :little] endian
|
138
|
-
# @param [Integer,nil] default default value
|
139
|
-
def initialize(enum, endian=:big, default=nil)
|
140
|
-
super(enum, endian, 4, default)
|
141
|
-
@packstr = { big: 'N', little: 'V' }
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
# Enumeration on big endian 4-byte integer. See {Enum}.
|
146
|
-
# @author Sylvain Daubert
|
147
|
-
# @since 2.1.3
|
148
|
-
class Int32beEnum < Int32Enum
|
149
|
-
undef endian=
|
150
|
-
|
151
|
-
# @param [Hash] enum
|
152
|
-
# @param [Integer,nil] default default value
|
153
|
-
def initialize(enum, default=nil)
|
154
|
-
super(enum, :big, default)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
# Enumeration on big endian 4-byte integer. See {Enum}.
|
159
|
-
# @author Sylvain Daubert
|
160
|
-
# @since 2.1.3
|
161
|
-
class Int32leEnum < Int32Enum
|
162
|
-
undef endian=
|
163
|
-
|
164
|
-
# @param [Hash] enum
|
165
|
-
# @param [Integer,nil] default default value
|
166
|
-
def initialize(enum, default=nil)
|
167
|
-
super(enum, :little, default)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# This file is part of PacketGen
|
4
|
-
# See https://github.com/lemontree55/packetgen for more informations
|
5
|
-
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
6
|
-
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
7
|
-
# This program is published under MIT license.
|
8
|
-
|
9
|
-
module PacketGen
|
10
|
-
module Types
|
11
|
-
# Mixin to define minimal API for a class to be embbeded as a field in
|
12
|
-
# {Fields} type.
|
13
|
-
#
|
14
|
-
# == Optional methods
|
15
|
-
# These methods may, optionally, be defined by fieldable types:
|
16
|
-
# * +from_human+ to load data from a human-readable string.
|
17
|
-
# @author Sylvain Daubert
|
18
|
-
# @since 3.1.6
|
19
|
-
module Fieldable
|
20
|
-
# Get type name
|
21
|
-
# @return [String]
|
22
|
-
def type_name
|
23
|
-
self.class.to_s.split('::').last
|
24
|
-
end
|
25
|
-
|
26
|
-
# rubocop:disable Lint/UselessMethodDefinition
|
27
|
-
# These methods are defined for documentation.
|
28
|
-
|
29
|
-
# Populate object from a binary string
|
30
|
-
# @param [String] str
|
31
|
-
# @return [Fields] self
|
32
|
-
# @abstract subclass should overload it.
|
33
|
-
def read(str)
|
34
|
-
super
|
35
|
-
end
|
36
|
-
|
37
|
-
# Return object as a binary string
|
38
|
-
# @return [String]
|
39
|
-
# @abstract subclass should overload it.
|
40
|
-
def to_s
|
41
|
-
super
|
42
|
-
end
|
43
|
-
|
44
|
-
# Size of object as binary string
|
45
|
-
# @return [Integer]
|
46
|
-
def sz
|
47
|
-
to_s.size
|
48
|
-
end
|
49
|
-
|
50
|
-
# Return a human-readbale string
|
51
|
-
# @return [String]
|
52
|
-
# @abstract subclass should overload it.
|
53
|
-
def to_human
|
54
|
-
super
|
55
|
-
end
|
56
|
-
|
57
|
-
# rubocop:enable Lint/UselessMethodDefinition
|
58
|
-
|
59
|
-
# Format object when inspecting a {Fields} object
|
60
|
-
# @return [String]
|
61
|
-
def format_inspect
|
62
|
-
to_human
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|