Socket.ip_address_list
给出所有接口的所有IP列表。如何获取特定接口的IP?
我无法将我的Ruby更新为比1.9.3更新的东西。
答案 0 :(得分:1)
根据ip_address_list
documentation, var cars_template = new Ext.XTemplate(
'<tpl =".">',
'<div class="cars-item">',
'<li>',
'<span>Name: </span><span>{[this.updateHtml(values.name)]}</span>',
'</li>',
'</div></tpl>',
{
updateHtml: function(value){
if(value){
value = value.replace(/(?:\r\n|\r|\n)/g, '<br/>');
}
return value;
}
}
);
将本地IP地址作为数组返回。数组包含Socket#ip_address_list
和select
方法。
collect
答案 1 :(得分:0)
Ohai提供的gem Chef可以提取 吨 系统信息,包括特定的IP地址接口。
首先,安装Ohai v7,因为它是与1.9
兼容的最后一个版本gem install 'ohai' --version="<8"
要了解您可以提取的数据,请运行Ohai的命令行应用ohai
。它会向STDOUT打印一个巨大的JSON文档,其中包含有关系统的大量数据。
然后,从您的Ruby代码中提取您正在寻找的网络信息。假设您想要接口en1
的IPv4地址数组,您可以选择它们:
require 'ohai'
# Load Ohai and query for network information
system_info = Ohai::System.new
system_info.all_plugins("network") # Run the network plugins only
# Drill down to en1 addresses
addresses = system_info['network']['interfaces']['en1']['addresses']
# Select the IPv4 addresses
ip_addresses = addresses.select {|ipaddr, attrs| attrs['family'] == 'inet' }.keys
# => ["192.168.1.115"]
提取信息的另一种方法是解析ohai
命令行应用程序中的信息:
require 'json'
system_info = JSON.parse(`ohai`)
system_info['network']['interfaces']['en1']['addresses'].select {|_,h| h['family'] == 'inet'}.keys
# => ["192.168.1.115"]
另一个选项是Sigar gem:
# gem install sigar
require 'sigar'
sigar = Sigar.new
sigar.net_interface_config('en1').address # => "192.168.1.115"