packetgen 3.3.1 → 3.3.2
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/LICENSE +1 -0
- data/README.md +7 -7
- data/lib/packetgen/capture.rb +2 -1
- data/lib/packetgen/config.rb +2 -1
- data/lib/packetgen/header/arp.rb +2 -1
- data/lib/packetgen/header/asn1_base.rb +2 -1
- data/lib/packetgen/header/base.rb +4 -3
- data/lib/packetgen/header/bootp.rb +2 -1
- data/lib/packetgen/header/dhcp/option.rb +2 -1
- data/lib/packetgen/header/dhcp/options.rb +2 -1
- data/lib/packetgen/header/dhcp.rb +2 -1
- data/lib/packetgen/header/dhcpv6/duid.rb +2 -1
- data/lib/packetgen/header/dhcpv6/option.rb +2 -1
- data/lib/packetgen/header/dhcpv6/options.rb +2 -1
- data/lib/packetgen/header/dhcpv6/relay.rb +2 -1
- data/lib/packetgen/header/dhcpv6.rb +2 -1
- data/lib/packetgen/header/dns/name.rb +2 -1
- data/lib/packetgen/header/dns/opt.rb +3 -2
- data/lib/packetgen/header/dns/option.rb +3 -2
- data/lib/packetgen/header/dns/qdsection.rb +2 -1
- data/lib/packetgen/header/dns/question.rb +2 -1
- data/lib/packetgen/header/dns/rr.rb +2 -1
- data/lib/packetgen/header/dns/rrsection.rb +2 -1
- data/lib/packetgen/header/dns.rb +3 -2
- data/lib/packetgen/header/dot11/control.rb +2 -1
- data/lib/packetgen/header/dot11/data.rb +4 -3
- data/lib/packetgen/header/dot11/element.rb +2 -1
- data/lib/packetgen/header/dot11/management.rb +2 -1
- data/lib/packetgen/header/dot11/sub_mngt.rb +2 -1
- data/lib/packetgen/header/dot11.rb +2 -1
- data/lib/packetgen/header/dot1q.rb +2 -1
- data/lib/packetgen/header/dot1x.rb +2 -1
- data/lib/packetgen/header/eap/fast.rb +2 -1
- data/lib/packetgen/header/eap/md5.rb +2 -1
- data/lib/packetgen/header/eap/tls.rb +3 -2
- data/lib/packetgen/header/eap/ttls.rb +3 -2
- data/lib/packetgen/header/eap.rb +3 -2
- data/lib/packetgen/header/eth.rb +3 -2
- data/lib/packetgen/header/gre.rb +2 -1
- data/lib/packetgen/header/http/headers.rb +4 -3
- data/lib/packetgen/header/http/request.rb +2 -1
- data/lib/packetgen/header/http/response.rb +2 -1
- data/lib/packetgen/header/http/verbs.rb +2 -1
- data/lib/packetgen/header/http.rb +2 -1
- data/lib/packetgen/header/icmp.rb +2 -1
- data/lib/packetgen/header/icmpv6.rb +2 -1
- data/lib/packetgen/header/igmp.rb +2 -1
- data/lib/packetgen/header/igmpv3/group_record.rb +2 -1
- data/lib/packetgen/header/igmpv3/mq.rb +2 -1
- data/lib/packetgen/header/igmpv3/mr.rb +2 -1
- data/lib/packetgen/header/igmpv3.rb +2 -1
- data/lib/packetgen/header/ip/addr.rb +2 -1
- data/lib/packetgen/header/ip/option.rb +3 -2
- data/lib/packetgen/header/ip/options.rb +2 -1
- data/lib/packetgen/header/ip.rb +3 -2
- data/lib/packetgen/header/ipv6/addr.rb +2 -1
- data/lib/packetgen/header/ipv6/extension.rb +2 -1
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +2 -1
- data/lib/packetgen/header/ipv6.rb +2 -1
- data/lib/packetgen/header/llc.rb +2 -1
- data/lib/packetgen/header/mdns.rb +2 -1
- data/lib/packetgen/header/mld.rb +2 -1
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +2 -1
- data/lib/packetgen/header/mldv2/mlq.rb +2 -1
- data/lib/packetgen/header/mldv2/mlr.rb +2 -1
- data/lib/packetgen/header/mldv2.rb +2 -1
- data/lib/packetgen/header/ospfv2/db_description.rb +2 -1
- data/lib/packetgen/header/ospfv2/hello.rb +2 -1
- data/lib/packetgen/header/ospfv2/ls_ack.rb +2 -1
- data/lib/packetgen/header/ospfv2/ls_request.rb +2 -1
- data/lib/packetgen/header/ospfv2/ls_update.rb +2 -1
- data/lib/packetgen/header/ospfv2/lsa.rb +2 -1
- data/lib/packetgen/header/ospfv2/lsa_header.rb +2 -1
- data/lib/packetgen/header/ospfv2.rb +2 -1
- data/lib/packetgen/header/ospfv3/db_description.rb +2 -1
- data/lib/packetgen/header/ospfv3/hello.rb +2 -1
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +2 -1
- data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -1
- data/lib/packetgen/header/ospfv3/ls_request.rb +2 -1
- data/lib/packetgen/header/ospfv3/ls_update.rb +2 -1
- data/lib/packetgen/header/ospfv3/lsa.rb +2 -1
- data/lib/packetgen/header/ospfv3/lsa_header.rb +2 -1
- data/lib/packetgen/header/ospfv3.rb +2 -1
- data/lib/packetgen/header/sctp/chunk.rb +547 -0
- data/lib/packetgen/header/sctp/error.rb +347 -0
- data/lib/packetgen/header/sctp/padded32.rb +34 -0
- data/lib/packetgen/header/sctp/parameter.rb +229 -0
- data/lib/packetgen/header/sctp.rb +96 -0
- data/lib/packetgen/header/snmp.rb +3 -2
- data/lib/packetgen/header/tcp/option.rb +2 -1
- data/lib/packetgen/header/tcp/options.rb +2 -1
- data/lib/packetgen/header/tcp.rb +3 -2
- data/lib/packetgen/header/tftp.rb +2 -1
- data/lib/packetgen/header/udp.rb +2 -1
- data/lib/packetgen/header.rb +4 -2
- data/lib/packetgen/headerable.rb +2 -1
- data/lib/packetgen/inject.rb +2 -1
- data/lib/packetgen/inspect.rb +2 -1
- data/lib/packetgen/packet.rb +4 -3
- data/lib/packetgen/pcap.rb +2 -1
- data/lib/packetgen/pcapng/block.rb +3 -2
- data/lib/packetgen/pcapng/epb.rb +2 -1
- data/lib/packetgen/pcapng/file.rb +2 -1
- data/lib/packetgen/pcapng/idb.rb +2 -1
- data/lib/packetgen/pcapng/shb.rb +2 -1
- data/lib/packetgen/pcapng/spb.rb +2 -1
- data/lib/packetgen/pcapng/unknown_block.rb +2 -1
- data/lib/packetgen/pcapng.rb +2 -1
- data/lib/packetgen/pcaprub_wrapper.rb +2 -1
- data/lib/packetgen/proto.rb +2 -1
- data/lib/packetgen/types/abstract_tlv.rb +53 -15
- data/lib/packetgen/types/array.rb +20 -3
- data/lib/packetgen/types/cstring.rb +2 -1
- data/lib/packetgen/types/enum.rb +3 -2
- data/lib/packetgen/types/fieldable.rb +3 -2
- data/lib/packetgen/types/fields.rb +8 -7
- data/lib/packetgen/types/int.rb +2 -1
- data/lib/packetgen/types/int_string.rb +2 -1
- data/lib/packetgen/types/length_from.rb +2 -1
- data/lib/packetgen/types/oui.rb +2 -1
- data/lib/packetgen/types/string.rb +2 -1
- data/lib/packetgen/types/tlv.rb +2 -1
- data/lib/packetgen/types.rb +2 -1
- data/lib/packetgen/unknown_packet.rb +3 -2
- data/lib/packetgen/utils/arp_spoofer.rb +4 -3
- data/lib/packetgen/utils.rb +2 -1
- data/lib/packetgen/version.rb +3 -2
- data/lib/packetgen.rb +2 -1
- metadata +22 -11
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
require 'digest/crc32c'
|
|
9
|
+
|
|
10
|
+
module PacketGen
|
|
11
|
+
module Header
|
|
12
|
+
# SCTP header ({https://tools.ietf.org/html/rfc9260 RFC 9260})
|
|
13
|
+
# 0 1 2 3
|
|
14
|
+
# 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
15
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
16
|
+
# | Source Port Number | Destination Port Number |
|
|
17
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
18
|
+
# | Verification Tag |
|
|
19
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
20
|
+
# | Checksum |
|
|
21
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
22
|
+
# | Chunk #1 |
|
|
23
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
24
|
+
# | ... |
|
|
25
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
26
|
+
# | Chunk #n |
|
|
27
|
+
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
28
|
+
#
|
|
29
|
+
# @author Sylvain Daubert
|
|
30
|
+
# @since 3.4.0
|
|
31
|
+
class SCTP < Base; end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
require_relative 'sctp/chunk'
|
|
36
|
+
require_relative 'udp'
|
|
37
|
+
|
|
38
|
+
module PacketGen
|
|
39
|
+
module Header
|
|
40
|
+
class SCTP < Base
|
|
41
|
+
# IP protocol number for SCTP
|
|
42
|
+
IP_PROTOCOL = 132
|
|
43
|
+
# Port number for SCTP over TCP (RFC 6951)
|
|
44
|
+
UDP_PORT = 9899
|
|
45
|
+
|
|
46
|
+
# @!attribute sport
|
|
47
|
+
# 16-bit TCP source port
|
|
48
|
+
# @return [Integer]
|
|
49
|
+
define_field :sport, Types::Int16
|
|
50
|
+
# @!attribute dport
|
|
51
|
+
# 16-bit TCP destination port
|
|
52
|
+
# @return [Integer]
|
|
53
|
+
define_field :dport, Types::Int16
|
|
54
|
+
# @!attribute verification_tag
|
|
55
|
+
# 32-bit verification tag
|
|
56
|
+
# @return [Integer]
|
|
57
|
+
define_field :verification_tag, Types::Int32
|
|
58
|
+
# @!attribute checksum
|
|
59
|
+
# 32-bit TCP checksum
|
|
60
|
+
# @return [Integer]
|
|
61
|
+
define_field :checksum, Types::Int32le
|
|
62
|
+
# @!attribute chunks
|
|
63
|
+
# List of chunks this packet transports
|
|
64
|
+
# @return [ArrayOfChunk]
|
|
65
|
+
define_field :chunks, ArrayOfChunk
|
|
66
|
+
|
|
67
|
+
# Compute SCTP checksum
|
|
68
|
+
def calc_checksum
|
|
69
|
+
self.checksum = 0
|
|
70
|
+
crc32c = Digest::CRC32c.new
|
|
71
|
+
crc32c << to_s
|
|
72
|
+
self.checksum = crc32c.checksum
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Compute SCTP chunks length
|
|
76
|
+
def calc_length
|
|
77
|
+
self.chunks.each(&:calc_length)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# @return [String]
|
|
81
|
+
def inspect
|
|
82
|
+
super do |attr|
|
|
83
|
+
next unless attr == :chunks
|
|
84
|
+
|
|
85
|
+
chunks.map(&:inspect).join
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
self.add_class SCTP
|
|
91
|
+
|
|
92
|
+
IP.bind SCTP, protocol: SCTP::IP_PROTOCOL
|
|
93
|
+
IPv6.bind SCTP, next: SCTP::IP_PROTOCOL
|
|
94
|
+
UDP.bind SCTP, dport: SCTP::UDP_PORT
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
9
10
|
module PacketGen
|
|
@@ -13,7 +14,7 @@ module PacketGen
|
|
|
13
14
|
|
|
14
15
|
# Simple Network Management Protocol (SNMP)
|
|
15
16
|
#
|
|
16
|
-
# See https://github.com/
|
|
17
|
+
# See https://github.com/lemontree55/packetgen/wiki/SNMP
|
|
17
18
|
# @author Sylvain Daubert
|
|
18
19
|
# @since 2.0.0
|
|
19
20
|
class SNMP < ASN1Base
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
require_relative 'option'
|
data/lib/packetgen/header/tcp.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
|
@@ -233,7 +234,7 @@ module PacketGen
|
|
|
233
234
|
def flags2string
|
|
234
235
|
flags = +''
|
|
235
236
|
%w[ns cwr ece urg ack psh rst syn fin].each do |fl|
|
|
236
|
-
flags << (send("flag_#{fl}?") ? fl[0].upcase : '.')
|
|
237
|
+
flags << (send(:"flag_#{fl}?") ? fl[0].upcase : '.')
|
|
237
238
|
end
|
|
238
239
|
|
|
239
240
|
flags
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/header/udp.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/header.rb
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
9
10
|
module PacketGen
|
|
@@ -91,8 +92,9 @@ require_relative 'header/arp'
|
|
|
91
92
|
require_relative 'header/ipv6'
|
|
92
93
|
require_relative 'header/icmpv6'
|
|
93
94
|
require_relative 'header/gre'
|
|
94
|
-
require_relative 'header/
|
|
95
|
+
require_relative 'header/sctp'
|
|
95
96
|
require_relative 'header/tcp'
|
|
97
|
+
require_relative 'header/udp'
|
|
96
98
|
require_relative 'header/eap'
|
|
97
99
|
require_relative 'header/dns'
|
|
98
100
|
require_relative 'header/asn1_base'
|
data/lib/packetgen/headerable.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/inject.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
require_relative 'pcaprub_wrapper'
|
|
8
9
|
|
data/lib/packetgen/inspect.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/packet.rb
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
@@ -422,9 +423,9 @@ module PacketGen
|
|
|
422
423
|
return header unless arg.is_a? Hash
|
|
423
424
|
|
|
424
425
|
arg.each do |key, value|
|
|
425
|
-
raise ArgumentError, "unknown #{key} attribute for #{klass}" unless header.respond_to?
|
|
426
|
+
raise ArgumentError, "unknown #{key} attribute for #{klass}" unless header.respond_to?(:"#{key}=")
|
|
426
427
|
|
|
427
|
-
header.send
|
|
428
|
+
header.send(:"#{key}=", value)
|
|
428
429
|
end
|
|
429
430
|
|
|
430
431
|
header
|
data/lib/packetgen/pcap.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
require_relative 'pcaprub_wrapper'
|
|
8
9
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
|
@@ -65,7 +66,7 @@ module PacketGen
|
|
|
65
66
|
raise ArgumentError, "unknown endianness for #{self.class}" unless %i[little big].include?(endian)
|
|
66
67
|
|
|
67
68
|
@endian = endian
|
|
68
|
-
@fields.
|
|
69
|
+
@fields.each_value { |v| v.endian = endian if v.is_a?(Types::Int) }
|
|
69
70
|
endian
|
|
70
71
|
end
|
|
71
72
|
|
data/lib/packetgen/pcapng/epb.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/pcapng/idb.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/pcapng/shb.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/pcapng/spb.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
data/lib/packetgen/pcapng.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
require 'stringio'
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
require 'pcaprub'
|
|
8
9
|
|
data/lib/packetgen/proto.rb
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
9
10
|
require 'socket'
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
9
10
|
module PacketGen
|
|
@@ -71,6 +72,8 @@ module PacketGen
|
|
|
71
72
|
# @private
|
|
72
73
|
attr_accessor :field_in_length
|
|
73
74
|
|
|
75
|
+
# rubocop:disable Metrics/ParameterLists
|
|
76
|
+
|
|
74
77
|
# Generate a TLV class
|
|
75
78
|
# @param [Class] type_class Class to use for +type+
|
|
76
79
|
# @param [Class] length_class Class to use for +length+
|
|
@@ -105,6 +108,7 @@ module PacketGen
|
|
|
105
108
|
|
|
106
109
|
klass
|
|
107
110
|
end
|
|
111
|
+
# rubocop:enable Metrics/ParameterLists
|
|
108
112
|
|
|
109
113
|
# @!attribute type
|
|
110
114
|
# @abstract Type attribute for real TLV class
|
|
@@ -118,13 +122,22 @@ module PacketGen
|
|
|
118
122
|
|
|
119
123
|
# @abstract Should only be called on real TLV classes, created by {.create}.
|
|
120
124
|
# Set enum hash for {#type} field.
|
|
121
|
-
# @param [Hash] hsh enum hash
|
|
125
|
+
# @param [Hash{String, Symbol => Integer}] hsh enum hash
|
|
122
126
|
# @return [void]
|
|
123
127
|
def define_type_enum(hsh)
|
|
124
128
|
field_defs[:type][:enum].clear
|
|
125
129
|
field_defs[:type][:enum].merge!(hsh)
|
|
126
130
|
end
|
|
127
131
|
|
|
132
|
+
# @abstract Should only be called on real TLV classes, created by {.create}.
|
|
133
|
+
# Set default value for {#type} field.
|
|
134
|
+
# @param [Integer,String,Symbol,nil] default default value from +hsh+ for type
|
|
135
|
+
# @return [void]
|
|
136
|
+
# @since 3.4.0
|
|
137
|
+
def define_type_default(default)
|
|
138
|
+
field_defs[:type][:default] = default
|
|
139
|
+
end
|
|
140
|
+
|
|
128
141
|
private
|
|
129
142
|
|
|
130
143
|
def check_field_in_length(field_in_length)
|
|
@@ -157,6 +170,16 @@ module PacketGen
|
|
|
157
170
|
end
|
|
158
171
|
end
|
|
159
172
|
|
|
173
|
+
# @!attribute type
|
|
174
|
+
# @abstract Type attribute
|
|
175
|
+
# @return [Integer]
|
|
176
|
+
# @!attribute length
|
|
177
|
+
# @abstract Length
|
|
178
|
+
# @return [Integer]
|
|
179
|
+
# @!attribute value
|
|
180
|
+
# @abstract Value attribute
|
|
181
|
+
# @return [Object]
|
|
182
|
+
|
|
160
183
|
# @abstract Should only be called on real TLV classes, created by {.create}.
|
|
161
184
|
# @param [Hash] options
|
|
162
185
|
# @option options [Integer] :type
|
|
@@ -172,13 +195,16 @@ module PacketGen
|
|
|
172
195
|
super
|
|
173
196
|
# used #value= defined below, which set length if needed
|
|
174
197
|
self.value = options[:value] if options[:value]
|
|
198
|
+
calc_length unless options.key?(:length)
|
|
175
199
|
end
|
|
176
200
|
|
|
177
201
|
# @abstract Should only be called on real TLV class instances.
|
|
178
202
|
# Populate object from a binary string
|
|
179
|
-
# @param [String] str
|
|
203
|
+
# @param [String,nil] str
|
|
180
204
|
# @return [Fields] self
|
|
181
205
|
def read(str)
|
|
206
|
+
return self if str.nil?
|
|
207
|
+
|
|
182
208
|
idx = 0
|
|
183
209
|
fields.each do |field_name|
|
|
184
210
|
field = self[field_name]
|
|
@@ -192,20 +218,18 @@ module PacketGen
|
|
|
192
218
|
|
|
193
219
|
# @abstract Should only be called on real TLV class instances.
|
|
194
220
|
# Set +value+. May set +length+ if value is a {Types::String}.
|
|
195
|
-
# @param [
|
|
196
|
-
# @return [
|
|
221
|
+
# @param [Object] val
|
|
222
|
+
# @return [Object]
|
|
223
|
+
# @since 3.4.0 Base on field's +#from_human+ method
|
|
197
224
|
def value=(val)
|
|
198
|
-
self[:value].
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
fil.each_char do |field_type|
|
|
205
|
-
length += self[FIELD_TYPES[field_type]].sz
|
|
225
|
+
if val.is_a?(self[:value].class)
|
|
226
|
+
self[:value] = val
|
|
227
|
+
elsif self[:value].respond_to?(:from_human)
|
|
228
|
+
self[:value].from_human(val)
|
|
229
|
+
else
|
|
230
|
+
self[:value].read(val)
|
|
206
231
|
end
|
|
207
|
-
|
|
208
|
-
|
|
232
|
+
calc_length
|
|
209
233
|
val
|
|
210
234
|
end
|
|
211
235
|
|
|
@@ -223,6 +247,20 @@ module PacketGen
|
|
|
223
247
|
'type:%s,length:%u,value:%s' % [human_type, length, my_value]
|
|
224
248
|
end
|
|
225
249
|
|
|
250
|
+
# Calculate length
|
|
251
|
+
# @return [void]
|
|
252
|
+
# @since 3.4.0
|
|
253
|
+
def calc_length
|
|
254
|
+
fil = @field_in_length
|
|
255
|
+
fil = 'TLV' if @header_in_length
|
|
256
|
+
|
|
257
|
+
length = 0
|
|
258
|
+
fil.each_char do |field_type|
|
|
259
|
+
length += self[FIELD_TYPES[field_type]].sz
|
|
260
|
+
end
|
|
261
|
+
self.length = length
|
|
262
|
+
end
|
|
263
|
+
|
|
226
264
|
private
|
|
227
265
|
|
|
228
266
|
def real_length
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
require 'forwardable'
|
|
@@ -225,8 +226,8 @@ module PacketGen
|
|
|
225
226
|
klass == obj_klass ? obj : klass.new(hsh)
|
|
226
227
|
end
|
|
227
228
|
|
|
228
|
-
def real_type(
|
|
229
|
-
|
|
229
|
+
def real_type(_obj)
|
|
230
|
+
self.class.set_of_klass
|
|
230
231
|
end
|
|
231
232
|
|
|
232
233
|
def create_object_from_str(str)
|
|
@@ -242,28 +243,44 @@ module PacketGen
|
|
|
242
243
|
end
|
|
243
244
|
end
|
|
244
245
|
|
|
246
|
+
# @private
|
|
247
|
+
module ArrayOfIntMixin
|
|
248
|
+
def read_from_array(ary)
|
|
249
|
+
return self if ary.empty?
|
|
250
|
+
|
|
251
|
+
ary.each do |i|
|
|
252
|
+
self << self.class.set_of_klass.new(i)
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
245
257
|
# Specialized array to handle serie of {Int8}.
|
|
246
258
|
class ArrayOfInt8 < Array
|
|
259
|
+
include ArrayOfIntMixin
|
|
247
260
|
set_of Int8
|
|
248
261
|
end
|
|
249
262
|
|
|
250
263
|
# Specialized array to handle serie of {Int16}.
|
|
251
264
|
class ArrayOfInt16 < Array
|
|
265
|
+
include ArrayOfIntMixin
|
|
252
266
|
set_of Int16
|
|
253
267
|
end
|
|
254
268
|
|
|
255
269
|
# Specialized array to handle serie of {Int16le}.
|
|
256
270
|
class ArrayOfInt16le < Array
|
|
271
|
+
include ArrayOfIntMixin
|
|
257
272
|
set_of Int16le
|
|
258
273
|
end
|
|
259
274
|
|
|
260
275
|
# Specialized array to handle serie of {Int32}.
|
|
261
276
|
class ArrayOfInt32 < Types::Array
|
|
277
|
+
include ArrayOfIntMixin
|
|
262
278
|
set_of Types::Int32
|
|
263
279
|
end
|
|
264
280
|
|
|
265
281
|
# Specialized array to handle serie of {Int32le}.
|
|
266
282
|
class ArrayOfInt32le < Types::Array
|
|
283
|
+
include ArrayOfIntMixin
|
|
267
284
|
set_of Types::Int32le
|
|
268
285
|
end
|
|
269
286
|
end
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
9
10
|
require 'forwardable'
|
data/lib/packetgen/types/enum.rb
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# This file is part of PacketGen
|
|
5
|
-
# See https://github.com/
|
|
5
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
6
6
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
7
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
7
8
|
# This program is published under MIT license.
|
|
8
9
|
|
|
9
10
|
module PacketGen
|
|
@@ -14,7 +15,7 @@ module PacketGen
|
|
|
14
15
|
# and named values.
|
|
15
16
|
#
|
|
16
17
|
# == Simple example
|
|
17
|
-
# enum = Int8Enum.new(
|
|
18
|
+
# enum = Int8Enum.new('low' => 0, 'medium' => 1, 'high' => 2})
|
|
18
19
|
# In this example, +enum+ is a 8-bit field which may take one
|
|
19
20
|
# among three values: +low+, +medium+ or +high+:
|
|
20
21
|
# enum.value = 'high'
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# This file is part of PacketGen
|
|
4
|
-
# See https://github.com/
|
|
4
|
+
# See https://github.com/lemontree55/packetgen for more informations
|
|
5
5
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
|
6
7
|
# This program is published under MIT license.
|
|
7
8
|
|
|
8
9
|
module PacketGen
|
|
@@ -55,7 +56,7 @@ module PacketGen
|
|
|
55
56
|
|
|
56
57
|
# rubocop:enable Lint/UselessMethodDefinition
|
|
57
58
|
|
|
58
|
-
# Format object when inspecting a {
|
|
59
|
+
# Format object when inspecting a {Fields} object
|
|
59
60
|
# @return [String]
|
|
60
61
|
def format_inspect
|
|
61
62
|
to_human
|