2010-03-16 5 views

Antwort

8

Wie von Ruby 2.1, Socket # getifaddrs ist verfügbar:

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

Ich glaube nicht, Rubin eine Standard-API für diese hat aber unter bestimmten Voraussetzungen sollte diese auf verschiedenen Plattformen recht zuverlässig sein:

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

Hier haben wir schon einige Dinge wie die Maschine unter der Annahme einer lokalen Hostnamen mit auf die richtigen IP-Adressen zeigen. Also, das ist definitiv nicht absolut zuverlässig, aber es ist plattformunabhängig und arbeitet an den üblichen Setups.

Bearbeiten: Wenn Sie sich entscheiden, zum Analysieren von ifconfig zu gehen, erwägen Sie, ruby-ifconfig Forking. Sie behauptet, dies auf den meisten Nicht-Windows-Plattformen bereits zu tun.

+0

"_service_ ist ein Service-Namen (" http“, "ssh", ...), oder eine Portnummer (80, 22, ...) ", so: echo => 'echo' – andrykonchin

+1

Die Hostname Anforderung tötet dies für mich .. Auf einer Maschine mit 4 Schnittstellen bekomme ich einfach zurück [" 127.0.0.1 "," 127.0.0.1 "] – Tindron

+0

Ummm ... Ist die Tool schreiben Sie Server-Seite? Ist snmp eine Option? – anshul

2

Schauen Sie sich die folgenden Beitrag:

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

Es gibt auch eine Diskussion über die Lösung anshul in den Kommentaren gepostet.

+1

Diese Methode funktioniert gut, wenn ich IP-Adressen kenne, die ich für jede Schnittstelle verbinden möchte. Leider kann ich nicht davon ausgehen, dass ... laut den Kommentaren Ruby keine API dafür hat, also denke ich es ist ifconfig/ipconfig für mich. – Tindron

Verwandte Themen