python ipaddress模块_Python学习笔记-IP地址处理模块Ipy

IP地址处理模块Ipy

IPy模块可以很好的辅助我们高效完成IP的规划工作。

安装IPy模块[root@kurol ~]# python36 -m easy_install -i http://pypi.douban.com/simple/ IPy

导入模块In [12]: from IPy import IP

1、IP地址、网段的基本处理

通过version区分IPv4和IPv6:In [13]: testip = ('10.0.0.0/8','::1')

In [14]: IP(testip[0]).version()

Out[14]: 4

In [15]: IP(testip[1]).version()

Out[15]: 6

通过指定的网段输出该网段的IP个数及所有IP地址清单:In [25]: testip1 = IP('192.168.1.0/24')

In [26]: print (testip1.len())

256

In [27]: for x in testip1:

...: print (x)

...:

192.168.1.0

192.168.1.1

192.168.1.2

......

IP类常用方法:In [32]: testip2 = IP('192.168.100.10')

In [33]: testip2.reverseNames() #反向解析地址格式

Out[33]: ['10.100.168.192.in-addr.arpa.']

In [34]: testip2.iptype()   #返回IP类型,192.168.100.10为私有地址

Out[34]: 'PRIVATE'

In [35]: IP('8.8.8.8').iptype()   #返回IP类型,8.8.8.8为共有地址

Out[35]: 'PUBLIC'

In [36]: testip2.int()  #转换成整型格式

Out[36]: 3232261130

In [37]: testip2.strHex()   #转换成十六进制格式

Out[37]: '0xc0a8640a'

In [38]: testip2.strBin()   #转换成二进制格式

Out[38]: '11000000101010000110010000001010'

In [39]: print (IP(0xc0a8640a))   #十六进制转成IP格式

192.168.100.10

网络地址转换,根据IP与掩码生成网段格式:In [47]: print (IP('192.168.1.0').make_net('255.255.255.0'))

192.168.1.0/24

In [48]: print (IP('192.168.1.0/255.255.255.0',make_net=True))

192.168.1.0/24

In [49]: print (IP('192.168.1.0-192.168.1.255',make_net=True))

192.168.1.0/24

通过strNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段。输出类型为字符串:

wantprefixlen取值及含义:wantprefixlen=0,无返回,如192.168.1.0

wantprefixlen=1,prefix格式,如192.168.1.0/24

wantprefixlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0

wantprefixlen=3,lastIP格式,如192.168.1.0-192.168.1.255In [52]: IP('192.168.1.0/24').strNormal(wantprefixlen=0)

Out[52]: '192.168.1.0'

In [53]: IP('192.168.1.0/24').strNormal(wantprefixlen=1)

Out[53]: '192.168.1.0/24'

#省略wantprefixlen

In [54]: IP('192.168.1.0/24').strNormal(0)

Out[54]: '192.168.1.0'

In [55]: IP('192.168.1.0/24').strNormal(1)

Out[55]: '192.168.1.0/24'

In [56]: IP('192.168.1.0/24').strNormal(2)

Out[56]: '192.168.1.0/255.255.255.0'

In [57]: IP('192.168.1.0/24').strNormal(3)

Out[57]: '192.168.1.0-192.168.1.255'

2、多网络计算方法

IPy支持类似于数值型数据的比较,以帮助IP对象进行比较In [67]: IP('10.0.0.0/24') > IP('12.0.0.0/24')

Out[67]: False

In [68]: IP('10.0.0.0/24') 

Out[68]: True

判断IP地址和网段是否包含于另一个网段中:In [69]: '192.168.1.100' in IP('192.168.1.0/24')

Out[69]: True

In [70]: '192.168.2.100' in IP('192.168.1.0/24')

Out[70]: False

In [71]: '192.168.1.0/24' in IP('192.168.0.0/16')

Out[71]: True

判断两个网段是否存在重叠,采用IPy提供的overlaps方法:In [74]: IP('192.168.0.0/23').overlaps('192.168.1.0/24')

Out[74]: 1  #返回1代表存在重叠

In [75]: IP('192.168.1.0/24').overlaps('192.168.2.0')

Out[75]: 0#返回0代表不存在重叠

实例:根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息:[root@kurol pkg1]# vim testip.py#!/usr/bin/python

#coding:utf-8

#

from IPy import IP

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

ip_test = raw_input('请输入IP地址或网段地址:')

ips = IP(ip_test)

if len(ips) > 1:

print ('网络地址:%s' % ips.net())

print ('掩码:%s' % ips.netmask())

print ('网络广播地址:%s' % ips.broadcast())

print ('地址反向解析:%s' % ips.reverseNames())

print ('网络子网数:%s' % len(ips))

else:

print ('IP反向解析 %s' % ips.reverseNames())

print ('此IP地址转换成十六进制: %s' % ips.strHex())

print ('此IP地址转换成二进制: %s' % ips.strBin())

print ('此IP地址类型: %s' % ips.iptype())

执行结果:[root@kurol pkg1]# python testip.py

请输入IP地址或网段地址:192.168.1.0/24

网络地址:192.168.1.0

掩码:255.255.255.0

网络广播地址:192.168.1.255

地址反向解析:['1.168.192.in-addr.arpa.']

网络子网数:256

此IP地址转换成十六进制: 0xc0a80100

此IP地址转换成二进制: 11000000101010000000000100000000

此IP地址类型: PRIVATE

[root@kurol pkg1]# python testip.py

请输入IP地址或网段地址:192.168.1.1

IP反向解析 ['1.1.168.192.in-addr.arpa.']

此IP地址转换成十六进制: 0xc0a80101

此IP地址转换成二进制: 11000000101010000000000100000001

此IP地址类型: PRIVATE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值