packetgen 2.4.0 → 2.5.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 +5 -5
- data/.travis.yml +13 -4
- data/lib/packetgen.rb +3 -1
- data/lib/packetgen/capture.rb +2 -0
- data/lib/packetgen/config.rb +1 -0
- data/lib/packetgen/header.rb +5 -0
- data/lib/packetgen/header/arp.rb +2 -0
- data/lib/packetgen/header/asn1_base.rb +2 -0
- data/lib/packetgen/header/base.rb +16 -0
- data/lib/packetgen/header/bootp.rb +2 -0
- data/lib/packetgen/header/crypto.rb +2 -0
- data/lib/packetgen/header/dhcp.rb +2 -0
- data/lib/packetgen/header/dhcp/option.rb +3 -0
- data/lib/packetgen/header/dhcp/options.rb +2 -0
- data/lib/packetgen/header/dhcpv6.rb +109 -0
- data/lib/packetgen/header/dhcpv6/duid.rb +147 -0
- data/lib/packetgen/header/dhcpv6/option.rb +391 -0
- data/lib/packetgen/header/dhcpv6/options.rb +29 -0
- data/lib/packetgen/header/dhcpv6/relay.rb +48 -0
- data/lib/packetgen/header/dns.rb +10 -2
- data/lib/packetgen/header/dns/name.rb +7 -0
- data/lib/packetgen/header/dns/opt.rb +6 -0
- data/lib/packetgen/header/dns/option.rb +7 -0
- data/lib/packetgen/header/dns/qdsection.rb +7 -1
- data/lib/packetgen/header/dns/question.rb +7 -0
- data/lib/packetgen/header/dns/rr.rb +7 -0
- data/lib/packetgen/header/dns/rrsection.rb +7 -0
- data/lib/packetgen/header/dot11.rb +4 -2
- data/lib/packetgen/header/dot11/control.rb +2 -0
- data/lib/packetgen/header/dot11/data.rb +2 -0
- data/lib/packetgen/header/dot11/element.rb +2 -0
- data/lib/packetgen/header/dot11/management.rb +2 -0
- data/lib/packetgen/header/dot11/sub_mngt.rb +2 -0
- data/lib/packetgen/header/dot1q.rb +2 -0
- data/lib/packetgen/header/dot1x.rb +3 -1
- data/lib/packetgen/header/eap.rb +3 -1
- data/lib/packetgen/header/eap/fast.rb +2 -0
- data/lib/packetgen/header/eap/md5.rb +2 -0
- data/lib/packetgen/header/eap/tls.rb +2 -0
- data/lib/packetgen/header/eap/ttls.rb +2 -0
- data/lib/packetgen/header/esp.rb +7 -0
- data/lib/packetgen/header/eth.rb +2 -0
- data/lib/packetgen/header/gre.rb +4 -9
- data/lib/packetgen/header/http/headers.rb +2 -0
- data/lib/packetgen/header/http/request.rb +3 -1
- data/lib/packetgen/header/http/response.rb +3 -1
- data/lib/packetgen/header/icmp.rb +4 -11
- data/lib/packetgen/header/icmpv6.rb +4 -11
- data/lib/packetgen/header/igmp.rb +4 -11
- data/lib/packetgen/header/igmpv3.rb +4 -11
- data/lib/packetgen/header/igmpv3/group_record.rb +2 -0
- data/lib/packetgen/header/igmpv3/mq.rb +2 -0
- data/lib/packetgen/header/igmpv3/mr.rb +2 -0
- data/lib/packetgen/header/ike.rb +13 -6
- data/lib/packetgen/header/ike/auth.rb +2 -0
- data/lib/packetgen/header/ike/cert.rb +2 -0
- data/lib/packetgen/header/ike/certreq.rb +2 -0
- data/lib/packetgen/header/ike/id.rb +2 -0
- data/lib/packetgen/header/ike/ke.rb +2 -0
- data/lib/packetgen/header/ike/nonce.rb +2 -0
- data/lib/packetgen/header/ike/notify.rb +7 -0
- data/lib/packetgen/header/ike/payload.rb +9 -0
- data/lib/packetgen/header/ike/sa.rb +11 -4
- data/lib/packetgen/header/ike/sk.rb +7 -0
- data/lib/packetgen/header/ike/ts.rb +2 -0
- data/lib/packetgen/header/ike/vendor_id.rb +2 -0
- data/lib/packetgen/header/ip.rb +48 -11
- data/lib/packetgen/header/ip/addr.rb +8 -0
- data/lib/packetgen/header/ip/option.rb +2 -0
- data/lib/packetgen/header/ip/options.rb +2 -0
- data/lib/packetgen/header/ipv6.rb +5 -3
- data/lib/packetgen/header/ipv6/addr.rb +8 -0
- data/lib/packetgen/header/ipv6/extension.rb +2 -0
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +2 -0
- data/lib/packetgen/header/llc.rb +2 -0
- data/lib/packetgen/header/mld.rb +2 -0
- data/lib/packetgen/header/mldv2.rb +4 -2
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +3 -1
- data/lib/packetgen/header/mldv2/mlq.rb +2 -0
- data/lib/packetgen/header/mldv2/mlr.rb +4 -2
- data/lib/packetgen/header/ospfv2.rb +249 -0
- data/lib/packetgen/header/ospfv2/db_description.rb +105 -0
- data/lib/packetgen/header/ospfv2/hello.rb +104 -0
- data/lib/packetgen/header/ospfv2/ls_ack.rb +55 -0
- data/lib/packetgen/header/ospfv2/ls_request.rb +90 -0
- data/lib/packetgen/header/ospfv2/ls_update.rb +72 -0
- data/lib/packetgen/header/ospfv2/lsa.rb +252 -0
- data/lib/packetgen/header/ospfv2/lsa_header.rb +122 -0
- data/lib/packetgen/header/ospfv3.rb +216 -0
- data/lib/packetgen/header/ospfv3/db_description.rb +114 -0
- data/lib/packetgen/header/ospfv3/hello.rb +104 -0
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +103 -0
- data/lib/packetgen/header/ospfv3/ls_ack.rb +51 -0
- data/lib/packetgen/header/ospfv3/ls_request.rb +108 -0
- data/lib/packetgen/header/ospfv3/ls_update.rb +74 -0
- data/lib/packetgen/header/ospfv3/lsa.rb +252 -0
- data/lib/packetgen/header/ospfv3/lsa_header.rb +123 -0
- data/lib/packetgen/header/snmp.rb +2 -0
- data/lib/packetgen/header/tcp.rb +14 -14
- data/lib/packetgen/header/tcp/option.rb +7 -1
- data/lib/packetgen/header/tcp/options.rb +7 -0
- data/lib/packetgen/header/tftp.rb +2 -0
- data/lib/packetgen/header/udp.rb +6 -14
- data/lib/packetgen/inspect.rb +5 -1
- data/lib/packetgen/packet.rb +3 -1
- data/lib/packetgen/pcapng.rb +2 -0
- data/lib/packetgen/pcapng/block.rb +2 -0
- data/lib/packetgen/pcapng/epb.rb +2 -0
- data/lib/packetgen/pcapng/file.rb +2 -0
- data/lib/packetgen/pcapng/idb.rb +2 -0
- data/lib/packetgen/pcapng/shb.rb +2 -0
- data/lib/packetgen/pcapng/spb.rb +2 -0
- data/lib/packetgen/pcapng/unknown_block.rb +2 -0
- data/lib/packetgen/proto.rb +2 -0
- data/lib/packetgen/types/array.rb +3 -0
- data/lib/packetgen/types/cstring.rb +3 -1
- data/lib/packetgen/types/enum.rb +2 -0
- data/lib/packetgen/types/fields.rb +8 -4
- data/lib/packetgen/types/int.rb +3 -1
- data/lib/packetgen/types/int_string.rb +2 -0
- data/lib/packetgen/types/oui.rb +2 -0
- data/lib/packetgen/types/string.rb +3 -0
- data/lib/packetgen/types/tlv.rb +8 -0
- data/lib/packetgen/utils.rb +6 -4
- data/lib/packetgen/utils/arp_spoofer.rb +2 -0
- data/lib/packetgen/version.rb +3 -1
- metadata +25 -3
data/lib/packetgen/header/dns.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# This file is part of PacketGen
|
3
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
4
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
|
+
# This program is published under MIT license.
|
6
|
+
|
7
|
+
# frozen_string_literal: true
|
8
|
+
|
1
9
|
module PacketGen
|
2
10
|
module Header
|
3
11
|
|
@@ -243,7 +251,7 @@ module PacketGen
|
|
243
251
|
# @return [String]
|
244
252
|
def inspect
|
245
253
|
str = Inspect.dashed_line(self.class, 2)
|
246
|
-
|
254
|
+
fields.each do |attr|
|
247
255
|
if attr == :u16
|
248
256
|
flags = [:qr, :aa, :tc, :rd, :ra].select! { |attr| send "#{attr}?" }.
|
249
257
|
map(&:to_s).join(',')
|
@@ -256,7 +264,7 @@ module PacketGen
|
|
256
264
|
str << Inspect.shift_level(2)
|
257
265
|
str << Inspect::FMT_ATTR % ['Integer', 'rcode', rcode]
|
258
266
|
else
|
259
|
-
str << Inspect.inspect_attribute(attr,
|
267
|
+
str << Inspect.inspect_attribute(attr, self[attr], 2)
|
260
268
|
end
|
261
269
|
end
|
262
270
|
str
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
class DNS
|
@@ -1,3 +1,9 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
1
7
|
require_relative 'option'
|
2
8
|
|
3
9
|
module PacketGen
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
class DNS
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
class DNS
|
@@ -36,4 +43,3 @@ module PacketGen
|
|
36
43
|
end
|
37
44
|
end
|
38
45
|
end
|
39
|
-
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
class DNS
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
class DNS
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
class DNS
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# See https://github.com/sdaubert/packetgen for more informations
|
4
4
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
5
5
|
# This program is published under MIT license.
|
6
|
+
|
7
|
+
# frozen_string_literal: true
|
6
8
|
require 'zlib'
|
7
9
|
|
8
10
|
module PacketGen
|
@@ -53,7 +55,7 @@ module PacketGen
|
|
53
55
|
version == 0 and length >= 8
|
54
56
|
end
|
55
57
|
|
56
|
-
# Calculate length
|
58
|
+
# Calculate header length
|
57
59
|
# @return [Integer] calculated length
|
58
60
|
# @since 2.1.3
|
59
61
|
def calc_length
|
@@ -114,7 +116,7 @@ module PacketGen
|
|
114
116
|
version == 0 and length >= 8
|
115
117
|
end
|
116
118
|
|
117
|
-
# Calculate length
|
119
|
+
# Calculate header length
|
118
120
|
# @return [Integer] calculated length
|
119
121
|
# @since 2.1.3
|
120
122
|
def calc_length
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
|
@@ -68,7 +70,7 @@ module PacketGen
|
|
68
70
|
# @return [Integer]
|
69
71
|
# @since 2.1.4
|
70
72
|
def calc_length
|
71
|
-
|
73
|
+
Base.calculate_and_set_length self, header_in_size: false
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
data/lib/packetgen/header/eap.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
|
@@ -207,7 +209,7 @@ module PacketGen
|
|
207
209
|
# Calculate length field from content
|
208
210
|
# @return [Integer]
|
209
211
|
def calc_length
|
210
|
-
|
212
|
+
Base.calculate_and_set_length self
|
211
213
|
end
|
212
214
|
|
213
215
|
# Say is this EAP header has {#type} field
|
data/lib/packetgen/header/esp.rb
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# This file is part of PacketGen
|
2
|
+
# See https://github.com/sdaubert/packetgen for more informations
|
3
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
|
+
# This program is published under MIT license.
|
5
|
+
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
1
8
|
module PacketGen
|
2
9
|
module Header
|
3
10
|
|
data/lib/packetgen/header/eth.rb
CHANGED
data/lib/packetgen/header/gre.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
|
@@ -68,15 +70,8 @@ module PacketGen
|
|
68
70
|
# Compute checksum and set +checksum+ field
|
69
71
|
# @return [Integer]
|
70
72
|
def calc_checksum
|
71
|
-
|
72
|
-
|
73
|
-
sum = str.unpack('n*').reduce(:+)
|
74
|
-
|
75
|
-
while sum > 0xffff do
|
76
|
-
sum = (sum & 0xffff) + (sum >> 16)
|
77
|
-
end
|
78
|
-
sum = ~sum & 0xffff
|
79
|
-
self[:checksum].value = (sum == 0) ? 0xffff : sum
|
73
|
+
sum = IP.sum16(self)
|
74
|
+
self.checksum = IP.reduce_checksum(sum)
|
80
75
|
end
|
81
76
|
end
|
82
77
|
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
module HTTP
|
@@ -76,7 +78,7 @@ module PacketGen
|
|
76
78
|
raise FormatError, "Missing #method." if self.method.empty?
|
77
79
|
raise FormatError, "Missing #path." if self.path.empty?
|
78
80
|
raise FormatError, "Missing #version." if self.version.empty?
|
79
|
-
str = "" # build 'dat string
|
81
|
+
str = "".dup # build 'dat string
|
80
82
|
str << self[:method] << " " << self[:path] << " " << self[:version] << "\r\n" << self[:headers].to_s
|
81
83
|
end
|
82
84
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
module HTTP
|
@@ -100,7 +102,7 @@ module PacketGen
|
|
100
102
|
raise FormatError, "Missing #status_code." if self.status_code.empty?
|
101
103
|
raise FormatError, "Missing #status_mesg." if self.status_mesg.empty?
|
102
104
|
raise FormatError, "Missing #version." if self.version.empty?
|
103
|
-
str = "" # build 'dat string
|
105
|
+
str = "".dup # build 'dat string
|
104
106
|
str << self[:version] << " " << self[:status_code] << " " << self[:status_mesg] << "\r\n"
|
105
107
|
if self[:headers].given?
|
106
108
|
str << self[:headers].to_s
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
|
@@ -50,17 +52,8 @@ module PacketGen
|
|
50
52
|
# Compute checksum and set +checksum+ field
|
51
53
|
# @return [Integer]
|
52
54
|
def calc_checksum
|
53
|
-
sum = (
|
54
|
-
|
55
|
-
payload = body.to_s
|
56
|
-
payload << "\x00" unless payload.size % 2 == 0
|
57
|
-
payload.unpack('n*').each { |x| sum += x }
|
58
|
-
|
59
|
-
while sum > 0xffff do
|
60
|
-
sum = (sum & 0xffff) + (sum >> 16)
|
61
|
-
end
|
62
|
-
sum = ~sum & 0xffff
|
63
|
-
self[:checksum].value = (sum == 0) ? 0xffff : sum
|
55
|
+
sum = IP.sum16(self)
|
56
|
+
self.checksum = IP.reduce_checksum(sum)
|
64
57
|
end
|
65
58
|
end
|
66
59
|
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
|
@@ -37,17 +39,8 @@ module PacketGen
|
|
37
39
|
sum = ip_header(self).pseudo_header_checksum
|
38
40
|
sum += self.sz
|
39
41
|
sum += IP_PROTOCOL
|
40
|
-
sum +=(
|
41
|
-
|
42
|
-
payload = body.to_s
|
43
|
-
payload << "\x00" unless payload.size % 2 == 0
|
44
|
-
payload.unpack('n*').each { |x| sum += x }
|
45
|
-
|
46
|
-
while sum > 0xffff do
|
47
|
-
sum = (sum & 0xffff) + (sum >> 16)
|
48
|
-
end
|
49
|
-
sum = ~sum & 0xffff
|
50
|
-
self[:checksum].value = (sum == 0) ? 0xffff : sum
|
42
|
+
sum += IP.sum16(self)
|
43
|
+
self.checksum = IP.reduce_checksum(sum)
|
51
44
|
end
|
52
45
|
end
|
53
46
|
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
4
4
|
# This program is published under MIT license.
|
5
5
|
|
6
|
+
# frozen_string_literal: true
|
7
|
+
|
6
8
|
module PacketGen
|
7
9
|
module Header
|
8
10
|
|
@@ -88,17 +90,8 @@ module PacketGen
|
|
88
90
|
# Compute checksum and set +checksum+ field
|
89
91
|
# @return [Integer]
|
90
92
|
def calc_checksum
|
91
|
-
sum = (
|
92
|
-
|
93
|
-
payload = self[:group_addr].to_s + body.to_s
|
94
|
-
payload << "\x00" unless payload.size % 2 == 0
|
95
|
-
payload.unpack('n*').each { |x| sum += x; }
|
96
|
-
|
97
|
-
while sum > 0xffff do
|
98
|
-
sum = (sum & 0xffff) + (sum >> 16)
|
99
|
-
end
|
100
|
-
sum = ~sum & 0xffff
|
101
|
-
self[:checksum].value = (sum == 0) ? 0xffff : sum
|
93
|
+
sum = IP.sum16(self)
|
94
|
+
self.checksum = IP.reduce_checksum(sum)
|
102
95
|
end
|
103
96
|
|
104
97
|
# Fixup IP header according to RFC 2236:
|