iptools - IP Address Utilities
The iptools package is a collection of utilities for dealing with IP addresses.
Using with Django INTERNAL_IPS
There are many internal and add-on components for Django that use the INTERNAL_IPS configuration setting to alter application behavior or make debugging easier. When you are developing and testing an application by yourself it's easy to add the ip address that your web browser will be coming from to this list. When you are developing in a group or testing from many ips it can become cumbersome to add more and more ip addresses to the setting individually.
The :class:`iptools.IpRangeList` object can help by replacing the standard
tuple of addresses recommended by the Django docs with an intelligent object
that responds to the membership test operator in. This object can be
configured with dotted quad IP addresses like the default
tuple (eg. '127.0.0.1'), CIDR block notation (eg. '127/8', '192.168/16') for
entire network blocks, and/or (start, end) tuples describing an arbitrary
range of IP addresses.
Django's internal checks against the
INTERNAL_IPS tuple take the form
if addr in INTERNAL_IPS or
if addr not in INTERNAL_IPS. This works
transparently with the :class:`iptools.IpRangeList` object because it
implements the magic method
__contains__ which python calls when the
not in operators are used.
import iptools INTERNAL_IPS = iptools.IpRangeList( '127.0.0.1', # single ip '192.168/16', # CIDR network block ('10.0.0.1', '10.0.0.19'), # arbitrary inclusive range '::1', # single IPv6 address 'fe80::/10', # IPv6 CIDR block '::ffff:172.16.0.2' # IPv4-mapped IPv6 address )
Python Version Compatibility
Travis CI automatically runs tests against python 2.6, 2.7, 3.2, 3.3 and pypy.
Install the latest stable version from PyPi using pip:
$ pip install iptools
$ easy_install iptools
Install the latest development version:
$ git clone https://github.com/bd808/python-iptools.git $ cd python-iptools $ python setup.py install
.. automodule:: iptools
.. autoclass:: iptools.IpRangeList :members: :special-members:
.. autoclass:: iptools.IpRange :members: :special-members:
.. automodule:: iptools.ipv4 :members:
.. automodule:: iptools.ipv6 :members: