2012-11-06 46 views
8

Tôi đang cố gắng tìm cách chuyển đổi địa chỉ ip thành số nguyên 32 bit trong Ruby cho mẫu con rối.chuyển đổi địa chỉ IP thành số nguyên 32 bit trong ruby ​​

Đây là cách tôi đã thực hiện chuyển đổi trong bash.

[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 

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

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

Câu trả lời ở trên hơi tốt hơn vì bạn có thể có nhiều hơn 3 chữ số trong octet và sau đó điều này sẽ bị hỏng. IE

"127.0.0.1234" 

Nhưng tôi vẫn muốn tôi tốt hơn: D Ngoài ra nếu đó là quan trọng với bạn, sau đó bạn có thể chỉ cần làm

"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 
Các vấn đề liên quan