Tüm ağ arabirimleri için IP adreslerinin bir listesini almak için Ruby'de kolay bir yol var mı? Linux/Win/OSX'te çalışması gerekiyor ve kesinlikle mecbur kalmadıkça ifconfig/ipconfig'i ayrıştırmak zorunda kalmamayı tercih ederim.Ruby - Tüm ağ arayüzlerinin IP'lerini belirlemek için Platform bağımsız yolu?
cevap
, Soket # getifaddrs mevcuttur:
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"]
: Burada
require 'socket'
Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET).map { |x| x[3] }
yerel bir hostname sahip makine gibi epeyce şeyler varsayıyoruz Doğru ip adreslerini işaret ediyor. Yani, bu kesinlikle tamamen güvenilir değildir, ancak platformdan bağımsızdır ve ortak kurulumlarda çalışır.
Düzenleme: Eğer ifconfig dosyasını ayrıştırmaya karar verirseniz, ruby-ifconfig forking'i düşünün. Bunu, çoğu Windows olmayan platformlarda zaten yapıyor.
Kontrol dışarı aşağıdaki mesaj:
yorumlarla gönderilmiş çözüm anshul bir tartışma da varhttp://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/
. Ruby 2.1 itibariyle
Her arabirim için bağlanmak istediğim IP adreslerini biliyorsanız bu yöntem harika çalışır. Ne yazık ki bunu kabul edemem .. Ruby'nin bu konuda bir yorumu yok, bu yüzden benim için ifconfig/ipconfig olduğunu tahmin ediyorum. – Tindron
"_service_ bir hizmetin adıdır (" http", "ssh", ...) ya da bir port numarası (80, 22, ...) ", yani: echo => 'echo' – andrykonchin
Hostname gereksinimi bunu benim için öldürür. 4 arayüzlü bir makinede geri dönüyorum [" 127.0.0.1 "," 127.0.0.1 "] – Tindron
Ummm ... araç tarafı yazıyor musunuz? Snmp bir seçenek kullanıyor mu? – anshul