Finding the IP address of a particular network interface may be needed from your Python network application.
This recipe is prepared exclusively for a Linux box. There are some Python modules specially designed to bring similar functionalities on Windows and Mac platforms. For example, see http://sourceforge.net/projects/pywin32/ for Windows-specific implementation.
You can use the fnctl
module to query the IP address on your machine.
Listing 3.5 shows us how to find the IP address for a specific interface on your machine, as follows:
#!/usr/bin/env python # Python Network Programming Cookbook -- Chapter – 3 # This program is optimized for Python 2.7. # It may run on any other version with/without modifications. import argparse import sys import socket import fcntl import struct import array def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) if __name__ == '__main__': #interfaces = list_interfaces() parser = argparse.ArgumentParser(description='Python networking utils') parser.add_argument('--ifname', action="store", dest="ifname", required=True) given_args = parser.parse_args() ifname = given_args.ifname print "Interface [%s] --> IP: %s" %(ifname, get_ip_address(ifname))
The output of this script is shown in one line, as follows:
$ python 3_5_get_interface_ip_address.py --ifname=eth0 Interface [eth0] --> IP: 10.0.2.15
This recipe is similar to the previous one. The preceding script takes a command-line argument: the name of the network interface whose IP address is to be known. The
get_ip_address()
function creates a socket object and calls the fnctl.ioctl()
function to query on that object about IP information. Note that the socket.inet_ntoa()
function converts the binary data to a human-readable string in a dotted format as we are familiar with it.
3.145.40.189