netifaces

  • A portable third-party library in Python to enumerate network interfaces on local machine.
  • Historically it has been difficult to straightforwardly get the network address(es) of the machine on which your Python scripts are running without compromising the portability of your script.
  • netifaces takes care of enumerating interfaces, network addresses and also preserves the portability(works on all *nix systems atleast).

Installation

netifaces needs python extension modules. In case you haven’t already, you should install python-dev package.

$ sudo apt-get install python-dev

You can install netifaces using PIP.

$ pip install netifaces

Basic operations

You can take a look at all the modules that are part of netifaces

>>> import netifaces >>> >>> dir(netifaces) [ ... snipped ... 'address_families', 'gateways', 'ifaddresses', 'interfaces', 'version'] >>>

Getting a list of all the network interface identifiers on the machine.

>>> netifaces.interfaces() ['lo', 'eth0', 'wlan0', 'eth3', 'vboxnet0']

You can ask for the addresses of a particular interface

>>> import netifaces >>> from pprint import pprint >>> >>> pprint(netifaces.ifaddresses('eth3')) {2: [{'addr': '192.168.1.100', 'broadcast': '192.168.1.255', 'netmask': '255.255.255.0'}], 10: [{'addr': 'fe80::364b:50ff:feb7:ef1d%eth3', 'netmask': 'ffff:ffff:ffff:ffff::/64'}], 17: [{'addr': '34:4b:50:b7:ef:1d', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]}

pprint

  • pprint contains a “pretty printer” for producing aesthetically pleasing representations of your data structures
  • The formatter produces representations of data structures that can be parsed correctly by the interpreter, and are also easy for a human to read

You can also get list of all the gateways

>>> netifaces.gateways() {'default': {2: ('192.168.1.1', 'eth3')}, 2: [('192.168.1.1', 'eth3', True)]}

Getting list of IPv4 addresses excluding loopback and virtualbox adapters

>>> for iface in netifaces.interfaces(): ... if iface == 'lo' or iface.startswith('vbox'): ... continue ... iface_details = netifaces.ifaddresses(iface) ... if iface_details.has_key(netifaces.AF_INET): ... print iface_details[netifaces.AF_INET] ... [{'broadcast': '192.168.1.255', 'netmask': '255.255.255.0', 'addr': '192.168.1.100'}] [{'broadcast': '192.168.1.255', 'netmask': '255.255.255.0', 'addr': '192.168.1.101'}]

Examples of netifaces usage in open source projects

For more examples of netifaces usage in open source projects: http://www.programcreek.com/python/example/81895/netifaces.interfaces