2015-10-13 3 views
0

Есть ли способ получить имя хоста домена в рубине?Получение имени хоста домена в ruby ​​

Например:

$ host api.heroku.com 
api.heroku.com is an alias for api-default.herokussl.com. 
api-default.herokussl.com is an alias for elb027033-298234319.us-east-1.elb.amazonaws.com. 
elb027033-298234319.us-east-1.elb.amazonaws.com has address 23.23.76.65 
elb027033-298234319.us-east-1.elb.amazonaws.com has address 23.21.240.208 
elb027033-298234319.us-east-1.elb.amazonaws.com has address 107.22.242.236 

хозяин будет лучшим примером, потому что он будет также показать, если домен/поддомен указывает на другой хост, как amazonAWS или т.п.

+0

[ 'Resolv'] (http://ruby-doc.org/stdlib-1.9.2/libdoc/resolv/rdoc/Resolv.html) - Документы даже есть некоторые хорошие примеры. – Amadan

+0

Какие документы? Я пробовал несколько вещей с помощью Resolv, но не так полезен, как выполнение команды host domain.com из ruby. – user3610137

ответ

1

не так полезный как выполнение host domain.com команда от ruby ​​

Я прошу отличаться ... (но это связано с пониманием того, какие данные вы хотите и как работает DNS).

require 'resolv' 

def host(address) 
    Resolv::DNS.open do |dns| 
    loop do 
     ress = dns.getresources address, Resolv::DNS::Resource::IN::CNAME 
     break if ress.empty? 
     canonical_name = ress.first.name.to_s 
     puts "#{address} is an alias for #{canonical_name}" 
     address = canonical_name 
    end 

    ress = dns.getresources address, Resolv::DNS::Resource::IN::A 
    addresses = ress.each do |r| 
     puts "#{address} has address #{r.address.to_s}" 
    end 
    end 
    return 
end 

host("api.heroku.com") 
+0

Ничего себе! это именно то, что я искал! Благодарю. – user3610137