class PacketFu::UDPHeader
UDPHeader is a complete UDP struct, used in UDPPacket. Many Internet-critical protocols rely on UDP, such as DNS and World of Warcraft.
For more on UDP packets, see www.networksorcery.com/enp/protocol/udp.htm
Header Definition
Int16 :udp_src Int16 :udp_dst Int16 :udp_len Default: calculated Int16 :udp_sum Default: 0. Often calculated. String :body
Public Class Methods
# File lib/packetfu/protos/udp/header.rb, line 18 def initialize(args={}) super( Int16.new(args[:udp_src]), Int16.new(args[:udp_dst]), Int16.new(args[:udp_len] || udp_calc_len), Int16.new(args[:udp_sum]), StructFu::String.new.read(args[:body]) ) end
Public Instance Methods
Reads a string to populate the object.
# File lib/packetfu/protos/udp/header.rb, line 34 def read(str) force_binary(str) return self if str.nil? self[:udp_src].read(str[0,2]) self[:udp_dst].read(str[2,2]) self[:udp_len].read(str[4,2]) self[:udp_sum].read(str[6,2]) self[:body].read(str[8,str.size]) self end
Returns the object in string form.
# File lib/packetfu/protos/udp/header.rb, line 29 def to_s self.to_a.map {|x| x.to_s}.join end
Returns the true length of the UDP packet.
# File lib/packetfu/protos/udp/header.rb, line 63 def udp_calc_len body.to_s.size + 8 end
Equivalent to #udp_dst
# File lib/packetfu/protos/udp/header.rb, line 91 def udp_dport self.udp_dst end
Equivalent to #udp_dst=
# File lib/packetfu/protos/udp/header.rb, line 96 def udp_dport=(arg) self.udp_dst=(arg) end
Getter for the UDP destination port.
# File lib/packetfu/protos/udp/header.rb, line 52 def udp_dst; self[:udp_dst].to_i; end
Setter for the UDP destination port.
# File lib/packetfu/protos/udp/header.rb, line 50 def udp_dst=(i); typecast i; end
Getter for the length field.
# File lib/packetfu/protos/udp/header.rb, line 56 def udp_len; self[:udp_len].to_i; end
Setter for the length field. Usually should be recalc()'ed instead.
# File lib/packetfu/protos/udp/header.rb, line 54 def udp_len=(i); typecast i; end
Recalculates calculated fields for UDP.
# File lib/packetfu/protos/udp/header.rb, line 68 def udp_recalc(args=:all) arg = arg.intern if arg.respond_to? :intern case args when :udp_len self.udp_len = udp_calc_len when :all self.udp_recalc(:udp_len) else raise ArgumentError, "No such field `#{arg}'" end end
Equivalent to udp_src.to_i
# File lib/packetfu/protos/udp/header.rb, line 81 def udp_sport self.udp_src end
Equivalent to #udp_src=
# File lib/packetfu/protos/udp/header.rb, line 86 def udp_sport=(arg) self.udp_src=(arg) end
Getter for the UDP source port.
# File lib/packetfu/protos/udp/header.rb, line 48 def udp_src; self[:udp_src].to_i; end
Setter for the UDP source port.
# File lib/packetfu/protos/udp/header.rb, line 46 def udp_src=(i); typecast i; end
Getter for the checksum.
# File lib/packetfu/protos/udp/header.rb, line 60 def udp_sum; self[:udp_sum].to_i; end
Setter for the checksum. Usually should be recalc()'ed instad.
# File lib/packetfu/protos/udp/header.rb, line 58 def udp_sum=(i); typecast i; end
Readability aliases
# File lib/packetfu/protos/udp/header.rb, line 102 def udp_sum_readable "0x%04x" % udp_sum end