3 回答

TA貢獻1865條經驗 獲得超7個贊
主機名
在Ruby中獲取主機名的一種簡單方法是:
require 'socket'
hostname = Socket.gethostname
問題在于,這依賴于主機知道自己的名稱,因為主機使用gethostname或uname系統調用,因此對于原始問題將不起作用。
從功能上講,這與hostname答案相同,而無需調用外部程序。主機名可以是完全限定的,也可以不是完全限定的,具體取決于計算機的配置。
IP地址
從ruby 1.9開始,您還可以使用Socket庫獲取本地地址列表。 ip_address_list返回AddrInfo對象的數組。如何選擇取決于您要做什么以及擁有多少接口,但是以下示例僅選擇第一個非環回IPV4 IP地址作為字符串:
require 'socket'
ip_address = Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }.ip_address

TA貢獻1824條經驗 獲得超8個贊
一臺服務器通常具有多個接口,至少一個專用接口和一個公用接口。
由于這里的所有答案都是針對這種簡單情況的,因此一種更干凈的方法是向Socket索要電流,ip_address_list()如下所示:
require 'socket'
def my_first_private_ipv4
Socket.ip_address_list.detect{|intf| intf.ipv4_private?}
end
def my_first_public_ipv4
Socket.ip_address_list.detect{|intf| intf.ipv4? and !intf.ipv4_loopback? and !intf.ipv4_multicast? and !intf.ipv4_private?}
end
兩者都返回一個Addrinfo對象,因此,如果需要一個字符串,則可以使用該ip_address()方法,如下所示:
ip= my_first_public_ipv4.ip_address unless my_first_public_ipv4.nil?
通過更改用于過濾所需接口地址的Addrinfo方法,您可以輕松地找到更適合您的情況的解決方案。
- 3 回答
- 0 關注
- 3299 瀏覽
添加回答
舉報