I l@ve RuBoard Previous Section Next Section

10.5 Finding Your Own Name and Address

Credit: Luther Blissett

10.5.1 Problem

You want to find your own fully qualified hostname and IP address.

10.5.2 Solution

The socket module has functions that help with this task:

import socket

myname = socket.getfqdn(socket.gethostname(  ))
myaddr = socket.gethostbyname(myname)

This gives you your primary, fully qualified domain name and IP address. You might have other names and addresses, and if you want to find out about them, you can do the following:

thename, aliases, addresses = socket.gethostbyaddr(myaddr)
print 'Primary name for %s (%s): %s' % (myname, myaddr, thename)
for alias in aliases: print "AKA", alias
for address in addresses: print "address:", address

10.5.3 Discussion

gethostname is specifically useful only to find out your hostname, but the other functions used in this recipe are for more general use. getfqdn takes a domain name that may or may not be fully qualified and normalizes it into the corresponding fully qualified domain name (FQDN) for a hostname. gethostbyname can accept any valid hostname and look up the corresponding IP address (if name resolution is working correctly, the network is up, and so on), which it returns as a string in dotted-quad form (such as '1.2.3.4').

gethostbyaddr accepts a valid IP address as a string in dotted-quad form (again, if reverse DNS lookup is working correctly on your machine, the network is up, and so on) and returns a tuple of three items. The first item is a string, the primary name by which the host at that IP address would like to be known. The second item is a list of other names (aliases) by which that host is known�note that it can be an empty list. The third item is the list of IP addresses for that host (it will never be empty because it contains at least the address you passed when calling gethostbyaddr).

If an error occurs during the execution of any of these functions, the failing operation raises an exception of the socket.error class.

10.5.4 See Also

Documentation for the standard library module socket in the Library Reference; Perl Cookbook Recipe 17.8.

    I l@ve RuBoard Previous Section Next Section