2010-03-16 20 views

Respuesta

8

A partir de Rubí 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"] 
1

no creo rubí tiene una API estándar para esto, pero bajo ciertos supuestos esto debería ser bastante fiable en todas las plataformas:

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

Aquí estamos asumiendo bastantes cosas como la máquina que tiene un nombre local apuntando a las direcciones IP correctas. Por lo tanto, definitivamente no es completamente confiable, pero es independiente de la plataforma y funciona en las configuraciones comunes.

Editar: Si decide ir a analizar ifconfig, considere la posibilidad de forking ruby-ifconfig. Afirma hacerlo en la mayoría de las plataformas que no son Windows.

+0

"_service_ es un nombre de servicio (" http", "ssh", ...), o un número de puerto (80, 22, ...) ", entonces: echo => 'echo' – andrykonchin

+1

El requisito de nombre de host me lo quita ... En una máquina con 4 interfaces acabo de recuperar [" 127.0.0.1 "," 127.0.0.1 "] – Tindron

+0

Ummm ... Es el herramienta que está escribiendo en el lado del servidor? ¿Está usando snmp una opción? – anshul

2

revisa el siguiente mensaje:

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

También hay una discusión sobre la solución anshul publicado en los comentarios.

+1

Ese método funciona muy bien si sé las direcciones IP a las que quiero conectarme para cada interfaz. Desafortunadamente no puedo suponer que ... según los comentarios, Ruby no tiene API para esto, así que supongo que es ifconfig/ipconfig para mí. – Tindron

Cuestiones relacionadas