class Net::DNS::RR::A

IPv4 Address Record (A)

Class for DNS IPv4 Address (A) resource records.

The resource data is an IPv4 (i.e. 32 bit long) address, hold in the instance variable address.

a = Net::DNS::RR::A.new("localhost.movie.edu. 360 IN A 127.0.0.1")

a = Net::DNS::RR::A.new(:name    => "localhost.movie.edu.",
                        :ttl     => 360,
                        :cls     => Net::DNS::IN,
                        :type    => Net::DNS::A,
                        :address => "127.0.0.1" )

When computing binary data to transmit the RR, the RDATA section is an Internet address expressed as four decimal numbers separated by dots without any embedded space (e.g. “10.2.0.52” or “192.0.5.6”).

Public Instance Methods

address() click to toggle source

Gets the current IPv4 address for this record.

Returns an instance of IPAddr.

# File lib/net/dns/rr/a.rb, line 30
def address
  @address
end
address=(string_or_ipaddr) click to toggle source

Assigns a new IPv4 address to this record, which can be in the form of a String or an IPAddr object.

Examples

a.address = "192.168.0.1"
a.address = IPAddr.new("10.0.0.1")

Returns the new allocated instance of IPAddr.

# File lib/net/dns/rr/a.rb, line 43
def address=(string_or_ipaddr)
  @address = check_address(string_or_ipaddr)
  build_pack
  @address
end
value() click to toggle source

Gets the standardized value for this record, represented by the value of address.

Returns a String.

# File lib/net/dns/rr/a.rb, line 53
def value
  address.to_s
end

Private Instance Methods

build_pack() click to toggle source
# File lib/net/dns/rr/a.rb, line 111
def build_pack
  @address_pack = @address.hton
  @rdlength = @address_pack.size
end
check_address(input) click to toggle source
# File lib/net/dns/rr/a.rb, line 90
def check_address(input)
  address = case input
    when IPAddr
      input
    when Integer # Address in numeric form
      tmp = [(input >> 24), (input >> 16) & 0xFF, (input >> 8) & 0xFF, input & 0xFF]
      tmp = tmp.collect { |x| x.to_s }.join(".")
      IPAddr.new(tmp)
    when String
      IPAddr.new(input)
    else
      raise ArgumentError, "Invalid IP address `#{input}'"
  end

  if !address.ipv4?
    raise(ArgumentError, "Must specify an IPv4 address")
  end

  address
end
get_data() click to toggle source
# File lib/net/dns/rr/a.rb, line 116
def get_data
  @address_pack
end
get_inspect() click to toggle source
# File lib/net/dns/rr/a.rb, line 85
def get_inspect
  value
end
set_type() click to toggle source
# File lib/net/dns/rr/a.rb, line 81
def set_type
  @type = Net::DNS::RR::Types.new("A")
end
subclass_new_from_binary(data, offset) click to toggle source
# File lib/net/dns/rr/a.rb, line 74
def subclass_new_from_binary(data, offset)
  a, b, c, d = data.unpack("@#{offset} CCCC")
  @address = IPAddr.new("#{a}.#{b}.#{c}.#{d}")
  offset + 4
end
subclass_new_from_hash(options) click to toggle source
# File lib/net/dns/rr/a.rb, line 60
def subclass_new_from_hash(options)
  if options.has_key?(:address)
    @address = check_address(options[:address])
  elsif options.has_key?(:rdata)
    @address = check_address(options[:rdata])
  else
    raise ArgumentError, ":address or :rdata field is mandatory"
  end
end
subclass_new_from_string(str) click to toggle source
# File lib/net/dns/rr/a.rb, line 70
def subclass_new_from_string(str)
  @address = check_address(str)
end