Ruby - независимый от платформы способ определения IP-адресов всех сетевых интерфейсов? - PullRequest
7 голосов
/ 16 марта 2010

Есть ли в Ruby простой способ получить список IP-адресов для всех сетевых интерфейсов? Он должен работать в Linux / Win / OSX, и я предпочел бы не анализировать ifconfig / ipconfig, если только мне это не нужно

Ответы [ 3 ]

10 голосов
/ 11 февраля 2014

Начиная с Ruby 2.1, доступен сокет # 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"]
2 голосов
/ 16 марта 2010

Проверьте следующий пост:

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

Существует также обсуждение решения anshul, размещенного в комментариях.

2 голосов
/ 16 марта 2010

Я не думаю, что у ruby ​​есть стандартный API для этого, но при некоторых предположениях это должно быть достаточно надежно для разных платформ:

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

Здесь мы предполагаем довольно много вещей, таких как машина с локальным именем хоста, указывающая на правильные IP-адреса. Таким образом, это определенно не совсем надежно, но оно не зависит от платформы и работает на общих настройках.

Редактировать: Если вы решите приступить к разбору ifconfig, подумайте о разветвлении ruby-ifconfig . Он заявляет, что делает это на большинстве платформ, отличных от Windows.

...