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
- 1. Plattformunabhängige Möglichkeit, Font-Verzeichnis zu bekommen?
- 2. Amazon EC2 mehrere Netzwerkschnittstellen + WAN
- 3. Start Container mit mehreren Netzwerkschnittstellen
- 4. Plattformunabhängige Systemsperre für Kommandozeilen-Programm
- 5. Standort von Ruby Gems bestimmen
- 6. Bevorzugte Fallback-Netzwerkschnittstellen mit Vagrant?
- 7. Python "Totem" Standorte (plattformunabhängige Pfade)
- 8. Datenbankverschiebung führt zu blockierten IPs?
- 9. Liste aller Ruby „besondere Anführungszeichen“
- 10. plattformunabhängige unique machine id java
- 11. Bessere Möglichkeit, einen Ruby-Hash zu füllen?
- 12. Programmatische Möglichkeit, Ruby Schlüsselwörter zu erhalten
- 13. Schnelle Möglichkeit zu bestimmen, ob eine PID (Windows) existiert?
- 14. Gibt es eine Möglichkeit, das aktuelle Outlook-Aktivitätsniveau zu bestimmen?
- 15. Gibt es eine Möglichkeit, den Typ eines Mountpoints zu bestimmen?
- 16. Gibt es eine Möglichkeit zu bestimmen, ob Browser Telefonverbindungen
- 17. Gibt es eine Möglichkeit, den * tatsächlichen * Sitzungsspeicherpfad zu bestimmen?
- 18. Eine zuverlässige Möglichkeit zu bestimmen, ob NTFS-Berechtigungen vererbt wurden
- 19. Schnellste Möglichkeit zu bestimmen, wo PHP-Skript beendet
- 20. Möglichkeit zu bestimmen, ob in IDE ausgeführt wird oder nicht?
- 21. Gibt es eine Möglichkeit, die Hintergrundfarbe eines Terminals zu bestimmen?
- 22. Linux-Netzwerkschnittstellen-Nutzungsüberwachung in C/C++
- 23. MySql Abfrage auf doppelte ips zu überprüfen
- 24. Löschen aller Sonderzeichen aus einer Zeichenfolge - Ruby
- 25. Verwenden Sie mehrere Netzwerkschnittstellen in einer App
- 26. Wie automatisch überbrückte Netzwerkschnittstellen in Vagrant auswählen?
- 27. Wie bindet OSPF an mehrere Netzwerkschnittstellen?
- 28. Wie Tupeltypen zu bestimmen?
- 29. plattformunabhängige Version von/var/lib und ~/.config
- 30. .htaccess Wartung Mehrere IPs
"_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