Hello Alan,

 I think we don't understand each other. I don't need reverse DNS (I would use
resolv.rb for it instead). What I need is:

you have machine with fully qualified domain name (FQDN)
	a.b.c.d.e
It's hostname is
	a
It's IP is
	v.x.y.z

I'm looking for function which could give me back fully qualified domain
name and IP when I pass hostname as argument.

Probably I don't understand what is canonical name I thought it should be FQDN
but it is not.

because this code:

puts "getaddress    : " + IPSocket.getaddress("a").inspect
puts "gethostbyname : " + TCPSocket.gethostbyname("a").inspect

has result:

getaddress    : "10.0.2.1"
gethostbyname : ["a", [], 2, "10.0.2.1"]

and what i need is result like this:

gethostbyname : ["a.b.c.d.e", ["a"], 2, "10.0.2.1"]

I hope it's more clear now. (or maybe I completely did not get what you
wanted to tell me)

Cheers,

 V.

On Thu, Nov 20, 2008 at 05:23:20AM +0900, Alan Johnson wrote:
> On Wed, Nov 19, 2008 at 8:43 AM, Vladimir Fekete
> <fekete / melkor.dnp.fmph.uniba.sk> wrote:
> >
> > Hi *,
> >
> > Could you pleas help me with following problem ?
> >
> > I need to get  FQDN of host as well as it's IP. So I need same result as
> > "host" command gives me in *nix OSes. I found out these (suitable) functions:
> >
> > Socket.getaddrinfo
> > IPSocket.getaddress
> > TCPSocket.gethostbyname
> >
> > which can do the job (partialy). My problem is that non of them gives me
> > back FQDN. Eg. let's say that I have myserver.mydomain.com which is FQDN and
> > it's alias is myserver.
> >
> > My problem is that when I use any of those functions with "myserver"
> > attribiute I always get as set of aliases ["myserver"] array only (e.g. no
> > myserver.mydomain.com).
> >
> > Is there any way how to find out FQDN via some ruby function ? Thanks!
> >
> > Regards,
> >
> >  V.
> >
> 
> gethostbyname and gethostbyaddr both return the "canonical name" in the first
> element of the output array. If you are dealing with IP addresses gethostbyaddr
> can do a reverse lookup for you (but not gethostbyname).
> 
> One tricky bit is that gethostbyaddr expects a struct in_addr packed into a
> Ruby string.  See inet_ntoa below to help with that.
> 
> Examples:
> 
> require 'socket'
> def inet_aton(ip)
>     ip.split('.').inject(String.new) { |str, q| str << q.to_i }
> end
> 
> p Socket.gethostbyname('www.google.com')[0]
> p Socket.gethostbyaddr(inet_aton("127.0.0.1"))[0]
> 
>