2010-03-16 9 views
7

क्या सभी नेटवर्क इंटरफेस के लिए आईपी पते की सूची प्राप्त करने के लिए रूबी में मेरे लिए एक आसान तरीका है? इसे लिनक्स/विन/ओएसएक्स में काम करने की ज़रूरत है और अगर मैं पूरी तरह से करना चाहता हूं तो मैं ifconfig/ipconfig को पार्स करना पड़ेगा।रूबी - सभी नेटवर्क इंटरफेस के आईपी निर्धारित करने के लिए प्लेटफार्म स्वतंत्र तरीका?

उत्तर

8

रूबी 2.1 के रूप में, सॉकेट # getifaddrs उपलब्ध है:

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

मुझे नहीं लगता कि माणिक इस के लिए एक मानक एपीआई है, लेकिन कुछ मान्यताओं के तहत इस प्लेटफ़ॉर्म पर काफी विश्वसनीय होना चाहिए है:

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

यहाँ हम मशीन एक स्थानीय होस्ट नाम होने की तरह काफी कुछ बातें मानते हैं सही आईपी पते पर इशारा करते हुए। इसलिए, यह निश्चित रूप से पूरी तरह से विश्वसनीय नहीं है लेकिन यह मंच स्वतंत्र है और सामान्य सेटअप पर काम करता है।

संपादित करें: यदि आप ifconfig को पार्स करने के लिए नीचे उतरने का निर्णय लेते हैं, तो ruby-ifconfig को फोकस करने पर विचार करें। यह पहले से ही अधिकांश गैर-विंडोज प्लेटफार्मों पर ऐसा करने का दावा करता है।

+0

"_service_ एक सेवा का नाम है (" http "," ssh ", ...), या एक पोर्ट संख्या (80, 22, ...) ", तो: echo => 'echo' – andrykonchin

+1

होस्टनाम आवश्यकता मेरे लिए इसे मार देती है .. 4 इंटरफेस वाली मशीन पर मैं बस वापस आ जाता हूं [" 127.0.0.1 "," 127.0.0.1 "] – Tindron

+0

उम्म्म ... क्या है उपकरण आप सर्वर पक्ष लिख रहे हैं? एक विकल्प snmp का उपयोग कर रहा है? – anshul

2

पद निम्न देखें:

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

वहाँ भी समाधान अंशुल टिप्पणी में तैनात पर एक चर्चा है।

+1

यह विधि बहुत अच्छा काम करती है अगर मुझे पता है कि मैं प्रत्येक इंटरफ़ेस के लिए कनेक्ट करना चाहता हूं। दुर्भाग्य से मैं यह नहीं मान सकता .. टिप्पणियों के मुताबिक रुबी के पास इसके लिए कोई एपीआई नहीं है इसलिए मुझे लगता है कि यह मेरे लिए ifconfig/ipconfig है। – Tindron