2016-04-14 129 views
0

如何獲取域的IP地址和該域的服務器信息,以確定服務器信息是否爲Apache,nginix等。獲取域的IP地址和後端服務器信息

我對如何獲得IP一個不錯的主意,但由於某些原因,它不會輸出正確的信息:

require 'socket' 
IPSocket::getaddress('http://www.prairiegraphicdesign.com/phpStuff/week2Shopping/cartAdd.php?action=add&id=4') 
#<= irb(main):001:0> require 'socket' 
# => true  
# irb(main):002:0>IPSocket::getaddress('http://www.prairiegraphicdesign.com/phpStuff/week2Shopping/cartAdd.php?action=add&id=4') 
# SocketError: getaddrinfo: No such host is known. 
#  from (irb):2:in `getaddress' 
#  from (irb):2 
#  from C:/Ruby22/bin/irb:11:in `<main>' 

這是因爲我需要把衣服脫了URL到原來的網址是什麼?

http://www.prairiegraphicdesign.com 

回答

0

這是一個URL,而getaddress不知道該怎麼做。它所能處理的全部是完全合格的域名(FQDN),如「example.com」。

相反,你需要打破它:

require 'uri' 

uri = URI.parse('http://www.prairiegraphicdesign.com/phpStuff/week2Shopping/cartAdd.php?action=add&id=4') 

uri.host 
#=> "www.prairiegraphicdesign.com" 

,如果你喜歡,你可以解決一個地址。

至於它運行的服務器軟件,你需要做一個HTTP請求到服務器,並從響應中提取合適的標題:

require 'net/http' 

res = Net::HTTP.get_response(uri) 

res['server'] 
#=> "Microsoft-IIS/6.0" 
+0

這是有道理的,所以我可以解決與插座後的地址它被解析正確嗎? – JasonBorne

+0

有很多方法可以解決它,包括'Socket'庫。有關更詳細的信息,你可以嘗試[Net :: DNS](https://github.com/bluemonk/net-dns),它會給你一個記錄列表,而不僅僅是一個類型。 – tadman