Existe-t-il un moyen facile pour Ruby d'obtenir une liste des adresses IP pour toutes les interfaces réseau? Il doit fonctionner sous Linux/Win/OSX et je préfère ne pas avoir à analyser ifconfig/ipconfig sauf si je dois absolument le faire.Ruby - Un moyen indépendant de la plate-forme pour déterminer les adresses IP de toutes les interfaces réseau?
Répondre
A partir de Ruby 2.1, Socket # getifaddrs est disponible:
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"]
Je ne pense pas que Ruby a un api standard pour cela, mais dans certaines hypothèses cela devrait être assez fiable sur toutes les plateformes:
require 'socket'
Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET).map { |x| x[3] }
Ici, nous partons du principe pas mal de choses comme la machine ayant un nom d'hôte local pointant vers les adresses IP correctes. Donc, ce n'est certainement pas complètement fiable, mais il est indépendant de la plate-forme et fonctionne sur les configurations communes. Editer: Si vous décidez d'analyser syntaxiquement ifconfig, pensez à ruby-ifconfig. Il prétend faire cela sur la plupart des plates-formes non-windows déjà.
Vérifiez le message suivant:
http://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/
Il y a aussi une discussion sur la solution anshul posté dans les commentaires.
Cette méthode fonctionne très bien si je connais les adresses IP auxquelles je veux me connecter pour chaque interface. Malheureusement, je ne peux pas supposer que .. selon les commentaires Ruby n'a pas d'API pour cela, donc je suppose que c'est ifconfig/ipconfig pour moi. – Tindron
"_service_ est un nom de service (" http », "ssh", ...), ou un numéro de port (80, 22, ...) ", donc: echo => 'echo' – andrykonchin
L'exigence de nom d'hôte tue ceci pour moi .. Sur une machine avec 4 interfaces je viens juste de revenir [" 127.0.0.1 "," 127.0.0.1 "] – Tindron
Ummm ... Est-ce que le outil que vous écrivez côté serveur? L'utilisation de snmp est-elle une option? – anshul