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.
Files changed (127) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +13 -4
  3. data/lib/packetgen.rb +3 -1
  4. data/lib/packetgen/capture.rb +2 -0
  5. data/lib/packetgen/config.rb +1 -0
  6. data/lib/packetgen/header.rb +5 -0
  7. data/lib/packetgen/header/arp.rb +2 -0
  8. data/lib/packetgen/header/asn1_base.rb +2 -0
  9. data/lib/packetgen/header/base.rb +16 -0
  10. data/lib/packetgen/header/bootp.rb +2 -0
  11. data/lib/packetgen/header/crypto.rb +2 -0
  12. data/lib/packetgen/header/dhcp.rb +2 -0
  13. data/lib/packetgen/header/dhcp/option.rb +3 -0
  14. data/lib/packetgen/header/dhcp/options.rb +2 -0
  15. data/lib/packetgen/header/dhcpv6.rb +109 -0
  16. data/lib/packetgen/header/dhcpv6/duid.rb +147 -0
  17. data/lib/packetgen/header/dhcpv6/option.rb +391 -0
  18. data/lib/packetgen/header/dhcpv6/options.rb +29 -0
  19. data/lib/packetgen/header/dhcpv6/relay.rb +48 -0
  20. data/lib/packetgen/header/dns.rb +10 -2
  21. data/lib/packetgen/header/dns/name.rb +7 -0
  22. data/lib/packetgen/header/dns/opt.rb +6 -0
  23. data/lib/packetgen/header/dns/option.rb +7 -0
  24. data/lib/packetgen/header/dns/qdsection.rb +7 -1
  25. data/lib/packetgen/header/dns/question.rb +7 -0
  26. data/lib/packetgen/header/dns/rr.rb +7 -0
  27. data/lib/packetgen/header/dns/rrsection.rb +7 -0
  28. data/lib/packetgen/header/dot11.rb +4 -2
  29. data/lib/packetgen/header/dot11/control.rb +2 -0
  30. data/lib/packetgen/header/dot11/data.rb +2 -0
  31. data/lib/packetgen/header/dot11/element.rb +2 -0
  32. data/lib/packetgen/header/dot11/management.rb +2 -0
  33. data/lib/packetgen/header/dot11/sub_mngt.rb +2 -0
  34. data/lib/packetgen/header/dot1q.rb +2 -0
  35. data/lib/packetgen/header/dot1x.rb +3 -1
  36. data/lib/packetgen/header/eap.rb +3 -1
  37. data/lib/packetgen/header/eap/fast.rb +2 -0
  38. data/lib/packetgen/header/eap/md5.rb +2 -0
  39. data/lib/packetgen/header/eap/tls.rb +2 -0
  40. data/lib/packetgen/header/eap/ttls.rb +2 -0
  41. data/lib/packetgen/header/esp.rb +7 -0
  42. data/lib/packetgen/header/eth.rb +2 -0
  43. data/lib/packetgen/header/gre.rb +4 -9
  44. data/lib/packetgen/header/http/headers.rb +2 -0
  45. data/lib/packetgen/header/http/request.rb +3 -1
  46. data/lib/packetgen/header/http/response.rb +3 -1
  47. data/lib/packetgen/header/icmp.rb +4 -11
  48. data/lib/packetgen/header/icmpv6.rb +4 -11
  49. data/lib/packetgen/header/igmp.rb +4 -11
  50. data/lib/packetgen/header/igmpv3.rb +4 -11
  51. data/lib/packetgen/header/igmpv3/group_record.rb +2 -0
  52. data/lib/packetgen/header/igmpv3/mq.rb +2 -0
  53. data/lib/packetgen/header/igmpv3/mr.rb +2 -0
  54. data/lib/packetgen/header/ike.rb +13 -6
  55. data/lib/packetgen/header/ike/auth.rb +2 -0
  56. data/lib/packetgen/header/ike/cert.rb +2 -0
  57. data/lib/packetgen/header/ike/certreq.rb +2 -0
  58. data/lib/packetgen/header/ike/id.rb +2 -0
  59. data/lib/packetgen/header/ike/ke.rb +2 -0
  60. data/lib/packetgen/header/ike/nonce.rb +2 -0
  61. data/lib/packetgen/header/ike/notify.rb +7 -0
  62. data/lib/packetgen/header/ike/payload.rb +9 -0
  63. data/lib/packetgen/header/ike/sa.rb +11 -4
  64. data/lib/packetgen/header/ike/sk.rb +7 -0
  65. data/lib/packetgen/header/ike/ts.rb +2 -0
  66. data/lib/packetgen/header/ike/vendor_id.rb +2 -0
  67. data/lib/packetgen/header/ip.rb +48 -11
  68. data/lib/packetgen/header/ip/addr.rb +8 -0
  69. data/lib/packetgen/header/ip/option.rb +2 -0
  70. data/lib/packetgen/header/ip/options.rb +2 -0
  71. data/lib/packetgen/header/ipv6.rb +5 -3
  72. data/lib/packetgen/header/ipv6/addr.rb +8 -0
  73. data/lib/packetgen/header/ipv6/extension.rb +2 -0
  74. data/lib/packetgen/header/ipv6/hop_by_hop.rb +2 -0
  75. data/lib/packetgen/header/llc.rb +2 -0
  76. data/lib/packetgen/header/mld.rb +2 -0
  77. data/lib/packetgen/header/mldv2.rb +4 -2
  78. data/lib/packetgen/header/mldv2/mcast_address_record.rb +3 -1
  79. data/lib/packetgen/header/mldv2/mlq.rb +2 -0
  80. data/lib/packetgen/header/mldv2/mlr.rb +4 -2
  81. data/lib/packetgen/header/ospfv2.rb +249 -0
  82. data/lib/packetgen/header/ospfv2/db_description.rb +105 -0
  83. data/lib/packetgen/header/ospfv2/hello.rb +104 -0
  84. data/lib/packetgen/header/ospfv2/ls_ack.rb +55 -0
  85. data/lib/packetgen/header/ospfv2/ls_request.rb +90 -0
  86. data/lib/packetgen/header/ospfv2/ls_update.rb +72 -0
  87. data/lib/packetgen/header/ospfv2/lsa.rb +252 -0
  88. data/lib/packetgen/header/ospfv2/lsa_header.rb +122 -0
  89. data/lib/packetgen/header/ospfv3.rb +216 -0
  90. data/lib/packetgen/header/ospfv3/db_description.rb +114 -0
  91. data/lib/packetgen/header/ospfv3/hello.rb +104 -0
  92. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +103 -0
  93. data/lib/packetgen/header/ospfv3/ls_ack.rb +51 -0
  94. data/lib/packetgen/header/ospfv3/ls_request.rb +108 -0
  95. data/lib/packetgen/header/ospfv3/ls_update.rb +74 -0
  96. data/lib/packetgen/header/ospfv3/lsa.rb +252 -0
  97. data/lib/packetgen/header/ospfv3/lsa_header.rb +123 -0
  98. data/lib/packetgen/header/snmp.rb +2 -0
  99. data/lib/packetgen/header/tcp.rb +14 -14
  100. data/lib/packetgen/header/tcp/option.rb +7 -1
  101. data/lib/packetgen/header/tcp/options.rb +7 -0
  102. data/lib/packetgen/header/tftp.rb +2 -0
  103. data/lib/packetgen/header/udp.rb +6 -14
  104. data/lib/packetgen/inspect.rb +5 -1
  105. data/lib/packetgen/packet.rb +3 -1
  106. data/lib/packetgen/pcapng.rb +2 -0
  107. data/lib/packetgen/pcapng/block.rb +2 -0
  108. data/lib/packetgen/pcapng/epb.rb +2 -0
  109. data/lib/packetgen/pcapng/file.rb +2 -0
  110. data/lib/packetgen/pcapng/idb.rb +2 -0
  111. data/lib/packetgen/pcapng/shb.rb +2 -0
  112. data/lib/packetgen/pcapng/spb.rb +2 -0
  113. data/lib/packetgen/pcapng/unknown_block.rb +2 -0
  114. data/lib/packetgen/proto.rb +2 -0
  115. data/lib/packetgen/types/array.rb +3 -0
  116. data/lib/packetgen/types/cstring.rb +3 -1
  117. data/lib/packetgen/types/enum.rb +2 -0
  118. data/lib/packetgen/types/fields.rb +8 -4
  119. data/lib/packetgen/types/int.rb +3 -1
  120. data/lib/packetgen/types/int_string.rb +2 -0
  121. data/lib/packetgen/types/oui.rb +2 -0
  122. data/lib/packetgen/types/string.rb +3 -0
  123. data/lib/packetgen/types/tlv.rb +8 -0
  124. data/lib/packetgen/utils.rb +6 -4
  125. data/lib/packetgen/utils/arp_spoofer.rb +2 -0
  126. data/lib/packetgen/version.rb +3 -1
  127. metadata +25 -3
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2032 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Types
9
11
 
@@ -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 Types
8
10
 
@@ -71,7 +73,7 @@ module PacketGen
71
73
  # # a size field
72
74
  # define_field :body_size, PacketGen::Type::Int16
73
75
  # # String field which length is taken from body_size field
74
- # define_field :body, PacketGen::Type::String, builder: ->(obj) { PacketGen::Type::String.new('', length_from: obj[:body_size]) }
76
+ # define_field :body, PacketGen::Type::String, builder: ->(obj, type) { type.new('', length_from: obj[:body_size]) }
75
77
  # # 16-bit enumeration type. As :default not specified, default to first value of enum
76
78
  # define_field :type_class, PacketGen::Type::Int16Enum, enum: { 'class1' => 1, 'class2' => 2}
77
79
  #
@@ -120,7 +122,7 @@ module PacketGen
120
122
  # # 16-bit value
121
123
  # define_field :value2, Types::Int16
122
124
  # # specific class, may use a specific constructor
123
- # define_field :value3, MyClass, builder: ->(obj) { Myclass.new(obj) }
125
+ # define_field :value3, MyClass, builder: ->(obj, type) { type.new(obj) }
124
126
  # end
125
127
  #
126
128
  # bs = BinaryStruct.new
@@ -306,7 +308,9 @@ module PacketGen
306
308
  end
307
309
 
308
310
  value = options[field] || default
309
- if type < Types::Enum
311
+ if value.class <= type
312
+ @fields[field] = value
313
+ elsif type < Types::Enum
310
314
  case value
311
315
  when ::String
312
316
  @fields[field].value = value
@@ -423,7 +427,7 @@ module PacketGen
423
427
  # Return object as a hash
424
428
  # @return [Hash] keys: attributes, values: attribute values
425
429
  def to_h
426
- Hash[fields.map { |f| [f, @fields[f]] }]
430
+ Hash[fields.map { |f| [f, @fields[f].to_human] }]
427
431
  end
428
432
 
429
433
  # Used to set body as value of body object.
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Types
9
11
 
@@ -151,7 +153,7 @@ module PacketGen
151
153
  def to_s
152
154
  up8 = to_i >> 16
153
155
  down16 = to_i & 0xffff
154
- if @endian == :little
156
+ if @endian == :big
155
157
  [up8, down16].pack('Cn')
156
158
  else
157
159
  [down16, up8].pack('vC')
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Types
9
11
 
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Types
9
11
 
@@ -4,6 +4,8 @@
4
4
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
5
  # This program is published under MIT license.
6
6
 
7
+ # frozen_string_literal: true
8
+
7
9
  module PacketGen
8
10
  module Types
9
11
 
@@ -44,6 +46,7 @@ module PacketGen
44
46
  end
45
47
 
46
48
  alias sz length
49
+ alias to_human to_s
47
50
  end
48
51
  end
49
52
  end
@@ -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 Types
3
11
 
@@ -2,6 +2,8 @@
2
2
  # See https://github.com/sdaubert/packetgen for more informations
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
5
7
  require_relative 'config'
6
8
  require_relative 'utils/arp_spoofer'
7
9
 
@@ -135,10 +137,10 @@ module PacketGen
135
137
  my_mac = Config.instance.hwaddr(options[:iface])
136
138
  my_ip = Config.instance.ipaddr(options[:iface])
137
139
  capture = Capture.new(iface: options[:iface],
138
- filter: "((ip src #{target1} and not ip dst #{my_ip}) or" +
139
- " (ip src #{target2} and not ip dst #{my_ip}) or"+
140
- " (ip dst #{target1} and not ip src #{my_ip}) or"+
141
- " (ip dst #{target2} and not ip src #{my_ip}))"+
140
+ filter: "((ip src #{target1} and not ip dst #{my_ip}) or" \
141
+ " (ip src #{target2} and not ip dst #{my_ip}) or" \
142
+ " (ip dst #{target1} and not ip src #{my_ip}) or" \
143
+ " (ip dst #{target2} and not ip src #{my_ip}))" \
142
144
  " and ether dst #{my_mac}")
143
145
 
144
146
  spoofer.start_all
@@ -2,6 +2,8 @@
2
2
  # See https://github.com/sdaubert/packetgen for more informations
3
3
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
4
  # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
5
7
  require 'thread'
6
8
 
7
9
  module PacketGen
@@ -3,10 +3,12 @@
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
  # PacketGen is a network packet generator and analyzor.
7
9
  #
8
10
  # @author Sylvain Daubert
9
11
  module PacketGen
10
12
  # PacketGen version
11
- VERSION = '2.4.0'
13
+ VERSION = '2.5.0'
12
14
  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: 2.4.0
4
+ version: 2.5.0
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-02-14 00:00:00.000000000 Z
11
+ date: 2018-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pcaprub
@@ -155,6 +155,11 @@ files:
155
155
  - lib/packetgen/header/dhcp.rb
156
156
  - lib/packetgen/header/dhcp/option.rb
157
157
  - lib/packetgen/header/dhcp/options.rb
158
+ - lib/packetgen/header/dhcpv6.rb
159
+ - lib/packetgen/header/dhcpv6/duid.rb
160
+ - lib/packetgen/header/dhcpv6/option.rb
161
+ - lib/packetgen/header/dhcpv6/options.rb
162
+ - lib/packetgen/header/dhcpv6/relay.rb
158
163
  - lib/packetgen/header/dns.rb
159
164
  - lib/packetgen/header/dns/name.rb
160
165
  - lib/packetgen/header/dns/opt.rb
@@ -217,6 +222,23 @@ files:
217
222
  - lib/packetgen/header/mldv2/mcast_address_record.rb
218
223
  - lib/packetgen/header/mldv2/mlq.rb
219
224
  - lib/packetgen/header/mldv2/mlr.rb
225
+ - lib/packetgen/header/ospfv2.rb
226
+ - lib/packetgen/header/ospfv2/db_description.rb
227
+ - lib/packetgen/header/ospfv2/hello.rb
228
+ - lib/packetgen/header/ospfv2/ls_ack.rb
229
+ - lib/packetgen/header/ospfv2/ls_request.rb
230
+ - lib/packetgen/header/ospfv2/ls_update.rb
231
+ - lib/packetgen/header/ospfv2/lsa.rb
232
+ - lib/packetgen/header/ospfv2/lsa_header.rb
233
+ - lib/packetgen/header/ospfv3.rb
234
+ - lib/packetgen/header/ospfv3/db_description.rb
235
+ - lib/packetgen/header/ospfv3/hello.rb
236
+ - lib/packetgen/header/ospfv3/ipv6_prefix.rb
237
+ - lib/packetgen/header/ospfv3/ls_ack.rb
238
+ - lib/packetgen/header/ospfv3/ls_request.rb
239
+ - lib/packetgen/header/ospfv3/ls_update.rb
240
+ - lib/packetgen/header/ospfv3/lsa.rb
241
+ - lib/packetgen/header/ospfv3/lsa_header.rb
220
242
  - lib/packetgen/header/snmp.rb
221
243
  - lib/packetgen/header/tcp.rb
222
244
  - lib/packetgen/header/tcp/option.rb
@@ -268,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
290
  version: '0'
269
291
  requirements: []
270
292
  rubyforge_project:
271
- rubygems_version: 2.6.13
293
+ rubygems_version: 2.7.6
272
294
  signing_key:
273
295
  specification_version: 4
274
296
  summary: Network packet generator and analyzor