2012-11-06 34 views
8

में आईपी एड्रेस को 32 बिट पूर्णांक में कनवर्ट करें। मैं एक कठपुतली टेम्पलेट के लिए रूबी में 32 बिट पूर्णांक में आईपी एड्रेस को कन्वर्ट करने का तरीका खोजने का प्रयास कर रहा हूं।रूबी

इस प्रकार मैंने बैश में रूपांतरण किया।

[email protected]:~# cat test.sh 
#!/bin/bash 

#eth0 address is 10.0.2.15 
privip=`ifconfig eth0 | grep "inet addr:" | cut -d : -f 2 | cut -d " " -f 1` ; 

echo "Private IP: ${privip}" ; 

# Turn it into unsigned 32-bit integer 

ipiter=3 ; 

for ipoctet in `echo ${privip} | tr . " "` ; 
    do 
    ipint=$((ipint + (ipoctet * 256 ** ipiter--))) ; 
    done ; 

echo "Private IP int32: ${ipint}" ; 

[email protected]:~# bash test.sh 
Private IP: 10.0.2.15 
Private IP int32: 167772687 

किसी भी मदद की सराहना की जाएगी।

उत्तर

2
'10.0.2.15'.split('.').inject(0) {|total,value| (total << 8) + value.to_i} 
#=> 167772687 

उपरोक्त उत्तर थोड़ा बेहतर है, क्योंकि आपके ऑक्टेट में 3 से अधिक अंक हो सकते हैं और फिर यह टूट जाएगा। आईई

"127.0.0.1234" 

लेकिन मैं अभी भी पसंद है मेरा बेहतर: डी कि इसके अलावा, अगर आप के लिए महत्वपूर्ण है, तो आप सिर्फ कर सकते हैं

"127.0.0.1".split('.').inject(0) {|total,value| raise "Invalid IP" if value.to_i < 0 || value.to_i > 255; (total << 8) + value.to_i } 
22
require 'ipaddr' 
ip = IPAddr.new "10.0.2.15" 
ip.to_i      # 167772687