11.21 Other Networking
Information
Our focus in this chapter has been on hostnames
and IP addresses and service names and their port numbers. But
looking at the bigger picture, there are four types of information
(related to networking) that an application might want to look up:
hosts, networks, protocols, and services. Most lookups are for
hosts (gethostbyname and geth貌stbyaddr), with a
smaller number for services (getservbyname and
getservbyaddr), and an even smaller number for networks
and protocols.
All four types of information can be stored in a
file and three functions are defined for each of the four
types:
-
A
getXXXent function that reads the next entry in the file,
opening the file if necessary.
-
A
setXXXent function that opens (if not already open) and
rewinds the file.
-
An
endXXXent function that closes the file.
Each of the four types of information defines
its own structure, and the following definitions are provided by
including the <netdb.h> header: the
hostent, netent, protoent, and
servent structures.
In addition to the three get,
set, and end functions, which allow sequential
processing of the file, each of the four types of information
provides some keyed lookup
functions. These functions go through the file sequentially
(calling the getXXXent function to read each line), but
instead of returning each line to the caller, these functions look
for an entry that matches an argument. These keyed lookup functions
have names of the form getXXXbyYYY. For example, the two
keyed lookup functions for the host information are
gethostbyname (look for an entry that matches a hostname)
and gethostbyaddr (look for an entry that matches an IP
address). Figure 11.21
summarizes this information.
How does this apply when the DNS is being used?
First, only the host and network information is available through
the DNS. The protocol and service information is always read from
the corresponding file. We mentioned earlier in this chapter (with
Figure 11.1) that
different implementations employ different ways for the
administrator to specify whether to use the DNS or a file for the
host and network information.
Second, if the DNS is being used for the host
and network information, then only the keyed lookup functions make
sense. You cannot, for example, use gethostent and expect
to sequence through all entries in the DNS! If gethostent
is called, it reads only the /etc/hosts file and avoids
the DNS.
Although the network information can be made
available through the DNS, few people set this up. [Albitz and Liu
2001] describes this feature. Typically, however, administrators
build and maintain an /etc/networks file and it is used
instead of the DNS. The netstat program with the
-i option uses this file, if present, and prints the name
for each network. However, classless addressing (Appendix A) makes these
functions fairly useless, and these functions do not support IPv6
at all, so new applications should avoid using network names.
|