获取特定接口的IP

时间:2015-08-10 18:34:30

标签: ruby

Socket.ip_address_list给出所有接口的所有IP列表。如何获取特定接口的IP?

我无法将我的Ruby更新为比1.9.3更新的东西。

2 个答案:

答案 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_listselect方法。

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"