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

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

从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"] 

看看以下post:

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

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

我不认为ruby有一个标准的API,但在某些假设下,这应该是跨平台相当可靠的:

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

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

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