packetgen 2.6.0 → 2.7.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/.gitignore +1 -0
- data/.rubocop.yml +28 -0
- data/Rakefile +6 -6
- data/bin/pgconsole +6 -6
- data/lib/packetgen.rb +4 -3
- data/lib/packetgen/capture.rb +5 -7
- data/lib/packetgen/config.rb +3 -3
- data/lib/packetgen/deprecation.rb +17 -0
- data/lib/packetgen/header.rb +40 -38
- data/lib/packetgen/header/arp.rb +46 -31
- data/lib/packetgen/header/asn1_base.rb +8 -8
- data/lib/packetgen/header/base.rb +108 -36
- data/lib/packetgen/header/bootp.rb +28 -19
- data/lib/packetgen/header/crypto.rb +6 -8
- data/lib/packetgen/header/dhcp.rb +4 -5
- data/lib/packetgen/header/dhcp/option.rb +46 -34
- data/lib/packetgen/header/dhcp/options.rb +0 -1
- data/lib/packetgen/header/dhcpv6.rb +10 -10
- data/lib/packetgen/header/dhcpv6/duid.rb +2 -3
- data/lib/packetgen/header/dhcpv6/option.rb +16 -21
- data/lib/packetgen/header/dhcpv6/relay.rb +6 -4
- data/lib/packetgen/header/dns.rb +13 -11
- data/lib/packetgen/header/dns/name.rb +4 -6
- data/lib/packetgen/header/dns/opt.rb +31 -31
- data/lib/packetgen/header/dns/option.rb +0 -2
- data/lib/packetgen/header/dns/qdsection.rb +1 -2
- data/lib/packetgen/header/dns/question.rb +19 -13
- data/lib/packetgen/header/dns/rr.rb +11 -14
- data/lib/packetgen/header/dns/rrsection.rb +5 -7
- data/lib/packetgen/header/dot11.rb +45 -29
- data/lib/packetgen/header/dot11/control.rb +3 -5
- data/lib/packetgen/header/dot11/data.rb +34 -6
- data/lib/packetgen/header/dot11/element.rb +0 -1
- data/lib/packetgen/header/dot11/management.rb +9 -5
- data/lib/packetgen/header/dot11/sub_mngt.rb +13 -14
- data/lib/packetgen/header/dot1q.rb +2 -2
- data/lib/packetgen/header/dot1x.rb +3 -4
- data/lib/packetgen/header/eap.rb +62 -53
- data/lib/packetgen/header/eap/fast.rb +0 -1
- data/lib/packetgen/header/eap/md5.rb +1 -2
- data/lib/packetgen/header/eap/tls.rb +9 -10
- data/lib/packetgen/header/eap/ttls.rb +9 -10
- data/lib/packetgen/header/esp.rb +33 -33
- data/lib/packetgen/header/eth.rb +11 -8
- data/lib/packetgen/header/gre.rb +5 -6
- data/lib/packetgen/header/http/headers.rb +11 -14
- data/lib/packetgen/header/http/request.rb +20 -20
- data/lib/packetgen/header/http/response.rb +16 -18
- data/lib/packetgen/header/http/verbs.rb +5 -5
- data/lib/packetgen/header/icmp.rb +1 -3
- data/lib/packetgen/header/icmpv6.rb +1 -3
- data/lib/packetgen/header/igmp.rb +5 -6
- data/lib/packetgen/header/igmpv3.rb +5 -9
- data/lib/packetgen/header/igmpv3/group_record.rb +4 -5
- data/lib/packetgen/header/igmpv3/mq.rb +2 -2
- data/lib/packetgen/header/igmpv3/mr.rb +4 -3
- data/lib/packetgen/header/ike.rb +33 -8
- data/lib/packetgen/header/ike/auth.rb +4 -6
- data/lib/packetgen/header/ike/cert.rb +0 -2
- data/lib/packetgen/header/ike/certreq.rb +1 -3
- data/lib/packetgen/header/ike/id.rb +1 -3
- data/lib/packetgen/header/ike/ke.rb +0 -2
- data/lib/packetgen/header/ike/nonce.rb +0 -2
- data/lib/packetgen/header/ike/notify.rb +22 -24
- data/lib/packetgen/header/ike/payload.rb +198 -199
- data/lib/packetgen/header/ike/sa.rb +21 -30
- data/lib/packetgen/header/ike/sk.rb +16 -17
- data/lib/packetgen/header/ike/ts.rb +22 -24
- data/lib/packetgen/header/ike/vendor_id.rb +0 -2
- data/lib/packetgen/header/ip.rb +30 -23
- data/lib/packetgen/header/ip/addr.rb +5 -6
- data/lib/packetgen/header/ip/option.rb +11 -15
- data/lib/packetgen/header/ip/options.rb +1 -2
- data/lib/packetgen/header/ipv6.rb +27 -12
- data/lib/packetgen/header/ipv6/addr.rb +2 -2
- data/lib/packetgen/header/ipv6/extension.rb +1 -1
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +11 -11
- data/lib/packetgen/header/llc.rb +4 -3
- data/lib/packetgen/header/mdns.rb +11 -5
- data/lib/packetgen/header/mld.rb +4 -4
- data/lib/packetgen/header/mldv2.rb +4 -3
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +3 -4
- data/lib/packetgen/header/mldv2/mlq.rb +3 -4
- data/lib/packetgen/header/mldv2/mlr.rb +4 -3
- data/lib/packetgen/header/netbios.rb +18 -5
- data/lib/packetgen/header/ospfv2.rb +6 -7
- data/lib/packetgen/header/ospfv2/db_description.rb +3 -4
- data/lib/packetgen/header/ospfv2/hello.rb +2 -3
- data/lib/packetgen/header/ospfv2/ls_ack.rb +2 -3
- data/lib/packetgen/header/ospfv2/ls_request.rb +2 -3
- data/lib/packetgen/header/ospfv2/ls_update.rb +5 -6
- data/lib/packetgen/header/ospfv2/lsa.rb +13 -14
- data/lib/packetgen/header/ospfv2/lsa_header.rb +4 -5
- data/lib/packetgen/header/ospfv3.rb +3 -4
- data/lib/packetgen/header/ospfv3/db_description.rb +3 -5
- data/lib/packetgen/header/ospfv3/hello.rb +2 -3
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +7 -8
- data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -3
- data/lib/packetgen/header/ospfv3/ls_request.rb +2 -3
- data/lib/packetgen/header/ospfv3/ls_update.rb +5 -6
- data/lib/packetgen/header/ospfv3/lsa.rb +10 -11
- data/lib/packetgen/header/ospfv3/lsa_header.rb +3 -4
- data/lib/packetgen/header/snmp.rb +45 -32
- data/lib/packetgen/header/tcp.rb +13 -9
- data/lib/packetgen/header/tcp/option.rb +16 -11
- data/lib/packetgen/header/tcp/options.rb +3 -4
- data/lib/packetgen/header/tftp.rb +15 -17
- data/lib/packetgen/header/udp.rb +10 -4
- data/lib/packetgen/inspect.rb +7 -9
- data/lib/packetgen/packet.rb +44 -22
- data/lib/packetgen/pcapng.rb +1 -5
- data/lib/packetgen/pcapng/block.rb +17 -11
- data/lib/packetgen/pcapng/epb.rb +6 -11
- data/lib/packetgen/pcapng/file.rb +37 -44
- data/lib/packetgen/pcapng/idb.rb +17 -22
- data/lib/packetgen/pcapng/shb.rb +7 -10
- data/lib/packetgen/pcapng/spb.rb +21 -17
- data/lib/packetgen/pcapng/unknown_block.rb +17 -13
- data/lib/packetgen/proto.rb +1 -2
- data/lib/packetgen/types/array.rb +119 -34
- data/lib/packetgen/types/cstring.rb +1 -5
- data/lib/packetgen/types/enum.rb +8 -10
- data/lib/packetgen/types/fields.rb +34 -28
- data/lib/packetgen/types/int.rb +11 -13
- data/lib/packetgen/types/int_string.rb +6 -8
- data/lib/packetgen/types/oui.rb +3 -6
- data/lib/packetgen/types/string.rb +4 -6
- data/lib/packetgen/types/tlv.rb +11 -14
- data/lib/packetgen/utils.rb +15 -23
- data/lib/packetgen/utils/arp_spoofer.rb +12 -18
- data/lib/packetgen/version.rb +1 -1
- data/packetgen.gemspec +9 -8
- metadata +19 -17
@@ -7,7 +7,6 @@
|
|
7
7
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
|
-
|
11
10
|
# This class supports OSPFv3 (RFC 5340).
|
12
11
|
# A OSPFv3 header has the following format:
|
13
12
|
#
|
@@ -63,11 +62,11 @@ module PacketGen
|
|
63
62
|
# * {OSPFv3::LSUpdate},
|
64
63
|
# * or {OSPFv3::LSAck}.
|
65
64
|
# @author Sylvain Daubert
|
65
|
+
# @since 2.5.0
|
66
66
|
class OSPFv3 < Base
|
67
|
-
|
68
67
|
# IP protocol number for OSPF
|
69
68
|
IP_PROTOCOL = OSPFv2::IP_PROTOCOL
|
70
|
-
|
69
|
+
|
71
70
|
# OSPF packet types
|
72
71
|
TYPES = OSPFv2::TYPES
|
73
72
|
|
@@ -202,7 +201,7 @@ module PacketGen
|
|
202
201
|
end
|
203
202
|
|
204
203
|
self.add_class OSPFv3
|
205
|
-
IPv6.
|
204
|
+
IPv6.bind OSPFv3, next: OSPFv3::IP_PROTOCOL
|
206
205
|
end
|
207
206
|
end
|
208
207
|
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handles {OSPFv3 OSPFv3} DB description packets payload.
|
13
12
|
# The DB description payload has the following format:
|
14
13
|
# 0 1 2 3
|
@@ -65,7 +64,6 @@ module PacketGen
|
|
65
64
|
# dbd.lsas << existing_lsa.to_lsa_header
|
66
65
|
# @author Sylvain Daubert
|
67
66
|
class DbDescription < Base
|
68
|
-
|
69
67
|
# @!attribute reserved
|
70
68
|
# 8-bit zero field before {#options} one
|
71
69
|
# @return [Integer]
|
@@ -100,15 +98,15 @@ module PacketGen
|
|
100
98
|
define_field :sequence_number, Types::Int32
|
101
99
|
alias seqnum sequence_number
|
102
100
|
alias seqnum= sequence_number=
|
103
|
-
|
101
|
+
|
104
102
|
# @!attribute lsas
|
105
103
|
# Array of LSA headers
|
106
104
|
# @return [ArrayOfLSAHeader]
|
107
|
-
define_field :lsas, ArrayOfLSA, builder: ->(
|
105
|
+
define_field :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
|
108
106
|
end
|
109
107
|
end
|
110
108
|
|
111
109
|
self.add_class OSPFv3::DbDescription
|
112
|
-
OSPFv3.
|
110
|
+
OSPFv3.bind OSPFv3::DbDescription, type: OSPFv3::TYPES['DB_DESCRIPTION']
|
113
111
|
end
|
114
112
|
end
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handles {OSPFv3 OSPFv3} HELLO packets payload. The HELLO
|
13
12
|
# payload has the following format:
|
14
13
|
# 0 1 2 3
|
@@ -97,8 +96,8 @@ module PacketGen
|
|
97
96
|
define_field :neighbors, IP::ArrayOfAddr
|
98
97
|
end
|
99
98
|
end
|
100
|
-
|
99
|
+
|
101
100
|
self.add_class OSPFv3::Hello
|
102
|
-
OSPFv3.
|
101
|
+
OSPFv3.bind OSPFv3::Hello, type: OSPFv3::TYPES['HELLO']
|
103
102
|
end
|
104
103
|
end
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# Array of 32-bit words.
|
13
12
|
# @author Sylvain Daubert
|
14
13
|
class ArrayOfInt32 < Types::Array
|
@@ -64,13 +63,13 @@ module PacketGen
|
|
64
63
|
# @return [String]
|
65
64
|
def to_human
|
66
65
|
ary = prefix.map(&:to_i).map do |v|
|
67
|
-
"#{((v>>16) & 0xffff).to_s(16)}:#{(v & 0xffff).to_s(16)}"
|
66
|
+
"#{((v >> 16) & 0xffff).to_s(16)}:#{(v & 0xffff).to_s(16)}"
|
68
67
|
end
|
69
68
|
pfx = ary.join(':')
|
70
|
-
pfx += '::' if prefix.size < (128/32)
|
71
|
-
"#{IPAddr.new(pfx)
|
69
|
+
pfx += '::' if prefix.size < (128 / 32)
|
70
|
+
"#{IPAddr.new(pfx)}/#{length}"
|
72
71
|
end
|
73
|
-
|
72
|
+
|
74
73
|
# Set prefix from a human-readable string. This method cannot set
|
75
74
|
# {#options} field.
|
76
75
|
# @param [String] str
|
@@ -80,10 +79,10 @@ module PacketGen
|
|
80
79
|
len = (len || 128).to_i
|
81
80
|
addr = IPv6::Addr.new.from_human(pfx)
|
82
81
|
ary_size = (len + 31) / 32
|
83
|
-
ary = addr.to_a[0...ary_size*2]
|
82
|
+
ary = addr.to_a[0...ary_size * 2]
|
84
83
|
self.prefix.clear
|
85
84
|
ary.each_with_index do |v, i|
|
86
|
-
if i
|
85
|
+
if i.even?
|
87
86
|
self.prefix << v
|
88
87
|
else
|
89
88
|
self.prefix.last.value = (self.prefix.last.to_i << 16) | v.to_i
|
@@ -92,7 +91,7 @@ module PacketGen
|
|
92
91
|
self.length = len
|
93
92
|
end
|
94
93
|
end
|
95
|
-
|
94
|
+
|
96
95
|
# Array of {IPv6Prefix}
|
97
96
|
# @author Sylvain Daubert
|
98
97
|
class ArrayOfIPv6Prefix < Types::Array
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handles {OSPFv3 OSPFv3} Link State Acknownledgment packets
|
13
12
|
# payload. The LSAck payload has the following format:
|
14
13
|
# 0 1 2 3
|
@@ -41,11 +40,11 @@ module PacketGen
|
|
41
40
|
# Array of {LSA LSAs}
|
42
41
|
# @return [ArrayOfLSA]
|
43
42
|
define_field :lsas, ArrayOfLSA,
|
44
|
-
builder: ->(
|
43
|
+
builder: ->(_h, t) { t.new(only_headers: true) }
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
48
47
|
self.add_class OSPFv3::LSAck
|
49
|
-
OSPFv3.
|
48
|
+
OSPFv3.bind OSPFv3::LSAck, type: OSPFv3::TYPES['LS_ACK']
|
50
49
|
end
|
51
50
|
end
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handle LSA requests, as used in {LSRequest} payloads.
|
13
12
|
# The LSA request payload has the following format:
|
14
13
|
# 0 1 2 3
|
@@ -57,7 +56,7 @@ module PacketGen
|
|
57
56
|
"LSR<#{human_type},#{link_state_id},#{advertising_router}>"
|
58
57
|
end
|
59
58
|
end
|
60
|
-
|
59
|
+
|
61
60
|
# This class defines a specialized {Types::Array array} to handle series
|
62
61
|
# of {LSR LSRs}.
|
63
62
|
# @author Sylvain Daubert
|
@@ -103,6 +102,6 @@ module PacketGen
|
|
103
102
|
end
|
104
103
|
|
105
104
|
self.add_class OSPFv3::LSRequest
|
106
|
-
OSPFv3.
|
105
|
+
OSPFv3.bind OSPFv3::LSRequest, type: OSPFv3::TYPES['LS_REQUEST']
|
107
106
|
end
|
108
107
|
end
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handles {OSPFv3 OSPFv3} Link State Update packets
|
13
12
|
# payload. The LSU payload has the following format:
|
14
13
|
# 0 1 2 3
|
@@ -54,21 +53,21 @@ module PacketGen
|
|
54
53
|
# @return [ArrayOfLSA]
|
55
54
|
define_field :lsas, ArrayOfLSA,
|
56
55
|
builder: ->(h, t) { t.new(counter: h[:lsas_count]) }
|
57
|
-
|
56
|
+
|
58
57
|
# Calculate checksums of all LSAs
|
59
58
|
# @return [void]
|
60
59
|
def calc_checksum
|
61
|
-
lsas.each
|
60
|
+
lsas.each(&:calc_checksum)
|
62
61
|
end
|
63
|
-
|
62
|
+
|
64
63
|
# Calculate length of all LSAs
|
65
64
|
def calc_length
|
66
|
-
lsas.each
|
65
|
+
lsas.each(&:calc_length)
|
67
66
|
end
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
71
70
|
self.add_class OSPFv3::LSUpdate
|
72
|
-
OSPFv3.
|
71
|
+
OSPFv3.bind OSPFv3::LSUpdate, type: OSPFv3::TYPES['LS_UPDATE']
|
73
72
|
end
|
74
73
|
end
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handles links in a {LSARouter OSPFv3 LSA router payload}.
|
13
12
|
# @author Sylvain Daubert
|
14
13
|
class Link < Types::Fields
|
@@ -53,7 +52,7 @@ module PacketGen
|
|
53
52
|
# LSA body
|
54
53
|
# @return [String]
|
55
54
|
define_field :body, Types::String,
|
56
|
-
builder: ->(h,t) { t.new(length_from: ->
|
55
|
+
builder: ->(h, t) { t.new(length_from: -> { h.length - 20 }) }
|
57
56
|
end
|
58
57
|
|
59
58
|
# This class handles OSPFv3 LSA Router payloads.
|
@@ -185,7 +184,7 @@ module PacketGen
|
|
185
184
|
# @author Sylvain Daubert
|
186
185
|
class ArrayOfLSA < Types::Array
|
187
186
|
set_of LSA
|
188
|
-
|
187
|
+
|
189
188
|
# @param [Hash] options
|
190
189
|
# @option options [Types::Int] counter Int object used as a counter for this set
|
191
190
|
# @option options [Boolean] only_headers if +true+, only {LSAHeader LSAHeaders}
|
@@ -201,17 +200,17 @@ module PacketGen
|
|
201
200
|
def read(str)
|
202
201
|
clear
|
203
202
|
return self if str.nil?
|
204
|
-
return self if @counter
|
203
|
+
return self if @counter && @counter.to_i.zero?
|
205
204
|
force_binary str
|
206
|
-
|
205
|
+
until str.empty?
|
207
206
|
lsa = LSAHeader.new.read(str)
|
208
|
-
|
207
|
+
unless @only_headers
|
209
208
|
klass = get_lsa_class_by_human_type(lsa.human_type)
|
210
209
|
lsa = klass.new.read(str[0...lsa.length])
|
211
210
|
end
|
212
211
|
self.push lsa
|
213
212
|
str.slice!(0, lsa.sz)
|
214
|
-
break if @counter
|
213
|
+
break if @counter && (self.size == @counter.to_i)
|
215
214
|
end
|
216
215
|
self
|
217
216
|
end
|
@@ -219,10 +218,10 @@ module PacketGen
|
|
219
218
|
private
|
220
219
|
|
221
220
|
def record_from_hash(hsh)
|
222
|
-
unless hsh.
|
223
|
-
raise ArgumentError,
|
221
|
+
unless hsh.key? :type
|
222
|
+
raise ArgumentError, 'hash should have :type key'
|
224
223
|
end
|
225
|
-
|
224
|
+
|
226
225
|
klass = if @only_headers
|
227
226
|
LSAHeader
|
228
227
|
else
|
@@ -239,7 +238,7 @@ module PacketGen
|
|
239
238
|
end
|
240
239
|
|
241
240
|
def get_lsa_class_by_human_type(htype)
|
242
|
-
klassname = "LSA#{htype.to_s.
|
241
|
+
klassname = "LSA#{htype.to_s.delete('-')}"
|
243
242
|
if OSPFv3.const_defined? klassname
|
244
243
|
OSPFv3.const_get klassname
|
245
244
|
else
|
@@ -8,7 +8,6 @@
|
|
8
8
|
module PacketGen
|
9
9
|
module Header
|
10
10
|
class OSPFv3
|
11
|
-
|
12
11
|
# This class handles {OSPFv3 OSPFv3} LSA header. A LSA header has the
|
13
12
|
# following format:
|
14
13
|
# 0 1 2 3
|
@@ -40,7 +39,7 @@ module PacketGen
|
|
40
39
|
'NSSA' => 0x2007,
|
41
40
|
'Link' => 0x0008,
|
42
41
|
'Intra-Area-Prefix' => 0x2009
|
43
|
-
}
|
42
|
+
}.freeze
|
44
43
|
|
45
44
|
# @!attribute age
|
46
45
|
# The time in seconds since the LSA was originated.
|
@@ -73,7 +72,7 @@ module PacketGen
|
|
73
72
|
# Length of the LSA, including the header.
|
74
73
|
# @return [Integer]
|
75
74
|
define_field :length, Types::Int16
|
76
|
-
|
75
|
+
|
77
76
|
# Compute and set Fletcher-16 checksum on LSA
|
78
77
|
# @return [Integer]
|
79
78
|
def calc_checksum
|
@@ -87,7 +86,7 @@ module PacketGen
|
|
87
86
|
end
|
88
87
|
c0 %= 255
|
89
88
|
c1 %= 255
|
90
|
-
|
89
|
+
|
91
90
|
x = ((sz - 16 - 1) * c0 - c1) % 255
|
92
91
|
x += 255 if x <= 0
|
93
92
|
y = 255 * 2 - c0 - x
|
@@ -8,7 +8,6 @@
|
|
8
8
|
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
|
-
|
12
11
|
# Dissect error
|
13
12
|
class DissectError < ParseError; end
|
14
13
|
|
@@ -18,7 +17,6 @@ module PacketGen
|
|
18
17
|
# @author Sylvain Daubert
|
19
18
|
# @since 2.0.0
|
20
19
|
class SNMP < ASN1Base
|
21
|
-
|
22
20
|
# Agents listen to this port
|
23
21
|
UDP_PORT1 = 161
|
24
22
|
# Configuration sinks listen to this port
|
@@ -34,26 +32,27 @@ module PacketGen
|
|
34
32
|
PDU_TRAPv2 = 7
|
35
33
|
PDU_REPORT = 8
|
36
34
|
|
37
|
-
ERRORS = {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
35
|
+
ERRORS = {
|
36
|
+
'no_error' => 0,
|
37
|
+
'too_big' => 1,
|
38
|
+
'no_such_name' => 2,
|
39
|
+
'bad_value' => 3,
|
40
|
+
'read_only' => 4,
|
41
|
+
'generic_error' => 5,
|
42
|
+
'no_access' => 6,
|
43
|
+
'wrong_type' => 7,
|
44
|
+
'wrong_length' => 8,
|
45
|
+
'wrong_encoding' => 9,
|
46
|
+
'wrong_value' => 10,
|
47
|
+
'no_creation' => 11,
|
48
|
+
'inconsistent_value' => 12,
|
49
|
+
'ressource_unavailable' => 13,
|
50
|
+
'commit_failed' => 14,
|
51
|
+
'undo_failed' => 15,
|
52
|
+
'authorization_error' => 16,
|
53
|
+
'not_writable' => 17,
|
54
|
+
'inconsistent_name' => 18
|
55
|
+
}.freeze
|
57
56
|
|
58
57
|
# Class to handle SNMP VarBind
|
59
58
|
# VarBind ::= SEQUENCE {
|
@@ -76,10 +75,10 @@ module PacketGen
|
|
76
75
|
|
77
76
|
# Class to handle GetRequest PDU
|
78
77
|
# GetRequest-PDU ::= [0] IMPLICIT PDU
|
79
|
-
#
|
78
|
+
#
|
80
79
|
# PDU ::= SEQUENCE {
|
81
80
|
# request-id INTEGER (-214783648..214783647),
|
82
|
-
#
|
81
|
+
#
|
83
82
|
# error-status -- sometimes ignored
|
84
83
|
# INTEGER {
|
85
84
|
# noError(0),
|
@@ -102,10 +101,10 @@ module PacketGen
|
|
102
101
|
# notWritable(17),
|
103
102
|
# inconsistentName(18)
|
104
103
|
# },
|
105
|
-
#
|
104
|
+
#
|
106
105
|
# error-index -- sometimes ignored
|
107
106
|
# INTEGER (0..max-bindings),
|
108
|
-
#
|
107
|
+
#
|
109
108
|
# variable-bindings -- values are sometimes ignored
|
110
109
|
# VarBindList
|
111
110
|
# }
|
@@ -177,7 +176,7 @@ module PacketGen
|
|
177
176
|
|
178
177
|
# Class to handle Bulk PDU
|
179
178
|
# GetBulkRequest-PDU ::= [5] IMPLICIT BulkPDU
|
180
|
-
#
|
179
|
+
#
|
181
180
|
# BulkPDU ::= -- must be identical in
|
182
181
|
# SEQUENCE { -- structure to PDU
|
183
182
|
# request-id INTEGER (-214783648..214783647),
|
@@ -259,9 +258,8 @@ module PacketGen
|
|
259
258
|
def initialize(options={})
|
260
259
|
super
|
261
260
|
data.chosen = options[:chosen_pdu] if options[:chosen_pdu]
|
262
|
-
|
263
|
-
|
264
|
-
end
|
261
|
+
return unless options[:pdu]
|
262
|
+
data.root.value[data.chosen] = data.root.chosen_value.class.new(options[:pdu])
|
265
263
|
end
|
266
264
|
|
267
265
|
# accessor to data payload
|
@@ -298,10 +296,25 @@ module PacketGen
|
|
298
296
|
str
|
299
297
|
end
|
300
298
|
end
|
299
|
+
|
300
|
+
# @api private
|
301
|
+
# @note This method is used internally by PacketGen and should not be
|
302
|
+
# directly called
|
303
|
+
# @param [Packet] packet
|
304
|
+
# @return [void]
|
305
|
+
# @since 2.7.0 Set UDP sport according to bindings, only if sport is 0.
|
306
|
+
# Needed by new bind API.
|
307
|
+
def added_to_packet(packet)
|
308
|
+
return unless packet.is? 'UDP'
|
309
|
+
return unless packet.udp.sport.zero?
|
310
|
+
packet.udp.sport = packet.udp.dport
|
311
|
+
end
|
301
312
|
end
|
302
313
|
|
303
314
|
self.add_class SNMP
|
304
|
-
UDP.
|
305
|
-
UDP.
|
315
|
+
UDP.bind SNMP, dport: SNMP::UDP_PORT1
|
316
|
+
UDP.bind SNMP, sport: SNMP::UDP_PORT1
|
317
|
+
UDP.bind SNMP, dport: SNMP::UDP_PORT2
|
318
|
+
UDP.bind SNMP, sport: SNMP::UDP_PORT2
|
306
319
|
end
|
307
320
|
end
|