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”).

Attributes

address[R]

Gets the current IPv4 address for this record.

Returns an instance of IPAddr.

Public Instance Methods

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 39
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 49
def value
  address.to_s
end

Private Instance Methods

build_pack() click to toggle source
# File lib/net/dns/rr/a.rb, line 103
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 83
def check_address(input)
  address = case input
  when IPAddr
    input
  # Address in numeric form
  when Integer
    IPAddr.new(input, Socket::AF_INET)
  when String
    IPAddr.new(input)
  else
    raise ArgumentError, "Invalid IP address `#{input}'"
  end

  unless 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 108
def get_data
  @address_pack
end
get_inspect() click to toggle source
# File lib/net/dns/rr/a.rb, line 79
def get_inspect
  value
end
set_type() click to toggle source
# File lib/net/dns/rr/a.rb, line 75
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 69
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 55
def subclass_new_from_hash(options)
  if options.key?(:address)
    @address = check_address(options[:address])
  elsif options.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 65
def subclass_new_from_string(str)
  @address = check_address(str)
end