From 1f3477e24bf063f514da679abfd866d02f1e2392 Mon Sep 17 00:00:00 2001 From: Dimitris Grigoriou Date: Tue, 29 Nov 2016 14:25:40 +0200 Subject: [PATCH 1/3] Icmpv6 reserved field --- lib/packetfu/protos/icmpv6/header.rb | 9 +++++++-- lib/packetfu/protos/icmpv6/mixin.rb | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/packetfu/protos/icmpv6/header.rb b/lib/packetfu/protos/icmpv6/header.rb index d7c504f4..fe177f2e 100644 --- a/lib/packetfu/protos/icmpv6/header.rb +++ b/lib/packetfu/protos/icmpv6/header.rb @@ -16,7 +16,8 @@ module PacketFu # Int8 :icmp_code # Code # Int16 :icmp_sum Default: calculated # Checksum # String :body - class ICMPv6Header < Struct.new(:icmpv6_type, :icmpv6_code, :icmpv6_sum, :body) + class ICMPv6Header < Struct.new(:icmpv6_type, :icmpv6_code, :icmpv6_sum, + :icmpv6_reserved, :body) include StructFu PROTOCOL_NUMBER = 58 @@ -26,6 +27,7 @@ def initialize(args={}) Int8.new(args[:icmpv6_type]), Int8.new(args[:icmpv6_code]), Int16.new(args[:icmpv6_sum]), + Int32.new(args[:icmpv6_reserved]), StructFu::String.new.read(args[:body]) ) end @@ -59,8 +61,11 @@ def icmpv6_code; self[:icmpv6_code].to_i; end def icmpv6_sum=(i); typecast i; end # Getter for the checksum. def icmpv6_sum; self[:icmpv6_sum].to_i; end + # Setter for the reserved. + def icmpv6_reserved=(i); typecast i; end + # Getter for the reserved. + def icmpv6_reserved; self[:icmpv6_reserved].to_i; end - def icmpv6_sum_readable "0x%04x" % icmpv6_sum end diff --git a/lib/packetfu/protos/icmpv6/mixin.rb b/lib/packetfu/protos/icmpv6/mixin.rb index b25d5b4e..76a072a5 100644 --- a/lib/packetfu/protos/icmpv6/mixin.rb +++ b/lib/packetfu/protos/icmpv6/mixin.rb @@ -9,6 +9,8 @@ def icmpv6_code=(v); self.icmpv6_header.icmpv6_code= v; end def icmpv6_code; self.icmpv6_header.icmpv6_code; end def icmpv6_sum=(v); self.icmpv6_header.icmpv6_sum= v; end def icmpv6_sum; self.icmpv6_header.icmpv6_sum; end + def icmpv6_reserved=(v); self.icmpv6_header.icmpv6_reserved= v; end + def icmpv6_reserved; self.icmpv6_header.icmpv6_reserved; end def icmpv6_sum_readable; self.icmpv6_header.icmpv6_sum_readable; end end end From dcdddb9800183fa5b842bd343165bbcfe34519a3 Mon Sep 17 00:00:00 2001 From: Dimitris Grigoriou Date: Tue, 29 Nov 2016 14:37:46 +0200 Subject: [PATCH 2/3] Icmpv6 target address --- lib/packetfu/protos/icmpv6/header.rb | 23 ++++++++++++++++++++--- lib/packetfu/protos/icmpv6/mixin.rb | 5 +++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/packetfu/protos/icmpv6/header.rb b/lib/packetfu/protos/icmpv6/header.rb index fe177f2e..0127a737 100644 --- a/lib/packetfu/protos/icmpv6/header.rb +++ b/lib/packetfu/protos/icmpv6/header.rb @@ -17,7 +17,7 @@ module PacketFu # Int16 :icmp_sum Default: calculated # Checksum # String :body class ICMPv6Header < Struct.new(:icmpv6_type, :icmpv6_code, :icmpv6_sum, - :icmpv6_reserved, :body) + :icmpv6_reserved, :icmpv6_tgt, :body) include StructFu PROTOCOL_NUMBER = 58 @@ -28,6 +28,7 @@ def initialize(args={}) Int8.new(args[:icmpv6_code]), Int16.new(args[:icmpv6_sum]), Int32.new(args[:icmpv6_reserved]), + AddrIpv6.new.read(args[:icmpv6_tgt] || ("\x00" * 16)), StructFu::String.new.read(args[:body]) ) end @@ -65,10 +66,26 @@ def icmpv6_sum; self[:icmpv6_sum].to_i; end def icmpv6_reserved=(i); typecast i; end # Getter for the reserved. def icmpv6_reserved; self[:icmpv6_reserved].to_i; end + # Setter for the target address. + def icmpv6_tgt=(i); typecast i; end + # Getter for the target address. + def icmpv6_tgt; self[:icmpv6_tgt].to_i; end + def icmpv6_sum_readable "0x%04x" % icmpv6_sum end - - end + # Get target address in a more readable form. + def icmpv6_taddr + self[:icmpv6_tgt].to_x + end + + # Set the target address in a more readable form. + def icmpv6_taddr=(str) + self[:icmpv6_tgt].read_x(str) + end + + alias :icmpv6_tgt_readable :icmpv6_taddr + + end end diff --git a/lib/packetfu/protos/icmpv6/mixin.rb b/lib/packetfu/protos/icmpv6/mixin.rb index 76a072a5..709acabb 100644 --- a/lib/packetfu/protos/icmpv6/mixin.rb +++ b/lib/packetfu/protos/icmpv6/mixin.rb @@ -11,6 +11,11 @@ def icmpv6_sum=(v); self.icmpv6_header.icmpv6_sum= v; end def icmpv6_sum; self.icmpv6_header.icmpv6_sum; end def icmpv6_reserved=(v); self.icmpv6_header.icmpv6_reserved= v; end def icmpv6_reserved; self.icmpv6_header.icmpv6_reserved; end + def icmpv6_tgt=(v); self.icmpv6_header.icmpv6_tgt= v; end + def icmpv6_tgt; self.icmpv6_header.icmpv6_tgt; end + def icmpv6_taddr=(v); self.icmpv6_header.icmpv6_taddr= v; end + def icmpv6_taddr; self.icmpv6_header.icmpv6_taddr; end + def icmpv6_tgt_readable; self.icmpv6_header.icmpv6_tgt_readable; end def icmpv6_sum_readable; self.icmpv6_header.icmpv6_sum_readable; end end end From e00f2f21778d05be892b83089e14031e73e6240a Mon Sep 17 00:00:00 2001 From: Dimitris Grigoriou Date: Tue, 29 Nov 2016 14:44:41 +0200 Subject: [PATCH 3/3] Icmpv6 option fields --- lib/packetfu/protos/icmpv6/header.rb | 31 +++++++++++++++++++++++++++- lib/packetfu/protos/icmpv6/mixin.rb | 7 +++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/packetfu/protos/icmpv6/header.rb b/lib/packetfu/protos/icmpv6/header.rb index 0127a737..109fcf22 100644 --- a/lib/packetfu/protos/icmpv6/header.rb +++ b/lib/packetfu/protos/icmpv6/header.rb @@ -17,7 +17,8 @@ module PacketFu # Int16 :icmp_sum Default: calculated # Checksum # String :body class ICMPv6Header < Struct.new(:icmpv6_type, :icmpv6_code, :icmpv6_sum, - :icmpv6_reserved, :icmpv6_tgt, :body) + :icmpv6_reserved, :icmpv6_tgt, :icmpv6_opt_type, + :icmpv6_opt_len, :icmpv6_lla, :body) include StructFu PROTOCOL_NUMBER = 58 @@ -29,6 +30,9 @@ def initialize(args={}) Int16.new(args[:icmpv6_sum]), Int32.new(args[:icmpv6_reserved]), AddrIpv6.new.read(args[:icmpv6_tgt] || ("\x00" * 16)), + Int8.new(args[:icmpv6_opt_type]), + Int8.new(args[:icmpv6_opt_len]), + EthMac.new.read(args[:icmpv6_lla]), StructFu::String.new.read(args[:body]) ) end @@ -70,6 +74,18 @@ def icmpv6_reserved; self[:icmpv6_reserved].to_i; end def icmpv6_tgt=(i); typecast i; end # Getter for the target address. def icmpv6_tgt; self[:icmpv6_tgt].to_i; end + # Setter for the options type field. + def icmpv6_opt_type=(i); typecast i; end + # Getter for the options type field. + def icmpv6_opt_type; self[:icmpv6_opt_type].to_i; end + # Setter for the options length. + def icmpv6_opt_len=(i); typecast i; end + # Getter for the options length. + def icmpv6_opt_len; self[:icmpv6_opt_len].to_i; end + # Setter for the link local address. + def icmpv6_lla=(i); typecast i; end + # Getter for the link local address. + def icmpv6_lla; self[:icmpv6_lla].to_i; end def icmpv6_sum_readable "0x%04x" % icmpv6_sum @@ -85,6 +101,19 @@ def icmpv6_taddr=(str) self[:icmpv6_tgt].read_x(str) end + # Sets the link local address in a more readable way. + def icmpv6_lladdr=(mac) + mac = EthHeader.mac2str(mac) + self[:icmpv6_lla].read mac + self[:icmpv6_lla] + end + + # Gets the link local address in a more readable way. + def icmpv6_lladdr + EthHeader.str2mac(self[:icmpv6_lla].to_s) + end + + alias :icmpv6_lla_readable :icmpv6_lladdr alias :icmpv6_tgt_readable :icmpv6_taddr end diff --git a/lib/packetfu/protos/icmpv6/mixin.rb b/lib/packetfu/protos/icmpv6/mixin.rb index 709acabb..bcec7da7 100644 --- a/lib/packetfu/protos/icmpv6/mixin.rb +++ b/lib/packetfu/protos/icmpv6/mixin.rb @@ -16,6 +16,13 @@ def icmpv6_tgt; self.icmpv6_header.icmpv6_tgt; end def icmpv6_taddr=(v); self.icmpv6_header.icmpv6_taddr= v; end def icmpv6_taddr; self.icmpv6_header.icmpv6_taddr; end def icmpv6_tgt_readable; self.icmpv6_header.icmpv6_tgt_readable; end + def icmpv6_opt_type=(v); self.icmpv6_header.icmpv6_opt_type= v; end + def icmpv6_opt_type; self.icmpv6_header.icmpv6_opt_type; end + def icmpv6_opt_len=(v); self.icmpv6_header.icmpv6_opt_len=v; end + def icmpv6_opt_len;self.icmpv6_header.icmpv6_opt_len; end + def icmpv6_lla=(v); self.icmpv6_header.icmpv6_lla=v; end + def icmpv6_lla;self.icmpv6_header.icmpv6_lla; end + def icmpv6_lla_readable; self.icmpv6_header.icmpv6_lla_readable; end def icmpv6_sum_readable; self.icmpv6_header.icmpv6_sum_readable; end end end