summaryrefslogtreecommitdiff
path: root/README.rst
diff options
context:
space:
mode:
Diffstat (limited to 'README.rst')
-rw-r--r--README.rst197
1 files changed, 0 insertions, 197 deletions
diff --git a/README.rst b/README.rst
deleted file mode 100644
index d08c175..0000000
--- a/README.rst
+++ /dev/null
@@ -1,197 +0,0 @@
-netifaces 0.10.6
-================
-
-.. image:: https://drone.io/bitbucket.org/al45tair/netifaces/status.png
- :target: https://drone.io/bitbucket.org/al45tair/netifaces/latest
- :alt: 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.6.tar.gz
- cd netifaces-0.10.6
- python setup.py install
-
-**Note that you will need the relevant developer tools for your platform**,
-as netifaces is written in C and installing this way will compile the extension.
-
-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-2017 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. In
-addition starting with 0.10.0 Python 3 is now supported and other
-features/bugfixes have been included as well. See the CHANGELOG for a
-more complete list of changes.