解决假主机名?

时间:2014-06-24 05:30:07

标签: ruby

我创建了这个DNS查找脚本,它正在做一些非常奇怪的事情。相关代码:

  def resolver
    begin
      Resolv.each_address(@host) do |ip|
        if ip == false
          puts "Failed to resolve address"
        else
          puts ip
        end
      end
    rescue ArgumentError
      puts "You must specify a hostname."
    end
  end

除了一部分外,所有部分都按预期工作。如果我输入废话,例如:fdjafaldjfafbfda,它会成功解析一个地址。每次它都是相同的地址,即使我输入的随机垃圾是不同的。我想知道为什么会这样。我假设它与代码的if ip == false部分有关。

1 个答案:

答案 0 :(得分:1)

当我运行示例的稍微修改版本时

require 'resolv'

def resolver(host)
    begin
      puts "resolving \"#{host}\""
      Resolv.each_address(host) do |ip|
        if ip == false
          puts "Failed to resolve address"
        else
          puts ip
        end
      end
    rescue ArgumentError
      puts "You must specify a hostname."
    end
  end

resolver(ARGV[0])

  ruby resolve.rb www.stackoverflow.fake.domain

我没有按预期获得IP地址。如果运行它会给你一个不同的结果,你可能会遇到一个"功能"您的DNS提供商。例如。 Verisign在2003年更改了其查找政策 - 当有人查询不存在的域名时,他被重定向到Verisign广告页面,请参阅Slashdot discussion on Verisign policy from 2003