IPy处理ip地址

python的第三方模块IPy可以辅助完成各种IP计算等功能。

安装IPy

pip install IPy

IP地址基本处理

使用IP类判断IP类型

IP('10.0.0.1').version()
IP('10.0.0.0/24').version()
IP('::1').version()

输出4表示IPv4,输出6表示IPv6

输出指定网段的IP个数及清单

ip = IP('10.0.0.0/24')
print ip.len()
for x in ip:
    print x

常见的IP类方法

输出反向解析地址格式

ip = IP('192.168.1.50')
ip.reverseName()

输出:50.1.168.192.in-addr.arpa.


输出IP类型

ip = IP('192.168.1.50')
ip.iptype()

输出:PRIVATE(私网),PUBLIC(公网)


转换为整形格式

ip = IP('192.168.1.50')
ip.int()

输出:3232235826


转换为十六进制格式

ip = IP('192.168.1.50')
ip.strHex()

输出:0xc0a80132


转换为二进制格式

ip = IP('192.168.1.50')
ip.strBin()

十六进制转成IP

IP(0xc0a80132)

输出:192.168.1.50
其他格式也可以这样转回去

根据IP与掩码生产网段格式

IP('192.168.1.0').make_net('255.255.255.0')

IP('192.168.1.0').make_net('255.255.255.254')

输出:192.168.1.0/24
192.168.1.0/31

其他形式:

IP('192.168.1.0/255.255.255.0', make_net=True)

IP('192.168.1.0-192.168.1.255', make_net=True)

setNormal方法指定参数值返回不同类型的网段格式

setNormal方法指定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.255

IP('192.168.1.0/24').strNormal(0)
IP('192.168.1.0/24').strNormal(1)
IP('192.168.1.0/24').strNormal(2)
IP('192.168.1.0/24').strNormal(3)

多网络计算方法

判断IP地址和网段是否包含在另一网段中

'192.168.1.10' in IP('192.168.1.0/24')

输出:True(包含),False(不包含)

使用overlaps方法判断是否两个网段有重叠

IP('192.168.1.0/24').overlaps('192.168.2.0/24')

输出:0(不重叠)

IP('192.168.0.0/23').overlaps('192.168.1.0/24')

输出:1(有重叠)

实例

根据输入的IP或网段,返回广播、掩码、反向解析等信息。

from IPy import IP

ip_s = raw_input('Please input an IP or net-range: ')
ips = IP(ip_s)


if len(ips) > 1:
    print('net: %s' % ips.net())
    print('netmask: %s' % ips.netmask())
    print('broadcast: %s' % ips.broadcast())
    print('reverse address: %s' % ips.reverseNames()[0])
    print('subnet: %s' % len(ips))
else:
    print('reverse address: %s' % ips.reverseNames()[0])

print('hexadecimal: %s' % ips.strHex())
print('binary ip: %s' % ips.strBin())
print('iptype: %s' % ips.iptype())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值