Skip to main content

Portable network interface information.

Project description

Build Status

1. What is this?

It’s been annoying me for some time that there’s no easy way to get the address(es) of the machine’s network interfaces from Python. There is a good reason for this difficulty, which is that it is virtually impossible to do so in a portable manner. However, it seems to me that there should be a package you can easy_install that will take care of working out the details of doing so on the machine you’re using, then you can get on with writing Python code without concerning yourself with the nitty gritty of system-dependent low-level networking APIs.

This package attempts to solve that problem.

2. How do I use it?

First you need to install it, which you can do by typing:

tar xvzf netifaces-0.10.2.tar.gz
cd netifaces-0.10.2
python setup.py install

Once that’s done, you’ll need to start Python and do something like the following:

>>> import netifaces

Then if you enter

>>> netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0']

you’ll see the list of interface identifiers for your machine.

You can ask for the addresses of a particular interface by doing

>>> netifaces.ifaddresses('lo0')
{18: [{'addr': ''}], 2: [{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}], 30: [{'peer': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'addr': '::1'}, {'peer': '', 'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::1%lo0'}]}

Hmmmm. That result looks a bit cryptic; let’s break it apart and explain what each piece means. It returned a dictionary, so let’s look there first:

{ 18: [...], 2: [...], 30: [...] }

Each of the numbers refers to a particular address family. In this case, we have three address families listed; on my system, 18 is AF_LINK (which means the link layer interface, e.g. Ethernet), 2 is AF_INET (normal Internet addresses), and 30 is AF_INET6 (IPv6).

But wait! Don’t use these numbers in your code. The numeric values here are system dependent; fortunately, I thought of that when writing netifaces, so the module declares a range of values that you might need. e.g.

>>> netifaces.AF_LINK
18

Again, on your system, the number may be different.

So, what we’ve established is that the dictionary that’s returned has one entry for each address family for which this interface has an address. Let’s take a look at the AF_INET addresses now:

>>> addrs = netifaces.ifaddresses('lo0')
>>> addrs[netifaces.AF_INET]
[{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}]

You might be wondering why this value is a list. The reason is that it’s possible for an interface to have more than one address, even within the same family. I’ll say that again: you can have more than one address of the same type associated with each interface.

Asking for “the” address of a particular interface doesn’t make sense.

Right, so, we can see that this particular interface only has one address, and, because it’s a loopback interface, it’s point-to-point and therefore has a peer address rather than a broadcast address.

Let’s look at a more interesting interface.

>>> addrs = netifaces.ifaddresses('en0')
>>> addrs[netifaces.AF_INET]
[{'broadcast': '10.15.255.255', 'netmask': '255.240.0.0', 'addr': '10.0.1.4'}, {'broadcast': '192.168.0.255', 'addr': '192.168.0.47'}]

This interface has two addresses (see, I told you…) Both of them are regular IPv4 addresses, although in one case the netmask has been changed from its default. The netmask may not appear on your system if it’s set to the default for the address range.

Because this interface isn’t point-to-point, it also has broadcast addresses.

Now, say we want, instead of the IP addresses, to get the MAC address; that is, the hardware address of the Ethernet adapter running this interface. We can do

>>> addrs[netifaces.AF_LINK]
[{'addr': '00:12:34:56:78:9a'}]

Note that this may not be available on platforms without getifaddrs(), unless they happen to implement SIOCGIFHWADDR. Note also that you just get the address; it’s unlikely that you’ll see anything else with an AF_LINK address. Oh, and don’t assume that all AF_LINK addresses are Ethernet; you might, for instance, be on a Mac, in which case:

>>> addrs = netifaces.ifaddresses('fw0')
>>> addrs[netifaces.AF_LINK]
[{'addr': '00:12:34:56:78:9a:bc:de'}]

No, that isn’t an exceptionally long Ethernet MAC address—it’s a FireWire address.

As of version 0.10.0, you can also obtain a list of gateways on your machine:

>>> netifaces.gateways()
{2: [('10.0.1.1', 'en0', True), ('10.2.1.1', 'en1', False)], 30: [('fe80::1', 'en0', True)], 'default': { 2: ('10.0.1.1', 'en0'), 30: ('fe80::1', 'en0') }}

This dictionary is keyed on address family—in this case, AF_INET—and each entry is a list of gateways as (address, interface, is_default) tuples. Notice that here we have two separate gateways for IPv4 (AF_INET); some operating systems support configurations like this and can either route packets based on their source, or based on administratively configured routing tables.

For convenience, we also allow you to index the dictionary with the special value 'default', which returns a dictionary mapping address families to the default gateway in each case. Thus you can get the default IPv4 gateway with

>>> gws = netifaces.gateways()
>>> gws['default'][netifaces.AF_INET]
('10.0.1.1', 'en0')

Do note that there may be no default gateway for any given address family; this is currently very common for IPv6 and much less common for IPv4 but it can happen even for AF_INET.

BTW, if you’re trying to configure your machine to have multiple gateways for the same address family, it’s a very good idea to check the documentation for your operating system very carefully, as some systems become extremely confused or route packets in a non-obvious manner.

I’m very interested in hearing from anyone (on any platform) for whom the gateways() method doesn’t produce the expected results. It’s quite complicated extracting this information from the operating system (whichever operating system we’re talking about), and so I expect there’s at least one system out there where this just won’t work.

3. This is great! What platforms does it work on?

It gets regular testing on OS X, Linux and Windows. It has also been used successfully on Solaris, and it’s expected to work properly on other UNIX-like systems as well. If you are running something that is not supported, and wish to contribute a patch, please use BitBucket to send a pull request.

4. What license is this under?

It’s an MIT-style license. Here goes:

Copyright (c) 2007-2014 Alastair Houghton

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

5. Why the jump to 0.10.0?

Because someone released a fork of netifaces with the version 0.9.0. Hopefully skipping the version number should remove any confusion.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netifaces-0.10.2.tar.gz (22.9 kB view details)

Uploaded Source

Built Distributions

netifaces-0.10.2.win32-py3.4.exe (212.5 kB view details)

Uploaded Source

netifaces-0.10.2.win32-py3.3.exe (212.5 kB view details)

Uploaded Source

netifaces-0.10.2.win32-py2.7.exe (217.7 kB view details)

Uploaded Source

netifaces-0.10.2.win32-py2.6.exe (218.0 kB view details)

Uploaded Source

netifaces-0.10.2-py3.4-win32.egg (13.1 kB view details)

Uploaded Source

netifaces-0.10.2-py3.3-win32.egg (13.1 kB view details)

Uploaded Source

netifaces-0.10.2-py2.7-win32.egg (13.0 kB view details)

Uploaded Source

netifaces-0.10.2-py2.6-win32.egg (13.3 kB view details)

Uploaded Source

netifaces-0.10.2-cp34-none-win32.whl (17.0 kB view details)

Uploaded CPython 3.4 Windows x86

netifaces-0.10.2-cp33-none-win32.whl (17.0 kB view details)

Uploaded CPython 3.3 Windows x86

netifaces-0.10.2-cp27-none-win32.whl (17.0 kB view details)

Uploaded CPython 2.7 Windows x86

netifaces-0.10.2-cp26-none-win32.whl (17.3 kB view details)

Uploaded CPython 2.6 Windows x86

File details

Details for the file netifaces-0.10.2.tar.gz.

File metadata

  • Download URL: netifaces-0.10.2.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for netifaces-0.10.2.tar.gz
Algorithm Hash digest
SHA256 61d790e43e66b2f04da1b5cdfd3cd0bdfcabc8e168dd1221e1530015eaead324
MD5 acb11ba95d892519825e170d814ee296
BLAKE2b-256 fc2893373fcc7a807493334bb2278bbfdf699f44549a209a5759865e9c42068c

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2.win32-py3.4.exe.

File metadata

File hashes

Hashes for netifaces-0.10.2.win32-py3.4.exe
Algorithm Hash digest
SHA256 02fced2cac893fe97c3b82b1100e6054d8c2b17a2fa83dbb7fc5e2c62c3301a0
MD5 911b9bd3621b6beee6c7547051ecdf6f
BLAKE2b-256 899d649dedaa4dd63a93a242883204135a6d95d80ba729d0ad29099ead31df3e

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2.win32-py3.3.exe.

File metadata

File hashes

Hashes for netifaces-0.10.2.win32-py3.3.exe
Algorithm Hash digest
SHA256 5b8f0e07593d5a8da063e84a799230ecea1a7c735f9f9167f722d0302cc07cf1
MD5 d2738c8bf7401f860a813a9e20ab168d
BLAKE2b-256 c11d21fb4cb216d5edf7aeb1af62caecc4177f746947dab245dc3beb750f95cc

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2.win32-py2.7.exe.

File metadata

File hashes

Hashes for netifaces-0.10.2.win32-py2.7.exe
Algorithm Hash digest
SHA256 9b39db9e1ad2f994ed17f52e53fd9bf451ff2e841f53e0f5f0c677219188b093
MD5 9b2e1fb6a8c4a4325e33884fafeb7882
BLAKE2b-256 f14748db3efa3f153bf5e840f2ef927543bc1cb386b344746956db4185801bd5

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2.win32-py2.6.exe.

File metadata

File hashes

Hashes for netifaces-0.10.2.win32-py2.6.exe
Algorithm Hash digest
SHA256 d807643736262846cdbcb7a63f0c94baf3fa170bf503cb200430b48a4e49680a
MD5 e55e5fd188e4e6fda21942b665a2fca3
BLAKE2b-256 09090c4ad11874c68d7f2e8fe15cb1649886365b4e5512e5d866972cc40c3142

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-py3.4-win32.egg.

File metadata

File hashes

Hashes for netifaces-0.10.2-py3.4-win32.egg
Algorithm Hash digest
SHA256 867f684f187da78a38d85d5b068328420922256a88d2c2ffebe79fdfab42b8fb
MD5 d2aa751f68d96c3f81a1065527a7bccf
BLAKE2b-256 07cbad9e96063e7eacd010bd50e05e4bb2a215604e0da5dbd9e91a540187d70b

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-py3.3-win32.egg.

File metadata

File hashes

Hashes for netifaces-0.10.2-py3.3-win32.egg
Algorithm Hash digest
SHA256 97a56872a2d7f3ee159a4b4cd66979665b7b5ae8ec809b4aaed13505f529e9f3
MD5 1a0b71b320246eaed195bd61c4dce4e1
BLAKE2b-256 889d3204e31bf4baa34a2d8a8ea8a09d886b1bedc71ce6ee55a92b7f7297ead0

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-py2.7-win32.egg.

File metadata

File hashes

Hashes for netifaces-0.10.2-py2.7-win32.egg
Algorithm Hash digest
SHA256 6ed8419a98c69f6508a6aceaa401476b0121229537c9197d3a1499860e405665
MD5 cd06faf5faccc13f71bad4bde03de3c1
BLAKE2b-256 b257421144493a4bfae1908cec303e6950d3d64db8223b9201654d858d80ca0b

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-py2.6-win32.egg.

File metadata

File hashes

Hashes for netifaces-0.10.2-py2.6-win32.egg
Algorithm Hash digest
SHA256 d5da75e7160c76f126ebdebf78f6ffdfd7ae0438ab72259ce9868776a7e6ada9
MD5 07fb22d2408bf2969c18cfa1711bd5d6
BLAKE2b-256 a6ac377a8f8634eb605c02e07b2792eb3279433a937de4416eaa3c35cf38574c

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-cp34-none-win32.whl.

File metadata

File hashes

Hashes for netifaces-0.10.2-cp34-none-win32.whl
Algorithm Hash digest
SHA256 d14385bba6a6a64a4caf0e97e7dc65e11ee06cf3c5819b7d9490ce6adb4f5e5c
MD5 adaf9e1b49e153fa1a0da9ade883f674
BLAKE2b-256 dd279ac8751dd8eeefa68c1583181e9054af6c4c457940cef8dfb0fbab512627

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-cp33-none-win32.whl.

File metadata

File hashes

Hashes for netifaces-0.10.2-cp33-none-win32.whl
Algorithm Hash digest
SHA256 c4cc67a2a0d4b227a77589e9fdfc2d9b291ff38b044c2589ada39596ecc2b425
MD5 8d7c654aa1860ddd82c1fcba45504f19
BLAKE2b-256 b8b156cf4fe7f878933c9144469850b04e9d2b9c172910b3dcfc142be950d0c3

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-cp27-none-win32.whl.

File metadata

File hashes

Hashes for netifaces-0.10.2-cp27-none-win32.whl
Algorithm Hash digest
SHA256 5b6f018fde09120f6a6ca52378d9265a2abe48196f070378c126d15612640016
MD5 1392d3cebd37be760c9db8bbf8a1f3cf
BLAKE2b-256 3a85bd45297ca60d73ada95a7aa8b6d664fd8fff5096503101ea0ae6614e25ae

See more details on using hashes here.

File details

Details for the file netifaces-0.10.2-cp26-none-win32.whl.

File metadata

File hashes

Hashes for netifaces-0.10.2-cp26-none-win32.whl
Algorithm Hash digest
SHA256 dc8e1d1950d5b1d8848af1ffad77e0859ddd22e2a540d074051824cdcab6766e
MD5 65bd395ec03961a37cff14d54df22f10
BLAKE2b-256 1314155b5d73ef653237dc40b827eee857a408c7f070cd7fdfc9e369392db348

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page