Do entries in local ‘hosts’ files override both forward and reverse name lookups

domain-name-systemhosts

If I have the following entries in a hosts file:

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.

Will IP->name resolution attempts by local utilies (I assume using 'gethostbyaddr' or the Windows equivalent) honour these entries? Is this behaviour configurable? How does it vary between operating systems? Does it matter whether the 'hosts' file entries are fully qualified or not?

EDIT: In response to Russell, my test Linux system is running RHEL 4. My /etc/nsswitch.conf contains the following 'hosts' line:

hosts:      files dns nis

If I ping any of my hosts by name (e.g. bugs, daffy), the forward resolution works correctly. If I traceroute any of them by IP address, the reverse lookup functions as expected. However, if I ping them by IP, ping doesn't appear to resolve their host names. My understanding was that Linux ping would always attempt to resolve IPs to names unless instructed otherwise. Why would traceroute be able to handle reverse lookups in hosts files, but ping not?

Best Answer

Generally the hosts file will be used for both forward and reverse lookups. The preference on a Unix system this will depend on the order of entries in you nsswitch.conf file.

e.g. the line below will make the hosts file override DNS. Reversing the entries will make DNS override the hosts file.

hosts:      files dns

I am not sure if you can tune to order of preference on a windows system.

I have had a look at the source for ping in inetutils-20071127 (the version installed on my Ubuntu 9.04 box) and the source seems to enable numeric only mode if you ping an IP address rather than a hostname:

                if (inet_aton(target, &whereto.sin_addr) == 1) {
                        hostname = target;
                        if (argc == 1)
                                options |= F_NUMERIC;

This could explain why you don't get a reverse lookup when you ping your host by IP address.