ruby - 获取 Ruby 上特定网络接口(interface)的 IP 地址

标签 ruby linux

我需要获取每个网络接口(interface)的 IP 地址。问题是标准的 ruby​​ 方法 Socket.ip_address_list 只返回地址列表,但没有关于哪个接口(interface)对应 IP 地址的信息。

#<Addrinfo: 127.0.0.1>
#<Addrinfo: 192.168.13.175>
#<Addrinfo: 172.17.0.1>
#<Addrinfo: ::1>
#<Addrinfo: fe80::4685:ff:fe0d:c406%wlan0>

我基本上是在寻找 NodeJS os.networkInterfaces()[interfaceName] 的等价物。

如何知道特定网络接口(interface)的 IP 地址?

最佳答案

如果有办法使用 Ruby 1.9.X 获取此信息,请告诉我

我将 Ruby 更新到 2.3 版本,然后使用 Socket.getifaddrs(自 Ruby 2.1 起可用)。

require 'socket'
addr_infos = Socket.getifaddrs
addr_infos.each do |addr_info|
    if addr_info.addr
        puts "#{addr_info.name} has address #{addr_info.addr.ip_address}" if addr_info.addr.ipv4?
    end
end

输出:

$ ruby2.3 getInterfaces.rb 
lo has address 127.0.0.1
wlan0 has address 192.168.13.175
docker0 has address 172.17.0.1

关于ruby - 获取 Ruby 上特定网络接口(interface)的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109656/

相关文章:

ruby - 为 DataMapper 安装 do_sqlite3 时出现问题

ruby-on-rails - Factory_girl 验证问题

Ruby shell 命令评估不适用于别名

ruby-on-rails - 应该从战壕中测试工作流程

linux - 找不到错误 : Module java. base,在 Fedora 上尝试 jlink 时需要

ruby - capybara 元素此时不可点击

linux - 如何显示 dockers 组中的所有用户?

linux - 如何阅读有关内置 zsh 命令的文档?

linux - 为什么 reading/dev/random byte block 如此频繁?

Linux 中的 Python shell