packetgen 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba692327da7837d4de41a002ca756a778692c74b
4
- data.tar.gz: 38fca26934167acbd7d92981f160071c7fd1387f
3
+ metadata.gz: eee53816de9d4f92c8e4eaef9d0e7e366fccdae2
4
+ data.tar.gz: a02bf2781972588fadd2f9bf2a94603b81353563
5
5
  SHA512:
6
- metadata.gz: 80d8155ad93876fcb14c5d1d85b3a374a1eb865784b914aed802dbb0ab07e97364d10e5affc2a094f4041f695774a41dd60a65e8da2fbdd92e27ca873ad60ddd
7
- data.tar.gz: ac325e1dae38151f1f73ca05b6604a7373060aaee4a814e9d87c98b4de4e8e8aa64ba11f39930693d9cc8f9e4abb028918237d37e99f5a1becabdf93227effe9
6
+ metadata.gz: cf215ff8ebb85469fc383a77a4a92f63cb7b384afa7aabec96b1d69efb2fe41dde5f5b44cefacde92c9af0d3c7c4244c6a1f29ed39d45ac3221b2cd9fe485345
7
+ data.tar.gz: c0a6cd54c3fb4813bd31e56c718057ad985e8f54d0ae25766d2c445fa0144af2831e34ec7fdc38fe26bb8eedc4be79dbd89a7e99b956463c2a8ef77a5e6a5abd
@@ -5,6 +5,7 @@ module PacketGen
5
5
 
6
6
  # Config class to provide +config+ object to pgconsole
7
7
  # @author Sylvain Daubert
8
+ # @author Kent 'picat' Gruber
8
9
  class Config
9
10
 
10
11
  # Default network interface
@@ -20,18 +21,27 @@ module PacketGen
20
21
  # @return [String]
21
22
  attr_reader :ip6addr
22
23
 
23
- # Create a configuration object. If +iface+ is not set, get first network interface.
24
- # If non exists, use loopback one.
24
+ # Create a configuration object. If +iface+ is not set,
25
+ # attempt to find it automatically or default to the
26
+ # first available loopback interface.
25
27
  # @param [String,nil] iface
26
28
  def initialize(iface=nil)
27
29
  if iface.nil?
28
- iface = NetworkInterface.interfaces.select { |iface| iface != 'lo' }.first
29
- iface = NetworkInterface.interfaces.first if iface.nil?
30
+ begin
31
+ iface = Pcap.lookupdev
32
+ rescue PCAPRUB::BindingError
33
+ iface = NetworkInterface.interfaces.select { |iface| iface =~ /lo/ }.first
34
+ end
30
35
  end
31
36
  @iface = iface
32
37
 
33
38
  addresses = NetworkInterface.addresses(iface)
34
- @hwaddr = addresses[Socket::AF_PACKET][0]['addr'] if addresses[Socket::AF_PACKET]
39
+ @hwaddr = case RbConfig::CONFIG['target_os']
40
+ when /darwin/
41
+ addresses[Socket::AF_LINK][0]['addr'] if addresses[Socket::AF_LINK]
42
+ else
43
+ addresses[Socket::AF_PACKET][0]['addr'] if addresses[Socket::AF_PACKET]
44
+ end
35
45
  @ipaddr = addresses[Socket::AF_INET][0]['addr'] if addresses[Socket::AF_INET]
36
46
  @ip6addr = addresses[Socket::AF_INET6][0]['addr'] if addresses[Socket::AF_INET6]
37
47
  end
@@ -30,24 +30,6 @@ module PacketGen
30
30
  self
31
31
  end
32
32
 
33
- # Add a ressource record to this section. Increment associated counter
34
- # @param [RR,Hash] rr
35
- # @return [RRSection] self
36
- def <<(rr)
37
- push rr
38
- @counter.read(@counter.to_i + 1)
39
- self
40
- end
41
-
42
- # Delete a ressource
43
- # @param [RR] rr
44
- # @return [RR]
45
- def delete(rr)
46
- obj = super
47
- @counter.read(@counter.to_i - 1) if obj
48
- obj
49
- end
50
-
51
33
  private
52
34
 
53
35
  def record_from_hash(hsh)
@@ -6,11 +6,50 @@
6
6
  module PacketGen
7
7
  module Types
8
8
 
9
- # @abstract
10
- # Array supporting some fields methods
9
+ # @abstract Base class to define set of {Fields} subclasses.
10
+ # == #record_from_hash
11
+ # Subclasses should define private method +#record_from_hash+. This method
12
+ # is called by {#push} to add an object to the set.
13
+ #
14
+ # A default method is defined by {Array}: it calls constructor of class defined
15
+ # by {.set_of}.
11
16
  # @author Sylvain Daubert
12
17
  class Array < ::Array
13
18
 
19
+ # Separator used in {#to_human}.
20
+ # May be ovverriden by subclasses
21
+ HUMAN_SEPARATOR = ','
22
+
23
+ # Define type of objects in set. Used by {#read} and {#push}.
24
+ # @param [Class] klass
25
+ # @return [void]
26
+ def self.set_of(klass)
27
+ @klass = klass
28
+ end
29
+
30
+ # @param [Hash] options
31
+ # @option options [Int] counter Int object used as a counter for this set
32
+ def initialize(options={})
33
+ super()
34
+ @counter = options[:counter]
35
+ end
36
+
37
+ # Populate object from a string
38
+ # @param [String] str
39
+ # @return [self]
40
+ def read(str)
41
+ clear
42
+ return self if str.nil?
43
+ force_binary str
44
+ klass = self.class.class_eval { @klass }
45
+ while str.length > 0
46
+ obj = klass.new.read(str)
47
+ self.push obj
48
+ str.slice!(0, obj.sz)
49
+ end
50
+ self
51
+ end
52
+
14
53
  # @abstract depend on private method +#record_from_hash+ which should be
15
54
  # declared by subclasses.
16
55
  # Add an object to this array
@@ -25,7 +64,26 @@ module PacketGen
25
64
  end
26
65
  super(obj)
27
66
  end
28
- alias :<< :push
67
+
68
+ # @abstract depend on private method +#record_from_hash+ which should be
69
+ # declared by subclasses.
70
+ # Add an object to this array, and increment associated counter, if any
71
+ # @param [Object] obj type depends on subclass
72
+ # @return [Array] self
73
+ def <<(obj)
74
+ push obj
75
+ @counter.read(@counter.to_i + 1) if @counter
76
+ self
77
+ end
78
+
79
+ # Delete an object from this array. Update associated counter if any
80
+ # @param [Object] obj
81
+ # @return [Object] deleted object
82
+ def delete(obj)
83
+ deleted = super
84
+ @counter.read(@counter.to_i - 1) if @counter && deleted
85
+ deleted
86
+ end
29
87
 
30
88
  # Get binary string
31
89
  # @return [String]
@@ -36,7 +94,7 @@ module PacketGen
36
94
  # Get a human readable string
37
95
  # @return [String]
38
96
  def to_human
39
- map(&:to_human).join(',')
97
+ map(&:to_human).join(self.class::HUMAN_SEPARATOR)
40
98
  end
41
99
 
42
100
  # Get size in bytes
@@ -51,6 +109,17 @@ module PacketGen
51
109
  def force_binary(str)
52
110
  PacketGen.force_binary str
53
111
  end
112
+
113
+ private
114
+
115
+ def record_from_hash(obj)
116
+ obj_klass = self.class.class_eval { @klass }
117
+ if obj_klass
118
+ obj_klass.new(obj)
119
+ else
120
+ raise NotImplementedError, 'class should define #record_from_hash or declare type of elements in set with .set_of'
121
+ end
122
+ end
54
123
  end
55
124
  end
56
125
  end
@@ -55,13 +55,23 @@ module PacketGen
55
55
  [to_i].pack(@packstr[@endian])
56
56
  end
57
57
 
58
+ # Convert Int to Integer
59
+ # @return [Integer]
58
60
  def to_i
59
61
  @value || @default
60
62
  end
61
63
 
64
+ # Convert Int to Float
65
+ # @return [Float]
62
66
  def to_f
63
67
  to_i.to_f
64
68
  end
69
+
70
+ # Give size in bytes of self
71
+ # @return [Integer]
72
+ def sz
73
+ to_s.size
74
+ end
65
75
  end
66
76
 
67
77
  # One byte integer
@@ -8,5 +8,5 @@
8
8
  # @author Sylvain Daubert
9
9
  module PacketGen
10
10
  # PacketGen version
11
- VERSION = "1.4.1"
11
+ VERSION = "1.4.2"
12
12
  end
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: 1.4.1
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Daubert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-11 00:00:00.000000000 Z
11
+ date: 2017-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pcaprub