Ruby - 与平台无关的方法来确定所有网络接口的IP?

时间:2010-03-16 04:10:14

标签: ruby interface networking ip-address

Ruby中是否有一种简单的方法可以获取所有网络接口的IP地址列表?它需要在Linux / Win / OSX中工作,我宁愿不必解析ifconfig / ipconfig,除非我绝对必须这样做。

3 个答案:

答案 0 :(得分:10)

从Ruby 2.1开始,Socket#getifaddrs可用:

001:0> require 'socket'
=> true
002:0> Socket.getifaddrs.map { |i| i.addr.ip_address if i.addr.ipv4? }.compact
=> ["127.0.0.1", "192.168.1.121", "192.168.1.181"]

答案 1 :(得分:2)

我不认为ruby对此有一个标准的api,但在某些假设下,这应该在各个平台上相当可靠:

require 'socket'
Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET).map { |x| x[3] }

这里我们假设有很多东西,比如机器的本地主机名指向正确的IP地址。因此,这绝对不是完全可靠的,但它与平台无关,适用于常见设置。

编辑:如果您决定开始解析ifconfig,请考虑分叉ruby-ifconfig。它声称已经在大多数非Windows平台上实现了这一点。

答案 2 :(得分:2)

查看以下帖子:

http://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/

还有一篇关于anshul在评论中发布的解决方案的讨论。