From 9ebdc7dd53420fa839bc5d4f64debc18b773056c Mon Sep 17 00:00:00 2001 From: j Date: Wed, 23 Mar 2016 12:28:19 +0100 Subject: [PATCH] install netifaces --- .../netifaces-0.10.4-py3.5.egg-info/PKG-INFO | 214 ++++++++++++++++++ .../SOURCES.txt | 9 + .../dependency_links.txt | 1 + .../installed-files.txt | 7 + .../top_level.txt | 1 + .../netifaces-0.10.4-py3.5.egg-info/zip-safe | 1 + Lib/site-packages/netifaces.cp35-win32.pyd | Bin 0 -> 18432 bytes 7 files changed, 233 insertions(+) create mode 100644 Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/PKG-INFO create mode 100644 Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/SOURCES.txt create mode 100644 Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/dependency_links.txt create mode 100644 Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/installed-files.txt create mode 100644 Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/top_level.txt create mode 100644 Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/zip-safe create mode 100644 Lib/site-packages/netifaces.cp35-win32.pyd diff --git a/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/PKG-INFO b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/PKG-INFO new file mode 100644 index 0000000..9bfdf11 --- /dev/null +++ b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/PKG-INFO @@ -0,0 +1,214 @@ +Metadata-Version: 1.1 +Name: netifaces +Version: 0.10.4 +Summary: Portable network interface information. +Home-page: https://bitbucket.org/al45tair/netifaces +Author: Alastair Houghton +Author-email: alastair@alastairs-place.net +License: MIT License +Description: netifaces 0.10.4 + ================ + + .. 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.4.tar.gz + cd netifaces-0.10.4 + 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. 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. + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: System :: Networking +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 diff --git a/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/SOURCES.txt b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/SOURCES.txt new file mode 100644 index 0000000..a382c6c --- /dev/null +++ b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/SOURCES.txt @@ -0,0 +1,9 @@ +README.rst +netifaces.c +setup.cfg +setup.py +netifaces.egg-info/PKG-INFO +netifaces.egg-info/SOURCES.txt +netifaces.egg-info/dependency_links.txt +netifaces.egg-info/top_level.txt +netifaces.egg-info/zip-safe \ No newline at end of file diff --git a/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/dependency_links.txt b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/installed-files.txt b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/installed-files.txt new file mode 100644 index 0000000..573fc5e --- /dev/null +++ b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/installed-files.txt @@ -0,0 +1,7 @@ +..\netifaces.cp35-win32.pyd +. +dependency_links.txt +PKG-INFO +SOURCES.txt +top_level.txt +zip-safe diff --git a/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/top_level.txt b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/top_level.txt new file mode 100644 index 0000000..3f008fd --- /dev/null +++ b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/top_level.txt @@ -0,0 +1 @@ +netifaces diff --git a/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/zip-safe b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Lib/site-packages/netifaces-0.10.4-py3.5.egg-info/zip-safe @@ -0,0 +1 @@ + diff --git a/Lib/site-packages/netifaces.cp35-win32.pyd b/Lib/site-packages/netifaces.cp35-win32.pyd new file mode 100644 index 0000000000000000000000000000000000000000..a46b032af1a42915cd4ac21fb4159f2a4fc8eaa1 GIT binary patch literal 18432 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