14.3. IPy模块

IPy - 用于处理IPv4和IPv6地址和网络的类和工具。

以下是IPy模块的安装,这里采用源码的安装方式:

# wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificate
# tar -zxvf IPy-0.81.tar.gz
# cd IPy-0.81
# python setup.py install

14.3.1. 区分Iv4和IPv6

In [17]: IP('192.168.0.0/24').version()
Out[17]: 4

In [18]: IP('::1').version()
Out[18]: 6

14.3.2. 列出网段内的主机数

In [16]: from IPy import IP

In [12]: ip = IP('192.168.10.0/30')

In [13]: ip.len()
Out[13]: 4

In [14]: for i in ip:
    ...:     print i
    ...:
    ...:
192.168.10.0
192.168.10.1
192.168.10.2

常见的方法

In [19]: ip=IP("8.8.8.8")

In [20]: ip.reverseNames()              #反向解析
Out[20]: ['8.8.8.8.in-addr.arpa.']


In [22]: IP('8.8.8.8').iptype()         #IP类型
Out[22]: 'PUBLIC'

In [23]: IP('192.168.1.1').iptype()
Out[23]: 'PRIVATE'

多网络计算方法

#判断IP地址网段是否包含在另一个网段中
In [24]: IP('10.0.0.0/24') < IP('12.0.0.0/24')
Out[24]: True

In [25]: '192.168.2.100' in IP('192.168.2.0')
Out[25]: False

In [26]: '192.168.2.100' in IP('192.168.2.0/24')
Out[26]: True


# 判断两个网段是否存在重叠
In [4]: IP('192.168.0.0/23').overlaps('192.168.1.0/24')
Out[4]: 1

In [5]: IP('192.168.0.0/23').overlaps('192.168.2.0/24')
Out[5]: 0

eg

#!/usr/bin/env python
#-*- coding:utf8 -*-
# auther; 18793
# Date:2019/4/17 10:45
# filename: IPy模块.py
from IPy import IP

ip_s = input("Please input an IP or net-range: ")   #接收输入
ips = IP(ip_s)

if len(ips)>1:
    print("net:{}".format(ips.net()))       #输出网络地址
    print("netmask:{}".format(ips.netmask()))   #输出网络掩码地址
    print("broadcast:{}".format(ips.broadcast()))   #输出广播地址
    print("reverse address:{}".format(ips.reverseNames()[0]))   #输出地址反向解析
    print("subnet:{}".format(len(ips)))     #输出子网数
else:               #为单个地址
    print("reverse address:{}".format(ips.reverseNames()[0]))       #输出IP反向解析

print("hexadecimal:【{}】".format(ips.strHex()))        #输出十六进制地址
print("binary ip:【{}】".format(ips.strBin()))       #输出二进制地址
print("iptype:【{}】".format(ips.iptype()))           #输出地址类型,
C:\Users\18793\Anaconda3\python.exe D:/GitHub/21_staduy_python/python标准库/IPy模块.py
Please input an IP or net-range: 192.168.1.0/24
net:192.168.1.0
netmask:255.255.255.0
broadcast:192.168.1.255
reverse address:1.168.192.in-addr.arpa.
subnet:256
hexadecimal:【0xc0a80100】
binary ip:【11000000101010000000000100000000】
iptype:【PRIVATE】

进程已结束,退出代码 0

Python仓库中IPy的讲解