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平台上这样做了。