Ruby中是否有一种简单的方法可以获取所有网络接口的IP地址列表?它需要在Linux / Win / OSX中工作,我宁愿不必解析ifconfig / ipconfig,除非我绝对必须这样做。
答案 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在评论中发布的解决方案的讨论。