mirror of
https://git.photon.obnh.io/AXSY/whois.git
synced 2026-03-13 02:01:32 +00:00
Based on mwhois by Antonios A. Chariton Modifications for SCION AS support by Olaf Baumert, Axpo Systems AG
235 lines
4.5 KiB
Plaintext
235 lines
4.5 KiB
Plaintext
=IP Constructor Stress Tests=
|
|
|
|
Copyright (c) 2008-2015, David P. D. Moss. All rights reserved.
|
|
|
|
{{{
|
|
|
|
>>> from netaddr import *
|
|
|
|
}}}
|
|
|
|
IPAddress constructor - integer values.
|
|
|
|
{{{
|
|
|
|
>>> IPAddress(1)
|
|
IPAddress('0.0.0.1')
|
|
|
|
>>> IPAddress(1, 4)
|
|
IPAddress('0.0.0.1')
|
|
|
|
>>> IPAddress(1, 6)
|
|
IPAddress('::1')
|
|
|
|
>>> IPAddress(10)
|
|
IPAddress('0.0.0.10')
|
|
|
|
>>> IPAddress(0x1ffffffff)
|
|
IPAddress('::1:ffff:ffff')
|
|
|
|
>>> IPAddress(0xffffffff, 6)
|
|
IPAddress('::255.255.255.255')
|
|
|
|
>>> IPAddress(0x1ffffffff)
|
|
IPAddress('::1:ffff:ffff')
|
|
|
|
>>> IPAddress(2 ** 128 - 1)
|
|
IPAddress('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
|
|
|
}}}
|
|
|
|
IPAddress constructor - IPv4 inet_aton behaviour (default).
|
|
|
|
{{{
|
|
|
|
# Hexadecimal octets.
|
|
>>> IPAddress('0x7f.0x1')
|
|
IPAddress('127.0.0.1')
|
|
|
|
>>> IPAddress('0x7f.0x0.0x0.0x1')
|
|
IPAddress('127.0.0.1')
|
|
|
|
# Octal octets.
|
|
>>> IPAddress('0177.01')
|
|
IPAddress('127.0.0.1')
|
|
|
|
# Mixed octets.
|
|
>>> IPAddress('0x7f.0.01')
|
|
IPAddress('127.0.0.1')
|
|
|
|
# Partial addresses - pretty weird ...
|
|
>>> IPAddress('127')
|
|
IPAddress('0.0.0.127')
|
|
|
|
>>> IPAddress('127')
|
|
IPAddress('0.0.0.127')
|
|
|
|
>>> IPAddress('127.1')
|
|
IPAddress('127.0.0.1')
|
|
|
|
>>> IPAddress('127.0.1')
|
|
IPAddress('127.0.0.1')
|
|
|
|
}}}
|
|
|
|
IPAddress constructor - IPv4 inet_pton behaviour (stricter parser).
|
|
|
|
{{{
|
|
|
|
# Octal octets.
|
|
>>> IPAddress('0177.01', flags=INET_PTON)
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: failed to detect a valid IP address from '0177.01'
|
|
|
|
# Mixed octets.
|
|
>>> IPAddress('0x7f.0.01', flags=INET_PTON)
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: failed to detect a valid IP address from '0x7f.0.01'
|
|
|
|
# Partial octets.
|
|
>>> IPAddress('10', flags=INET_PTON)
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: failed to detect a valid IP address from '10'
|
|
|
|
>>> IPAddress('10.1', flags=INET_PTON)
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: failed to detect a valid IP address from '10.1'
|
|
|
|
>>> IPAddress('10.0.1', flags=INET_PTON)
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: failed to detect a valid IP address from '10.0.1'
|
|
|
|
>>> IPAddress('10.0.0.1', flags=INET_PTON)
|
|
IPAddress('10.0.0.1')
|
|
|
|
}}}
|
|
|
|
IPAddress constructor - zero filled octets.
|
|
|
|
{{{
|
|
|
|
# This takes a lot of people by surprise ...
|
|
>>> IPAddress('010.000.000.001')
|
|
IPAddress('8.0.0.1')
|
|
|
|
# So, we need this!
|
|
>>> IPAddress('010.000.000.001', flags=ZEROFILL)
|
|
IPAddress('10.0.0.1')
|
|
|
|
# Zero-fill with inet_aton behaviour - partial octets are OK but zero-filled
|
|
# octets are interpreted as decimal ...
|
|
>>> IPAddress('010.000.001', flags=ZEROFILL)
|
|
IPAddress('10.0.0.1')
|
|
|
|
# Zero-fill with inet_pton behaviour - 4 octets only!
|
|
>>> IPAddress('010.000.001', flags=INET_PTON|ZEROFILL)
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: failed to detect a valid IP address from '010.000.001'
|
|
|
|
# Zero-fill with inet_pton behaviour - 4 octets only!
|
|
>>> IPAddress('010.000.000.001', flags=INET_PTON|ZEROFILL)
|
|
IPAddress('10.0.0.1')
|
|
|
|
# To save some typing there are short versions of these flags.
|
|
>>> IPAddress('010.000.000.001', flags=P|Z)
|
|
IPAddress('10.0.0.1')
|
|
|
|
}}}
|
|
|
|
IP network construction.
|
|
|
|
{{{
|
|
|
|
>>> IPNetwork('192.0.2.0/24')
|
|
IPNetwork('192.0.2.0/24')
|
|
|
|
>>> IPNetwork('192.0.2.0/255.255.255.0')
|
|
IPNetwork('192.0.2.0/24')
|
|
|
|
>>> IPNetwork('192.0.2.0/0.0.0.255')
|
|
IPNetwork('192.0.2.0/24')
|
|
|
|
>>> IPNetwork(IPNetwork('192.0.2.0/24'))
|
|
IPNetwork('192.0.2.0/24')
|
|
|
|
>>> IPNetwork(IPNetwork('::192.0.2.0/120'))
|
|
IPNetwork('::192.0.2.0/120')
|
|
|
|
>>> IPNetwork(IPNetwork('192.0.2.0/24'))
|
|
IPNetwork('192.0.2.0/24')
|
|
|
|
>>> IPNetwork('::192.0.2.0/120')
|
|
IPNetwork('::192.0.2.0/120')
|
|
|
|
>>> IPNetwork('::192.0.2.0/120', 6)
|
|
IPNetwork('::192.0.2.0/120')
|
|
|
|
}}}
|
|
|
|
Optional implicit IP network prefix selection rules.
|
|
|
|
{{{
|
|
|
|
>>> IPNetwork('192.0.2.0', implicit_prefix=True)
|
|
IPNetwork('192.0.2.0/24')
|
|
|
|
>>> IPNetwork('231.192.0.15', implicit_prefix=True)
|
|
IPNetwork('231.192.0.15/4')
|
|
|
|
>>> IPNetwork('10', implicit_prefix=True)
|
|
IPNetwork('10.0.0.0/8')
|
|
|
|
}}}
|
|
|
|
Optional flags for tweaking IPNetwork constructor behaviour.
|
|
|
|
{{{
|
|
|
|
>>> IPNetwork('172.24.200')
|
|
IPNetwork('172.24.200.0/32')
|
|
|
|
>>> IPNetwork('172.24.200', implicit_prefix=True)
|
|
IPNetwork('172.24.200.0/16')
|
|
|
|
# Truncate the host bits so we get a pure network.
|
|
>>> IPNetwork('172.24.200', implicit_prefix=True, flags=NOHOST)
|
|
IPNetwork('172.24.0.0/16')
|
|
|
|
|
|
}}}
|
|
|
|
Negative testing
|
|
|
|
{{{
|
|
|
|
>>> IPNetwork('foo')
|
|
Traceback (most recent call last):
|
|
...
|
|
netaddr.core.AddrFormatError: invalid IPNetwork foo
|
|
|
|
}}}
|
|
|
|
Netmasks
|
|
|
|
{{{
|
|
|
|
>>> IPAddress('1.1.1.1').netmask_bits()
|
|
32
|
|
|
|
>>> IPAddress('255.255.255.254').netmask_bits()
|
|
31
|
|
|
|
>>> IPAddress('255.255.255.0').netmask_bits()
|
|
24
|
|
|
|
>>> IPAddress('::').netmask_bits()
|
|
128
|
|
|
|
}}}
|