Gibt es einen einfachen Weg in Ruby für mich, eine Liste der IP-Adressen für alle Netzwerkschnittstellen zu bekommen? Es muss in Linux/Win/OSX arbeiten und ich würde es vorziehen, ifconfig/ipconfig nicht zu analysieren, es sei denn, ich muss es unbedingt tun.Ruby - Plattformunabhängige Möglichkeit, IPs aller Netzwerkschnittstellen zu bestimmen?
Antwort
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"]
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.
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.
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
"_service_ ist ein Service-Namen (" http“, "ssh", ...), oder eine Portnummer (80, 22, ...) ", so: echo => 'echo' – andrykonchin
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
Ummm ... Ist die Tool schreiben Sie Server-Seite? Ist snmp eine Option? – anshul