在日常网络规划中,会有很多关于IP地址的分配规划问题,如果是手动分配,在量很大的情况下,容易出错。而利用IPy这个python模块,可以很容易实现对iP地址的分配等操作。
以下是对IPy模块学习的一个记录。
IPy模块简介
主要用处:
IPy-用于处理IPv4和IPv6地址和网络的类和工具。
IPy相关:
IPy源码: https://github.com/autocracy/python-ipy/
IPy类和方法
IPy主要有如下类和方法:
1 | dir(IPy) |
其中有IPint,IP,IPSet是三个类。
一般都使用IP类,IP类是IPint的代替,IP类继承IPint类。
INT_TYPES,IPV6_MAP_MASK,IPV6_TEST_MAP,IPv4ranges, IPv6ranges,MAX_IPV4_ADDRESS,MAX_IPV6_ADDRESS,STR_TYPES这都是定义的常量。
IPint类 class IPint(object):
处理返回整数的IP地址。
因为IP类继承自IPint,所以IPint类中的方法在IP类中同样适用。
下面会记录常用方法。
__init__(self, data, ipversion=0, make_net=0)
data可以是常见的IPv4和IPv6地址的各种表现形式。支持前缀表示,IP段表示,小数点掩码表示,单个IP等。
也可以输入10进制的进制,2进制的地址等。
ipversion可以制定地址的版本,版本为4或者6,输入其他会报错。
mask_net如果是为Ture,则可以通过指定掩码来分配IP地址。
测试如下:
1 | '127.0.0.0/8')) print(IP( |
常用方法:
1 | #实例化一个IP地址 |
IP类,class IP(IPint):
IP类继承自IPint,所以IP类具有IPint的所有方法。
IP类主要处理IP地址和网络。IP类与IPint相比,返会的不再是整数型值,而是网络形式的字符串。
1 | ipint = IPint('192.168.1.0/24') |
IPSet类,IPSet(collections.MutableSet):
可以用来对网段进行汇总。
IPSet仅仅接收IP实例的对象。
IPSet的值是存在列表中。
1 | from IPy import IPSet |
IPy中的其他常用方法:
1 | def _parseAddressIPv6(ipstr): #将IPv6字符串解析为十进制的整型数据 |
利用IPy写的小程序:
批量分配指定掩码和分配个数的IPv4或者IPv6地址:
通过下面的程序,可以指定开始的一个IPv4或者IPv6地址,然后指定掩码,指定需要生成的网段个数,就可以通过程序批量分配地址。
地址输出格式,可以根据需要,灵活定义。
1 | # -*- coding: utf-8 -*- |
程序运行结果:
1 | 批量分配业务IPv6地址: |
可将批量生成的IP地址直接复制到Excel表格,或者文件中,用作后续批量生成网络设备配置等。
按固定格式批量分配掩码为64位的IPv6地址:
在网络规划中,需要给业务分配IPv6地址时,假设掩码都是64。同时需要给出IPv6对应的网关地址。
以下程序,给出一个开始的IPv6地址,然后指定count需要分配多少个地址。就会打印出指定数量的IPv6地址,同时给错每个地址对应的指定的网关地址。
1 | # -*- coding: utf-8 -*- |
程序运行结果:
1 | FD00:0:0004:009B:: |
得到想要地址后,可以直接复制到Excel表格中,或者直接写到文件中。用于后续批量生成配置。
至于输出的IPv6地址格式,或者IPv4地址格式,可以根据需要灵活控制。
参考资料: