2010-03-16 15 views

cevap

8

, 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"] 
1
ben yakut bunun için standart bir API vardır ama bazı varsayımlar altında bu platformlar arasında oldukça güvenilir olmalı sanmıyorum

: 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.

+0

"_service_ bir hizmetin adıdır (" http", "ssh", ...) ya da bir port numarası (80, 22, ...) ", yani: echo => 'echo' – andrykonchin

+1

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

+0

Ummm ... araç tarafı yazıyor musunuz? Snmp bir seçenek kullanıyor mu? – anshul

2

Kontrol dışarı aşağıdaki mesaj:

yorumlarla gönderilmiş çözüm anshul bir tartışma da var

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

. Ruby 2.1 itibariyle

+1

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