处理IPv4和IPv6地址和网络的类和工具
的Python项目详细描述
ipy-用于处理ipv4和ipv6地址和网络的类和工具。
以及IPv6地址和网络。它受到了rime的perl module net::ip接口的极大启发,但是
并没有共享实现。它不共享非cidr网络掩码,
所以像0xffffff0f网络掩码这样的时髦东西在这里是做不到的。:
>;>;从IPY导入IP
>;>;IP=IP('127.0.0.0/30')
>;>;对于IP中的X:
…打印(x)
……
>127.0.0.0.0.0
>127.0.0.0.1
>127.0.0.0.2
>127.0.0.0.0.3
>>;IP2=IP('0x7F0000000/30')
>;IP==IP2
>1
>1
>1.0.0.0.0.127.0.127.0.127.0.127.0.127.1.0.0.0.127.127.1.0.0.127.127.1.0.0.127.127.1.0.127.1.0.127.0.127.1.0.127.1.0.127.1.0 A.',"2.0.0.127.在addr.arpa中,""3.0.0.127.在addr.arpa中,']
>;>ip.reversename()
'0-3.0.0.127.在addr.arpa中,'
>;>ip.iptype()
"环回"
支持大多数IP地址格式
==
>;IP('10.0.0.0/8'.0.0/8').version()
>4
>>;IP('::1').version()
>6
>
IPv4地址
->
:
>
>>;打印(IP(0x7F000001)IP(0x7F000001))
127.0.0.1
>>;打印(IP('0x7F000001')
>127.0.0.0.0.0.1
>>;打印(IP('0x7F000001')
>127.0.0.0.0.0.1
>>;打印(IP('127.0.0.1'))
127.0.0.1
>;>;打印(IP('10')
10.0.0
IPv6地址
----
:
>;>;打印(IP('1080:0:0:8:800:200C:417A')
1080::8:800:200C:417A
>;打印(IP('1080::8:800:200C:417A'))
1080::8:800:200C:417A
>;>;打印(IP(':1'))
:::1
>;>;打印(IP(':13.1.68.3'))
::d01:4403
网络掩码和前缀打印(IP('127.0.0.0/8'))
127.0.0/8
>;>;打印(IP('127.0.0.0/255.0.0.0'))
127.0.0/8
>;打印(IP('127.0.0.0-127.255.255.255'))
127.0.0.0/8
导出网络地址
======
IPY可以通过应用给定的网络掩码将IP地址转换为网络地址:::
>;>;打印(IP('127.0.0.1/255.0.0',设为"net=true")
127.0.0.0/8
这也可以在现有的IP实例中完成:::
>;>;打印(IP('127.0.0.1')。make_net('255.0.0.0'))
127.0.0.0/8
convert address to string
=====
几乎所有返回字符串的类方法都有一个可选的参数"wantprefixlen",用于控制是否打印前缀或网络掩码。默认情况下,如果网络包含多个地址,则始终显示前缀:::
wantprefixlen==0/none不返回任何1.2.3.0
wantprefixlen==1/prefix 1.2.3.0/24
wantprefixlen==2/netmask1.2.3.0/255.255.255.0
wantprefixlen==3-lastip 1.2.3.0-1.2.3.255
您还可以通过修改类成员来更改每个对象的默认值:
-noprefixforsingleip
-wantprefixlen
转换:
>
>>;IP('10.0.0.0.0/32.0.0/10.0.0.0.0'
>;IP('10.0.0.0.0/24')
'10.0.0.0.0.0.0.0/24'
>
>
>
>
>
>
>
>;标准('10.0.0.0.0.0.0'
>>10.0.0.0.0.0.0'
>>>>>>>;10.0.0.0.0.0.0.0.0.0.0'
>>IP('10.0.0.0/24')。标准(1)
'10.0.0.0/24'
>>>>>>;IP('10.0.0.0.0/24')。标准(2)
'10.0.0.0.0/255.255.255.255.0'
>>;IP('10.0.0.0.0.0/24')
'10.0.0.0.0-10.0.0.0.0.255'
>>>>>;IP('10.0.0.0.0.0.0.0.0')
>>;标准(2)
>>;10.0.0.0.0.0.0.0.0.0/255.0/0/>>打印(IP)
10.0.0
>;>;ip.noprefixforsingleip=none
>;>print(ip)
10.0.0.0/32
>;>ip.wantprefixlen=3
>;>打印(IP)
10.0.0.0-10.0.0
与多个网络一起工作
但是更复杂的范围映射和聚合
requires可用于"ipset"类,该类将保存任意数量的
唯一地址范围并聚合重叠范围。:
>;>>来自IPY导入IP,IPSET
>;>IP('10.0.0.0/22')-IP('10.0.2.0/24')
IPSET([IP('10.0.0.0/23'),IP('10.0.3.0/24')))
>;>IPSET([IP('10.0.0.0/23'),IP('10.0.3.0/24'),IP('10.0.0.2.0/24.0/10.0.0.2.0/24’))
国际公共部门([IP('10.0.0.0.0/22’))
>;s=国际公共部门([IP('10.0.0.0.0.0/22’)))
>>;s.add(IP('192.168.1.0.1.0/29’)))
>国际公共部门([IP('10.0.0.0.0.0/22’)、IP('192.168.1.0.0.0.0.0.0/24’)/10.0.0.0.0.0.0.0.0.0/22’))))>s.丢弃(IP('192.168.1.2'))
>;>;s
ip set([IP('10.0.0.0.0.0.0/22')、IP('192.168.1.1.0/31')、IP('192.168.1.1.1.1.0/31')、IP('192.168.1.1.1.3')、IP('192.168.1.1.4/30')))
`` ipset``支持``集``方法`` isdisjoint```::
>br/>;gt;s isdisjoint(ipset([IP([IP('192.168.0.0.0.0.0.0.0.0/16')]]])))))))))))gt;s.isdisjoint(ipset([ip('172.16.0.0.0.0/12'))
true
``ipset``支持交集::
>>>;s&;ipset([ip('10.0.0.0.0.0.0/8'))
ipset([ip('10.0.0.0.0.0.0.0/22')))
>兼容性和链接
>
=======================
=======>
br/>
ipy 1.00适用于python版本2.6-3.7.
只要不使用减法运算,IP模块就应该在Python2.5中工作。ipset需要collections类的特性,这些特性在python 2.6中出现
,尽管它们可以后端口。
==
>在使用ipv6地址时,最好使用"ip().len()`
,而不是"len(ip)"。具有整数值的地址>;64位可以中断
第二种方法。有关更多信息,请参见http://stackoverflow.com/questions/15650878。
BSD许可证:请参阅复制文件。
有关详细信息,请访问:
https://github.com/autocracy/python ipy
*考虑127.0范围环回,而不是私有的
0.83版(2015-04-04)
---------
*添加承运人级NAT范围
*通过在发布版本中没有字母
0.82A版(2014-10-07)中修复版本号,来稳固许多包装系统文件
*correct x.next()->;下一个(x)python3兼容性
0.82版(2014-10-06)
----
*添加对数组切片的支持
*添加ipset的\uu和\uu以及isdisjoint
*修复ipset中包含可能错误返回false的错误的错误
*添加了一些模糊测试
0.81版(2013-04-08)
----
*更正IPv6地址的reversename(),因此IP('::1')。reversename()返回正确的值。
*将网络掩码感知添加到v46map()
*修复ipset类中的python 3错误
*在mutableset不可用时使ipset基类成为对象,修复
python 2.5中的错误r/>
*删除2.4之前的python支持
*python 3不再需要2to3转换(相同的代码基)
*修复添加非相邻网络:
192.168.0.0/24+192.168.255.0/24生成192.168.0.0/23
*修复添加不创建有效子网的网络:
192.168.1.0/24+192.168.2.0/24生成192.168.1.0/23
*修复添加ipv6地址,其中.int()是<;32位使ipy相信它是一个ipv4地址:
::ffff:0/112+::1:0:0/112使255.255.0.0/111
*添加对ipsets的支持
*添加对减去网络范围的支持
*防止ipv4和ipv6范围相互包含转换映射地址范围
,例如IP('::ffff:192.168.1.1');RFC 4291
*将排序顺序更改为更自然:
IPv6之前的IPv4;先使用不太特定的前缀(/0之前/32)
0.76版(2013-03-19)
----
*IP==其他和IP!=如果other
不是IP对象,则other不会再失败,并出现异常(2011-04-12)
----
*IP('::::0')。netmask()提供IP(':::'),而不是IP('0.0.0')
0.74版(2011-02-16)
----
*修复python 3.1和3.2的测试1
*ip('0.0.0.0/0')+ip('0.0.0.0/0')引发错误,由arfrever编写的fix
0.73版(2011-02-15)
——
*支持python 3:setup.py运行2to3
*更新ipv6 IP的范围
*在ipv6地址中修复ipv4的reversename()和reversenames()
*放弃对python<的支持;2.5
0.72版(2010-11-23)
----
*包括示例和清单。在源代码生成中(将它们添加到
manifest.in)
*从IPY模块中删除"rcsid"常量
0.71版(2010-10-01)
-
*使用x range()而不是range()
*使用isinstance(x,int)而不是type(x)==types.inttype
*准备对python3的支持(使用整数除法:x//y)
*修复ip(long)构造函数:确保地址不太大
*如果类型不是int,long,
str或unicode
*223.0.0/8现在是公共的(属于apnic)
0.70版(2009-10-29)
----
*新的"主要"版本,因为它可能会破坏兼容性网络":/0":"::"而不是"0.0.0"。
IPY 0.63应该可以修复此错误,但它不是。
0.64版(2009-08-19)
=--
*创建manifest.in以修复setup.py bdist\u rpm,由robert nickel修复
0.63版(2009-06-23)
——
*修复"ipv6中的ipv4"网络的格式,例如ip('::ffff:192.168.10.0/120'),
缺少网络掩码(示例中为/120)!
0.62版(2008-07-15)
——
*修复IPv6地址的反向DNS:使用".ip6.arpa."后缀而不是"
已弃用".ip6.int."后缀
0.61版(2008-06-12)
——
*来自Aras Vaichas的补丁允许[-1]运算符
使用大小为1的IP对象。
0.60版(2008-05-16)
——
*strcompressed()格式:::ffff:a.b.c.d'正确
*使用strcompressed()而不是strfullsize()格式化IP地址,
OUPUT使用IPv6地址更智能
*删除check-addr-u前缀,因为它生成无效的IP地址
以及IPv6地址和网络。它受到了rime的perl module net::ip接口的极大启发,但是
并没有共享实现。它不共享非cidr网络掩码,
所以像0xffffff0f网络掩码这样的时髦东西在这里是做不到的。:
>;>;从IPY导入IP
>;>;IP=IP('127.0.0.0/30')
>;>;对于IP中的X:
…打印(x)
……
>127.0.0.0.0.0
>127.0.0.0.1
>127.0.0.0.2
>127.0.0.0.0.3
>>;IP2=IP('0x7F0000000/30')
>;IP==IP2
>1
>1
>1.0.0.0.0.127.0.127.0.127.0.127.0.127.1.0.0.0.127.127.1.0.0.127.127.1.0.0.127.127.1.0.127.1.0.127.0.127.1.0.127.1.0.127.1.0 A.',"2.0.0.127.在addr.arpa中,""3.0.0.127.在addr.arpa中,']
>;>ip.reversename()
'0-3.0.0.127.在addr.arpa中,'
>;>ip.iptype()
"环回"
支持大多数IP地址格式
==
>;IP('10.0.0.0/8'.0.0/8').version()
>4
>>;IP('::1').version()
>6
>
IPv4地址
->
:
>
>>;打印(IP(0x7F000001)IP(0x7F000001))
127.0.0.1
>>;打印(IP('0x7F000001')
>127.0.0.0.0.0.1
>>;打印(IP('0x7F000001')
>127.0.0.0.0.0.1
>>;打印(IP('127.0.0.1'))
127.0.0.1
>;>;打印(IP('10')
10.0.0
IPv6地址
----
:
>;>;打印(IP('1080:0:0:8:800:200C:417A')
1080::8:800:200C:417A
>;打印(IP('1080::8:800:200C:417A'))
1080::8:800:200C:417A
>;>;打印(IP(':1'))
:::1
>;>;打印(IP(':13.1.68.3'))
::d01:4403
网络掩码和前缀打印(IP('127.0.0.0/8'))
127.0.0/8
>;>;打印(IP('127.0.0.0/255.0.0.0'))
127.0.0/8
>;打印(IP('127.0.0.0-127.255.255.255'))
127.0.0.0/8
导出网络地址
======
IPY可以通过应用给定的网络掩码将IP地址转换为网络地址:::
>;>;打印(IP('127.0.0.1/255.0.0',设为"net=true")
127.0.0.0/8
这也可以在现有的IP实例中完成:::
>;>;打印(IP('127.0.0.1')。make_net('255.0.0.0'))
127.0.0.0/8
convert address to string
=====
几乎所有返回字符串的类方法都有一个可选的参数"wantprefixlen",用于控制是否打印前缀或网络掩码。默认情况下,如果网络包含多个地址,则始终显示前缀:::
wantprefixlen==0/none不返回任何1.2.3.0
wantprefixlen==1/prefix 1.2.3.0/24
wantprefixlen==2/netmask1.2.3.0/255.255.255.0
wantprefixlen==3-lastip 1.2.3.0-1.2.3.255
您还可以通过修改类成员来更改每个对象的默认值:
-noprefixforsingleip
-wantprefixlen
转换:
>
>>;IP('10.0.0.0.0/32.0.0/10.0.0.0.0'
>;IP('10.0.0.0.0/24')
'10.0.0.0.0.0.0.0/24'
>
>
>
>
>
>
>
>;标准('10.0.0.0.0.0.0'
>>10.0.0.0.0.0.0'
>>>>>>>;10.0.0.0.0.0.0.0.0.0.0'
>>IP('10.0.0.0/24')。标准(1)
'10.0.0.0/24'
>>>>>>;IP('10.0.0.0.0/24')。标准(2)
'10.0.0.0.0/255.255.255.255.0'
>>;IP('10.0.0.0.0.0/24')
'10.0.0.0.0-10.0.0.0.0.255'
>>>>>;IP('10.0.0.0.0.0.0.0.0')
>>;标准(2)
>>;10.0.0.0.0.0.0.0.0.0/255.0/0/>>打印(IP)
10.0.0
>;>;ip.noprefixforsingleip=none
>;>print(ip)
10.0.0.0/32
>;>ip.wantprefixlen=3
>;>打印(IP)
10.0.0.0-10.0.0
与多个网络一起工作
但是更复杂的范围映射和聚合
requires可用于"ipset"类,该类将保存任意数量的
唯一地址范围并聚合重叠范围。:
>;>>来自IPY导入IP,IPSET
>;>IP('10.0.0.0/22')-IP('10.0.2.0/24')
IPSET([IP('10.0.0.0/23'),IP('10.0.3.0/24')))
>;>IPSET([IP('10.0.0.0/23'),IP('10.0.3.0/24'),IP('10.0.0.2.0/24.0/10.0.0.2.0/24’))
国际公共部门([IP('10.0.0.0.0/22’))
>;s=国际公共部门([IP('10.0.0.0.0.0/22’)))
>>;s.add(IP('192.168.1.0.1.0/29’)))
>国际公共部门([IP('10.0.0.0.0.0/22’)、IP('192.168.1.0.0.0.0.0.0/24’)/10.0.0.0.0.0.0.0.0.0/22’))))>s.丢弃(IP('192.168.1.2'))
>;>;s
ip set([IP('10.0.0.0.0.0.0/22')、IP('192.168.1.1.0/31')、IP('192.168.1.1.1.1.0/31')、IP('192.168.1.1.1.3')、IP('192.168.1.1.4/30')))
`` ipset``支持``集``方法`` isdisjoint```::
>br/>;gt;s isdisjoint(ipset([IP([IP('192.168.0.0.0.0.0.0.0.0/16')]]])))))))))))gt;s.isdisjoint(ipset([ip('172.16.0.0.0.0/12'))
true
``ipset``支持交集::
>>>;s&;ipset([ip('10.0.0.0.0.0.0/8'))
ipset([ip('10.0.0.0.0.0.0.0/22')))
>兼容性和链接
>
=======================
=======>
br/>
ipy 1.00适用于python版本2.6-3.7.
只要不使用减法运算,IP模块就应该在Python2.5中工作。ipset需要collections类的特性,这些特性在python 2.6中出现
,尽管它们可以后端口。
>在使用ipv6地址时,最好使用"ip().len()`
,而不是"len(ip)"。具有整数值的地址>;64位可以中断
第二种方法。有关更多信息,请参见http://stackoverflow.com/questions/15650878。
BSD许可证:请参阅复制文件。
有关详细信息,请访问:
https://github.com/autocracy/python ipy
*考虑127.0范围环回,而不是私有的
0.83版(2015-04-04)
---------
*添加承运人级NAT范围
*通过在发布版本中没有字母
0.82A版(2014-10-07)中修复版本号,来稳固许多包装系统文件
*correct x.next()->;下一个(x)python3兼容性
0.82版(2014-10-06)
----
*添加对数组切片的支持
*添加ipset的\uu和\uu以及isdisjoint
*修复ipset中包含可能错误返回false的错误的错误
*添加了一些模糊测试
0.81版(2013-04-08)
----
*更正IPv6地址的reversename(),因此IP('::1')。reversename()返回正确的值。
*将网络掩码感知添加到v46map()
*修复ipset类中的python 3错误
*在mutableset不可用时使ipset基类成为对象,修复
python 2.5中的错误r/>
*删除2.4之前的python支持
*python 3不再需要2to3转换(相同的代码基)
*修复添加非相邻网络:
192.168.0.0/24+192.168.255.0/24生成192.168.0.0/23
*修复添加不创建有效子网的网络:
192.168.1.0/24+192.168.2.0/24生成192.168.1.0/23
*修复添加ipv6地址,其中.int()是<;32位使ipy相信它是一个ipv4地址:
::ffff:0/112+::1:0:0/112使255.255.0.0/111
*添加对ipsets的支持
*添加对减去网络范围的支持
*防止ipv4和ipv6范围相互包含转换映射地址范围
,例如IP('::ffff:192.168.1.1');RFC 4291
*将排序顺序更改为更自然:
IPv6之前的IPv4;先使用不太特定的前缀(/0之前/32)
0.76版(2013-03-19)
----
*IP==其他和IP!=如果other
不是IP对象,则other不会再失败,并出现异常(2011-04-12)
----
*IP('::::0')。netmask()提供IP(':::'),而不是IP('0.0.0')
0.74版(2011-02-16)
----
*修复python 3.1和3.2的测试1
*ip('0.0.0.0/0')+ip('0.0.0.0/0')引发错误,由arfrever编写的fix
0.73版(2011-02-15)
——
*支持python 3:setup.py运行2to3
*更新ipv6 IP的范围
*在ipv6地址中修复ipv4的reversename()和reversenames()
*放弃对python<的支持;2.5
0.72版(2010-11-23)
----
*包括示例和清单。在源代码生成中(将它们添加到
manifest.in)
*从IPY模块中删除"rcsid"常量
0.71版(2010-10-01)
-
*使用x range()而不是range()
*使用isinstance(x,int)而不是type(x)==types.inttype
*准备对python3的支持(使用整数除法:x//y)
*修复ip(long)构造函数:确保地址不太大
*如果类型不是int,long,
str或unicode
*223.0.0/8现在是公共的(属于apnic)
0.70版(2009-10-29)
----
*新的"主要"版本,因为它可能会破坏兼容性网络":/0":"::"而不是"0.0.0"。
IPY 0.63应该可以修复此错误,但它不是。
0.64版(2009-08-19)
=--
*创建manifest.in以修复setup.py bdist\u rpm,由robert nickel修复
0.63版(2009-06-23)
——
*修复"ipv6中的ipv4"网络的格式,例如ip('::ffff:192.168.10.0/120'),
缺少网络掩码(示例中为/120)!
0.62版(2008-07-15)
——
*修复IPv6地址的反向DNS:使用".ip6.arpa."后缀而不是"
已弃用".ip6.int."后缀
0.61版(2008-06-12)
——
*来自Aras Vaichas的补丁允许[-1]运算符
使用大小为1的IP对象。
0.60版(2008-05-16)
——
*strcompressed()格式:::ffff:a.b.c.d'正确
*使用strcompressed()而不是strfullsize()格式化IP地址,
OUPUT使用IPv6地址更智能
*删除check-addr-u前缀,因为它生成无效的IP地址