class Middleman::DnsResolver

This resolves IP address to names and vice versa

Attributes

resolvers[R]

Public Class Methods

new(opts={}) click to toggle source

Create resolver

First the local resolver is used. If environment variable HOSTSRC is given this file is used for local name lookup.

@param [#getnames, getaddresses] network_resolver

The resolver which uses a network name server to resolve ip addresses
and names.

@param [#getnames, getaddresses] local_resolver

The resolver uses /etc/hosts on POSIX-systems and
C:\Windows\System32\drivers\etc\hosts on Windows-operating systems to
resolve ip addresses and names.

First the local resolver is queried. If this raises an error or returns nil or [] the network resolver is queried.

# File lib/middleman-core/dns_resolver.rb, line 30
def initialize(opts={})
  @resolvers = []
  @resolvers << opts.fetch(:hosts_resolver, HostsResolver.new)

  if RUBY_VERSION >= '2.1'
    require 'middleman-core/dns_resolver/local_link_resolver'
    @resolvers << opts.fetch(:local_link_resolver, LocalLinkResolver.new)
  end

  @resolvers << opts.fetch(:network_resolver, NetworkResolver.new)
end

Public Instance Methods

ips_for(name) click to toggle source

Get ips for given name

First the local resolver is used. On POSIX-systems /etc/hosts is used. On Windows C:WindowsSystem32driversetchosts is used.

@param [String] name

The name which should be resolved.
# File lib/middleman-core/dns_resolver.rb, line 63
def ips_for(name)
  resolvers.each do |r|
    ips = r.getaddresses(name)

    return ips unless ips.nil? || ips.empty?
  end

  []
end
names_for(ip) click to toggle source

Get names for given ip

@param [String] ip

The ip which should be resolved.
# File lib/middleman-core/dns_resolver.rb, line 46
def names_for(ip)
  resolvers.each do |r|
    names = r.getnames(ip)

    return names unless names.nil? || names.empty?
  end

  []
end