Inet_aton / inet_ntoa

Hi guys,

i have a big problem with ruby + inet_aton.
Since IPAddr has the to_i function it can convert IPAddrs to integers
(inet_aton). But i didn’t find any function that reverses this
(inet_ntoa)… And without such a function, i can’t work =)

Any ideas?

thanks!

Mit freundlichen Grüßen / best regards

Franz Bettag


QS Housing
Franz Bettag
Ludwigstr. 45-47
90402 Nürnberg
http://www.qs-housing.net

Tel: +49 1805 737376 664
Fax: +49 1805 737376 665

On Thu, 16 Mar 2006, Franz Bettag wrote:

Hi guys,

i have a big problem with ruby + inet_aton. Since IPAddr has the to_i
function it can convert IPAddrs to integers (inet_aton). But i didn’t find
any function that reverses this (inet_ntoa)… And without such a function,
i can’t work =)

Any ideas?

thanks!

maybe this will work

 harp:~ > cat a.rb
 def inet_aton ip
   ip.split(/\./).map{|c| c.to_i}.pack("C*").unpack("N").first
 end
 def inet_ntoa n
   [n].pack("N").unpack("C*").join "."
 end


 ip = "255.127.63.31"
 n = inet_aton ip

 puts n
 puts n.to_s(2)

 a = inet_ntoa n
 puts a

 puts(inet_ntoa(inet_aton(ip)))


 harp:~ > ruby a.rb
 4286529311
 11111111011111110011111100011111
 255.127.63.31
 255.127.63.31

i can’t remember if that’s exactly how those work - but i thinks that’s
right.

hth.

-a

Thanks to both of you! :slight_smile:

Claudio J. schrieb:

Additionally you can do:

IPAddr.new_ntoh([ 3232246293 ].pack(“N”))
=> #<IPAddr: IPv4:192.168.42.21/255.255.255.255>

IPAddr::new_ntoh creates a new ipaddr containing the given network byte
ordered string form of an IP address.

Mit freundlichen
Grüßen
Franz Bettag


QS Housing
Franz Bettag
Ludwigstr. 45-47
90402 Nürnberg
http://www.qs-housing.net

Tel: +49 1805 737376 664
Fax: +49 1805 737376 665

On Thu, Mar 16, 2006 at 08:38:46AM +0900, Franz Bettag wrote:

Hi guys,

i have a big problem with ruby + inet_aton.
Since IPAddr has the to_i function it can convert IPAddrs to integers
(inet_aton). But i didn’t find any function that reverses this
(inet_ntoa)… And without such a function, i can’t work =)

Any ideas?

require “ipaddr”

IPAddr.new(“192.168.42.21”).to_i
=> 3232246293
IPAddr.new(3232246293, Socket::AF_INET).to_s
=> “192.168.42.21”

Same works for Socket::AF_INET6.

Additionally you can do:

IPAddr.new_ntoh([ 3232246293 ].pack(“N”))
=> #<IPAddr: IPv4:192.168.42.21/255.255.255.255>

IPAddr::new_ntoh creates a new ipaddr containing the given network byte
ordered string form of an IP address.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs