packetgen 2.5.0 → 2.5.1
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/.travis.yml +0 -9
- data/lib/packetgen/config.rb +9 -22
- data/lib/packetgen/header.rb +1 -0
- data/lib/packetgen/header/base.rb +6 -1
- data/lib/packetgen/header/ike/auth.rb +1 -1
- data/lib/packetgen/header/ike/notify.rb +1 -2
- data/lib/packetgen/header/ike/sa.rb +3 -6
- data/lib/packetgen/header/netbios.rb +51 -0
- data/lib/packetgen/packet.rb +1 -1
- data/lib/packetgen/version.rb +1 -1
- data/packetgen.gemspec +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1db3896f30ec86544f468386feb20fcc301e39d5451383543e2ccabb7ca33585
|
4
|
+
data.tar.gz: 21e62d53f3915d9d19fbcf2475e4c9fd60dfe58c1427b7bd65ead51a298141ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5dbe26467d9000d411a810e3a4165e842064a1ad4550b407013ef0b6dee98903a840ad228831a3b292c43d1c5d78e7a418d419eea777d00cab4f411d7d1e5dc
|
7
|
+
data.tar.gz: 66986fab978377b8cf10a1b9a48b2f7d4d4344cec74339db371e690bcd0c98c931699c41812f24998cf403c775feae2b4f53a99082daaced371244de332d7ce4
|
data/.travis.yml
CHANGED
@@ -6,15 +6,6 @@ rvm:
|
|
6
6
|
- 2.4
|
7
7
|
- 2.5
|
8
8
|
|
9
|
-
matrix:
|
10
|
-
# allow 2.5 to fail until Travis CI is fixed.
|
11
|
-
# See travis-ci/travis-ci#8969
|
12
|
-
allow_failures:
|
13
|
-
- rvm: 2.5
|
14
|
-
|
15
|
-
before_install:
|
16
|
-
# work around https://github.com/travis-ci/travis-ci/issues/8969
|
17
|
-
- travis_retry gem update --system
|
18
9
|
install:
|
19
10
|
- sudo apt-get update -qq
|
20
11
|
- sudo apt-get install libpcap-dev -qq
|
data/lib/packetgen/config.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# frozen_string_literal: true
|
7
7
|
require 'socket'
|
8
8
|
require 'singleton'
|
9
|
-
require '
|
9
|
+
require 'interfacez'
|
10
10
|
|
11
11
|
module PacketGen
|
12
12
|
|
@@ -23,47 +23,34 @@ module PacketGen
|
|
23
23
|
attr_reader :default_iface
|
24
24
|
|
25
25
|
def initialize
|
26
|
-
|
27
|
-
default_iface = Pcap.lookupdev
|
28
|
-
rescue PCAPRUB::BindingError
|
29
|
-
default_iface = NetworkInterface.interfaces.select { |i| i =~ /lo/ }.first
|
30
|
-
end
|
31
|
-
@default_iface = default_iface
|
26
|
+
@default_iface = Interfacez.default || Interfacez.loopback
|
32
27
|
@hwaddr = {}
|
33
28
|
@ipaddr = {}
|
34
29
|
@ip6addr = {}
|
35
30
|
|
36
|
-
|
37
|
-
|
38
|
-
@
|
39
|
-
|
40
|
-
addresses[Socket::AF_LINK][0]['addr'] if addresses[Socket::AF_LINK]
|
41
|
-
else
|
42
|
-
addresses[Socket::AF_PACKET][0]['addr'] if addresses[Socket::AF_PACKET]
|
43
|
-
end
|
44
|
-
@ipaddr[iface] = addresses[Socket::AF_INET][0]['addr'] if addresses[Socket::AF_INET]
|
45
|
-
if addresses[Socket::AF_INET6]
|
46
|
-
@ip6addr[iface] = addresses[Socket::AF_INET6].map { |hsh| hsh['addr'] }
|
47
|
-
end
|
31
|
+
Interfacez.all do |iface_name|
|
32
|
+
@hwaddr[iface_name] = Interfacez.mac_address_of(iface_name)
|
33
|
+
@ipaddr[iface_name] = Interfacez.ipv4_address_of(iface_name)
|
34
|
+
@ip6addr[iface_name] = Interfacez.ipv6_addresses_of(iface_name)
|
48
35
|
end
|
49
36
|
end
|
50
37
|
|
51
38
|
# Get MAC address for given network interface
|
52
|
-
# @param [String,nil] iface network interface.
|
39
|
+
# @param [String,nil] iface network interface. If +nil+, use default one.
|
53
40
|
# @return [String]
|
54
41
|
def hwaddr(iface=nil)
|
55
42
|
@hwaddr[iface || @default_iface]
|
56
43
|
end
|
57
44
|
|
58
45
|
# Get IP address for given network interface
|
59
|
-
# @param [String,nil] iface network interface.
|
46
|
+
# @param [String,nil] iface network interface. If +nil+, use default one.
|
60
47
|
# @return [String]
|
61
48
|
def ipaddr(iface=nil)
|
62
49
|
@ipaddr[iface || @default_iface]
|
63
50
|
end
|
64
51
|
|
65
52
|
# Get IPv6 addresses for given network interface
|
66
|
-
# @param [String,nil] iface network interface.
|
53
|
+
# @param [String,nil] iface network interface. If +nil+, use default one.
|
67
54
|
# @return [Array<String>]
|
68
55
|
def ip6addr(iface=nil)
|
69
56
|
@ip6addr[iface || @default_iface]
|
data/lib/packetgen/header.rb
CHANGED
@@ -151,7 +151,8 @@ module PacketGen
|
|
151
151
|
# Header1.bind_header Header3, field1: 43, field2: 43
|
152
152
|
# Header1.bind_header Header4, op: :and, field1: 43, field2: 43
|
153
153
|
# Header1.bind_header Header5, field1: ->(v) { v.nil? ? 128 : v > 127 }
|
154
|
-
# Header1.bind_header Header6,
|
154
|
+
# Header1.bind_header Header6, procs: [->(hdr) { hdr.field1 = 1 }
|
155
|
+
# ->(hdr) { hdr.field1 == 1 && hdr.body[0..1] == "\x00\x00" }]
|
155
156
|
# @param [Class] header_klass header class to bind to current class
|
156
157
|
# @param [Hash] args current class fields and their value when +header_klass+
|
157
158
|
# is embedded in current class. Given value may be a lambda, whose alone argument
|
@@ -162,6 +163,10 @@ module PacketGen
|
|
162
163
|
# operation on this binding. By default, +:op+ is +:or+ (at least one binding
|
163
164
|
# must match to parse it). It also may be set to +:and+ (all bindings must match
|
164
165
|
# to parse it).
|
166
|
+
#
|
167
|
+
# Special key +procs+ may be used to set 2 lambdas, the former to set
|
168
|
+
# fields, the former to check bindings. This may be used when multiple and
|
169
|
+
# non-trivial checks should be made.
|
165
170
|
# @return [void]
|
166
171
|
def self.bind_header(header_klass, args={})
|
167
172
|
op = args.delete(:op) || :or
|
@@ -138,7 +138,7 @@ module PacketGen
|
|
138
138
|
Transform::PRF_HMAC_SHA2_256, Transform::PRF_HMAC_SHA2_384,
|
139
139
|
Transform::PRF_HMAC_SHA2_512
|
140
140
|
digestname = Transform.constants.grep(/PRF_/).
|
141
|
-
|
141
|
+
detect { |c| Transform.const_get(c) == type }.
|
142
142
|
to_s.sub(/^PRF_HMAC_/, '').sub(/2_/, '')
|
143
143
|
digest = OpenSSL::Digest.const_get(digestname).new
|
144
144
|
else
|
@@ -149,8 +149,7 @@ module PacketGen
|
|
149
149
|
# @return [String]
|
150
150
|
def human_protocol
|
151
151
|
name = IKE.constants.grep(/PROTO/).
|
152
|
-
|
153
|
-
first || "proto #{protocol}"
|
152
|
+
detect { |c| IKE.const_get(c) == protocol } || "proto #{protocol}"
|
154
153
|
name.to_s.sub(/PROTO_/, '')
|
155
154
|
end
|
156
155
|
|
@@ -83,8 +83,7 @@ module PacketGen
|
|
83
83
|
# @return [String]
|
84
84
|
def to_human
|
85
85
|
name = self.class.constants.grep(/TYPE_/).
|
86
|
-
|
87
|
-
first || "attr[#{type & 0x7fff}]"
|
86
|
+
detect { |c| self.class.const_get(c) == (type & 0x7fff) } || "attr[#{type & 0x7fff}]"
|
88
87
|
name = name.to_s.sub(/TYPE_/, '')
|
89
88
|
"#{name}=#{value}"
|
90
89
|
end
|
@@ -300,8 +299,7 @@ module PacketGen
|
|
300
299
|
# @return [String]
|
301
300
|
def human_id
|
302
301
|
name = self.class.constants.grep(/#{human_type}_/).
|
303
|
-
|
304
|
-
first || "ID=#{id}"
|
302
|
+
detect { |c| self.class.const_get(c) == id } || "ID=#{id}"
|
305
303
|
name.to_s.sub(/#{human_type}_/, '')
|
306
304
|
end
|
307
305
|
|
@@ -470,8 +468,7 @@ module PacketGen
|
|
470
468
|
# @return [String]
|
471
469
|
def human_protocol
|
472
470
|
name = IKE.constants.grep(/PROTO/).
|
473
|
-
|
474
|
-
first || "proto #{protocol}"
|
471
|
+
detect { |c| IKE.const_get(c) == protocol } || "proto #{protocol}"
|
475
472
|
name.to_s.sub(/PROTO_/, '')
|
476
473
|
end
|
477
474
|
|
@@ -0,0 +1,51 @@
|
|
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
|
+
|
8
|
+
module PacketGen
|
9
|
+
module Header
|
10
|
+
# Module to group all NetBIOS headers
|
11
|
+
# @author Sylvain Daubert
|
12
|
+
module NetBIOS
|
13
|
+
# NetBIOS Session Service messages.
|
14
|
+
# @author Sylvain Daubert
|
15
|
+
class Session < Base
|
16
|
+
# Port number for NetBIOS Session Service over TCP
|
17
|
+
TCP_PORT = 139
|
18
|
+
|
19
|
+
# Session packet types
|
20
|
+
TYPES = {
|
21
|
+
'message' => 0,
|
22
|
+
'request' => 0x81,
|
23
|
+
'positive_response' => 0x82,
|
24
|
+
'negative_response' => 0x83,
|
25
|
+
'retarget_response' => 0x84,
|
26
|
+
'keep_alive' => 0x85,
|
27
|
+
}
|
28
|
+
|
29
|
+
# @!attribute type
|
30
|
+
# 8-bit session packet type
|
31
|
+
# @return [Integer]
|
32
|
+
define_field :type, Types::Int8Enum, enum: TYPES
|
33
|
+
# @!attribute length
|
34
|
+
# 17-bit session packet length
|
35
|
+
# @return [Integer]
|
36
|
+
define_field :length, Types::Int24
|
37
|
+
# @!attribute body
|
38
|
+
# @return [String]
|
39
|
+
define_field :body, Types::String
|
40
|
+
|
41
|
+
# Compute and set {#length} field
|
42
|
+
# @return [Integer] calculated length
|
43
|
+
def calc_length
|
44
|
+
Base.calculate_and_set_length(self, header_in_size: false)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
self.add_class NetBIOS::Session
|
49
|
+
TCP.bind_header NetBIOS::Session, sport: NetBIOS::Session::TCP_PORT, dport: NetBIOS::Session::TCP_PORT
|
50
|
+
end
|
51
|
+
end
|
data/lib/packetgen/packet.rb
CHANGED
@@ -179,7 +179,7 @@ module PacketGen
|
|
179
179
|
# Recalculate all packet checksums
|
180
180
|
# @return [void]
|
181
181
|
def calc_checksum
|
182
|
-
@headers.
|
182
|
+
@headers.reverse_each do |header|
|
183
183
|
header.calc_checksum if header.respond_to? :calc_checksum
|
184
184
|
end
|
185
185
|
end
|
data/lib/packetgen/version.rb
CHANGED
data/packetgen.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.required_ruby_version = '>= 2.2.0'
|
25
25
|
|
26
26
|
spec.add_dependency 'pcaprub', '~>0.12.4'
|
27
|
-
spec.add_dependency '
|
27
|
+
spec.add_dependency 'interfacez', '~>1.0'
|
28
28
|
spec.add_dependency 'rasn1', '~>0.5', '>= 0.6.0'
|
29
29
|
|
30
30
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packetgen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Daubert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pcaprub
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.12.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: interfacez
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
33
|
+
version: '1.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
40
|
+
version: '1.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rasn1
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- lib/packetgen/header/mldv2/mcast_address_record.rb
|
223
223
|
- lib/packetgen/header/mldv2/mlq.rb
|
224
224
|
- lib/packetgen/header/mldv2/mlr.rb
|
225
|
+
- lib/packetgen/header/netbios.rb
|
225
226
|
- lib/packetgen/header/ospfv2.rb
|
226
227
|
- lib/packetgen/header/ospfv2/db_description.rb
|
227
228
|
- lib/packetgen/header/ospfv2/hello.rb
|