2008-12-18 10 views
0

Je peux, sur certains de mes systèmes, obtenir mon adresse IP (format 192.68.mn) en faisant ceci:Dans Ruby, comment obtenir son octet IP sans passer par DNS?

addr = IPSocket::getAddress(Socket.gethostname()) 

... le problème est que cela ne fonctionne que si le nom de la machine locale utilise pour lui-même est le nom que le serveur DNS lui associe.

Comment * & # (dur peut-il être pour le rubis de revenir juste son adresse IP de l'interface principale? Je dois le faire d'une manière plate-forme indépendante ou je venais appeler ifconfig ou ipconfig et l'analyse syntaxique.

+0

Définir "interface primaire" s'il vous plaît. Quelle est l'interface principale si la machine en a plusieurs. – Keltia

+0

Un octet est juste 8 bits. Vous voulez clairement plus que cela; mieux vaut dire "adresse". –

Répondre

0

que diriez-vous de cette

require 'socket' 
ipaddr = UDPSocket.open {|s| s.connect('65.59.196.211'); s.addr.last } 

l'adresse IP peut être tout ce qui est vrai (ce qui est le je suis arrivé pour stackoverflow.com), mais il devrait y avoir une rea adresse IP chable sur l'interface pour laquelle vous voulez obtenir l'adresse IP. Comme c'est une socket UDP, aucune connexion n'est réellement tentée, mais elle essaye de comprendre quelle interface utiliser.