system: Linux mars.sprixweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
Metadata-Version: 1.1
Name: IPy
Version: 0.75
Summary: Class and tools for handling of IPv4 and IPv6 addresses and networks
Home-page: https://github.com/haypo/python-ipy
Author: Victor Stinner
Author-email: victor.stinner AT haypocalc.com
License: BSD License
Download-URL: https://github.com/haypo/python-ipy
Description: IPy - class and tools for handling of IPv4 and IPv6 addresses and networks.
Website: https://github.com/haypo/python-ipy/
Presentation of the API
=======================
The IP class allows a comfortable parsing and handling for most
notations in use for IPv4 and IPv6 addresses and networks. It was
greatly inspired by RIPE's Perl module NET::IP's interface but
doesn't share the implementation. It doesn't share non-CIDR netmasks,
so funky stuff like a netmask of 0xffffff0f can't be done here.
>>> from IPy import IP
>>> ip = IP('127.0.0.0/30')
>>> for x in ip:
... print(x)
...
127.0.0.0
127.0.0.1
127.0.0.2
127.0.0.3
>>> ip2 = IP('0x7f000000/30')
>>> ip == ip2
1
>>> ip.reverseNames()
['0.0.0.127.in-addr.arpa.', '1.0.0.127.in-addr.arpa.', '2.0.0.127.in-addr.arpa.', '3.0.0.127.in-addr.arpa.']
>>> ip.reverseName()
'0-3.0.0.127.in-addr.arpa.'
>>> ip.iptype()
'PRIVATE'
Supports most IP address formats
================================
It can detect about a dozen different ways of expressing IP addresses
and networks, parse them and distinguish between IPv4 and IPv6 addresses:
>>> IP('10.0.0.0/8').version()
4
>>> IP('::1').version()
6
IPv4 addresses
--------------
>>> print(IP(0x7f000001))
127.0.0.1
>>> print(IP('0x7f000001'))
127.0.0.1
>>> print(IP('127.0.0.1'))
127.0.0.1
>>> print(IP('10'))
10.0.0.0
IPv6 addresses
--------------
>>> print(IP('1080:0:0:0:8:800:200C:417A'))
1080::8:800:200c:417a
>>> print(IP('1080::8:800:200C:417A'))
1080::8:800:200c:417a
>>> print(IP('::1'))
::1
>>> print(IP('::13.1.68.3'))
::d01:4403
Network mask and prefixes
-------------------------
>>> print(IP('127.0.0.0/8'))
127.0.0.0/8
>>> print(IP('127.0.0.0/255.0.0.0'))
127.0.0.0/8
>>> print(IP('127.0.0.0-127.255.255.255'))
127.0.0.0/8
Derive network address
===========================
IPy can transform an IP address into a network address by applying the given
netmask:
>>> print(IP('127.0.0.1/255.0.0.0', make_net=True))
127.0.0.0/8
This can also be done for existing IP instances:
>>> print(IP('127.0.0.1').make_net('255.0.0.0'))
127.0.0.0/8
Convert address to string
=========================
Nearly all class methods which return a string have an optional
parameter 'wantprefixlen' which controls if the prefixlen or netmask
is printed. Per default the prefilen is always shown if the network
contains more than one address::
wantprefixlen == 0 / None don't return anything 1.2.3.0
wantprefixlen == 1 /prefix 1.2.3.0/24
wantprefixlen == 2 /netmask 1.2.3.0/255.255.255.0
wantprefixlen == 3 -lastip 1.2.3.0-1.2.3.255
You can also change the defaults on an per-object basis by fiddling with
the class members:
* NoPrefixForSingleIp
* WantPrefixLen
Examples of string conversions:
>>> IP('10.0.0.0/32').strNormal()
'10.0.0.0'
>>> IP('10.0.0.0/24').strNormal()
'10.0.0.0/24'
>>> IP('10.0.0.0/24').strNormal(0)
'10.0.0.0'
>>> IP('10.0.0.0/24').strNormal(1)
'10.0.0.0/24'
>>> IP('10.0.0.0/24').strNormal(2)
'10.0.0.0/255.255.255.0'
>>> IP('10.0.0.0/24').strNormal(3)
'10.0.0.0-10.0.0.255'
>>> ip = IP('10.0.0.0')
>>> print(ip)
10.0.0.0
>>> ip.NoPrefixForSingleIp = None
>>> print(ip)
10.0.0.0/32
>>> ip.WantPrefixLen = 3
>>> print(ip)
10.0.0.0-10.0.0.0
Compatibility and links
=======================
IPy 0.73 works on Python version 2.5-2.7.
This Python module is under BSD license: see COPYING file.
Further Information might be available at:
https://github.com/haypo/python-ipy
TODO
====
* better comparison (__cmp__ and friends)
* tests for __cmp__
* always write hex values lowercase
* interpret 2001:1234:5678:1234/64 as 2001:1234:5678:1234::/64
* move size in bits into class variables to get rid of
some "if self._ipversion ..."
* support for base85 encoding
* support for output of IPv6 encoded IPv4 Addresses
* update address type tables
* first-last notation should be allowed for IPv6
* add IPv6 docstring examples
* check better for negative parameters
* add addition / aggregation
* move reverse name stuff out of the classes and refactor it
* support for aggregation of more than two nets at once
* support for aggregation with "holes"
* support for finding common prefix
* '>>' and '<<' for prefix manipulation
* add our own exceptions instead ValueError all the time
* rename checkPrefix to checkPrefixOk
* add more documentation and doctests
* refactor
What's new
==========
Version 0.75 (2011-04-12)
-------------------------
* IP('::/0').netmask() gives IP('::') instead of IP('0.0.0.0')
Version 0.74 (2011-02-16)
-------------------------
* Fix tests for Python 3.1 and 3.2
* ip.__nonzero__() and (ipa in ipb) return a bool instead of 0 or 1
* IP('0.0.0.0/0') + IP('0.0.0.0/0') raises an error, fix written by Arfrever
Version 0.73 (2011-02-15)
-------------------------
* Support Python 3: setup.py runs 2to3
* Update the ranges for IPv6 IPs
* Fix reverseName() and reverseNames() for IPv4 in IPv6 addresses
* Drop support of Python < 2.5
Version 0.72 (2010-11-23)
-------------------------
* Include examples and MANIFEST.in in source build (add them to
MANIFEST.in)
* Remove __rcsid__ constant from IPy module
Version 0.71 (2010-10-01)
-------------------------
* Use xrange() instead of range()
* Use isinstance(x, int) instead of type(x) == types.IntType
* Prepare support of Python3 (use integer division: x // y)
* Fix IP(long) constructor: ensure that the address is not too large
* Constructor raise a TypeError if the type is not int, long,
str or unicode
* 223.0.0.0/8 is now public (belongs to APNIC)
Version 0.70 (2009-10-29)
-------------------------
* New "major" version because it may break compatibility
* Fix __cmp__(): IP('0.0.0.0/0') and IP('0.0.0.0') are not equal
* Fix IP.net() of the network "::/0": "::" instead of "0.0.0.0".
IPy 0.63 should fix this bug, but it wasn't.
Version 0.64 (2009-08-19)
-------------------------
* Create MANIFEST.in to fix setup.py bdist_rpm, fix by Robert Nickel
Version 0.63 (2009-06-23)
-------------------------
* Fix formatting of "IPv4 in IPv6" network, eg. IP('::ffff:192.168.10.0/120'),
the netmask ("/120" in the example) was missing!
Version 0.62 (2008-07-15)
-------------------------
* Fix reverse DNS of IPv6 address: use ".ip6.arpa." suffix instead of
deprecated ".ip6.int." suffix
Version 0.61 (2008-06-12)
-------------------------
* Patch from Aras Vaichas allowing the [-1] operator
to work with an IP object of size 1.
Version 0.60 (2008-05-16)
-------------------------
* strCompressed() formats '::ffff:a.b.c.d' correctly
* Use strCompressed() instead of strFullsize() to format IP addresses,
ouput is smarter with IPv6 address
* Remove check_addr_prefixlen because it generates invalid IP address
Keywords: ipv4 ipv6 netmask
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Environment :: Plugins
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Communications
Classifier: Topic :: Internet
Classifier: Topic :: System :: Networking
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Natural Language :: English
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3