Ruby—确定所有网络接口IP的独立于平台的方法?

Ruby—确定所有网络接口IP的独立于平台的方法?,ruby,interface,networking,ip-address,Ruby,Interface,Networking,Ip Address,在Ruby中是否有一种简单的方法可以让我获得所有网络接口的IP地址列表?它需要在Linux/Win/OSX中工作,我宁愿不必解析ifconfig/ipconfig,除非我必须这样做。我认为ruby对此没有标准api,但在某些假设下,这在不同平台上应该相当可靠: require 'socket' Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET).map { |x| x[3] } 在这里,我们假设了很多事情,比如机器有

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

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

require 'socket'
Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET).map { |x| x[3] }
在这里,我们假设了很多事情,比如机器有一个指向正确ip地址的本地主机名。因此,这肯定不是完全可靠的,但它是独立于平台的,并且可以在通用设置上工作


<>编辑:如果你决定深入剖析IFCONFIG,请考虑分叉。它声称已经在大多数非windows平台上做到了这一点。

查看以下帖子:

评论中还对anshul的解决方案进行了讨论。

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

“服务是一个服务名称(“http”、“ssh”、…)或一个端口号(80、22、…”),因此:echo=>“echo”主机名要求对我来说就不需要了。。在一台有4个接口的机器上,我刚刚返回[“127.0.0.1”,“127.0.0.1”]嗯。。。是您在服务器端编写的工具吗?使用snmp是一种选择吗?如果我知道每个接口要连接的IP地址,这种方法非常有效。不幸的是,我不能假设。。根据评论,Ruby没有用于此的API,所以我想我应该使用ifconfig/ipconfig。