Inet_aton / inet_ntoa


#1

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


#2

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


#3

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


#4

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.