处理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地址

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从通知中获取图像?   java按住按钮将循环一个动作,直到它被释放   JavaJavassist:如何将动态生成的类添加到特定的包中?   java我需要获取一个字符串并输出字符串中出现最多的单词   java合并排序堆栈溢出错误   java如何使用spring boot配置hibernate   Android中带选择器的Java TCP服务器NIO   java对于长度急剧变化的输入,什么是最佳的StringBuffer初始容量?   java SpringBoot:REST endpint中@RequestParam参数的自定义验证   JavaJPaQuery。fetchResults()已弃用,应如何替换它?   JavaJNA结构创建带来麻烦   java创建只包含响应中某些元素的POJO   java巨大的Perm Gen与应用程序大小相比,是否正常?   JavalibgdxMoveToAction。将setPosition()设置为负坐标,以将演员移出舞台