IPy

您所在的位置:网站首页 ipv6的简写 IPy

IPy

2024-07-17 16:21| 来源: 网络整理| 查看: 265

在日常网络规划中,会有很多关于IP地址的分配规划问题,如果是手动分配,在量很大的情况下,容易出错。而利用IPy这个python模块,可以很容易实现对iP地址的分配等操作。

以下是对IPy模块学习的一个记录。

IPy模块简介 主要用处:

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

IPy相关:

IPy源码: https://github.com/autocracy/python-ipy/

IPy类和方法 IPy主要有如下类和方法: dir(IPy) Out[8]: ['INT_TYPES', 'IP', 'IPSet', 'IPV6_MAP_MASK', 'IPV6_TEST_MAP', 'IPint', 'IPv4ranges', 'IPv6ranges', 'MAX_IPV4_ADDRESS', 'MAX_IPV6_ADDRESS', 'STR_TYPES', '_BitTable', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_checkNetaddrWorksWithPrefixlen', '_checkNetmask', '_checkPrefix', '_count0Bits', '_count1Bits', '_countFollowingZeros', '_intToBin', '_ipVersionToLen', '_netmaskToPrefixlen', '_parseAddressIPv6', '_prefixlenToNetmask', '_remove_subprefix', 'bisect', 'collections', 'intToIp', 'parseAddress', 'sys', 'types', 'xrange']

其中有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地址。

测试如下:

>>> print(IP('127.0.0.0/8')) 127.0.0.0/8 >>> print(IP('127.0.0.0/255.0.0.0')) 127.0.0.0/8 >>> print(IP('127.0.0.0-127.255.255.255')) 127.0.0.0/8 >>> print(IP('127.0.0.1/255.0.0.0', make_net=True)) 127.0.0.0/8 [39]: from IPy import IPint ip = IPint('192.168.1.0/24',make_net=True) ip Out[41]: IPint('192.168.1.0/24') for x in ip: print(x) 3232235776 3232235777 #返回的是整数类型的IP地址。 3232235778 3232235779 3232235780 ... 常用方法: #实例化一个IP地址 ip = IPint('192.168.1.0/24') ip.int() #返回第一个长整型的IP地址 Out[52]: 3232235776 ip.version() #返回ip的版本号 Out[53]: 4 ip.prefixlen() #返回掩码长度 Out[54]: 24 ip.net() #返回第一个长整型的IP地址 Out[55]: 3232235776 ip.broadcast() #返回长整型的广播地址 Out[56]: 3232236031 ----------------------------------------- _printPrefix(self, want): #按输入的want打印掩码 ip._printPrefix(0) #want == 0,None,什么也不返回 Out[58]: '' ip._printPrefix(1) #want == 1, 返回前缀形式的掩码 Out[59]: '/24' ip._printPrefix(2) #want == 2,返回小数点的掩码 Out[60]: '/255.255.255.0' ip._printPrefix(3) #want == 3,返回网络号的最后一个地址 Out[61]: '-192.168.1.255' ipv6 = IPint('2003::/64') ipv6._printPrefix Out[70]: ipv6._printPrefix(0) Out[71]: '' ipv6._printPrefix(1) Out[72]: '/64' ipv6._printPrefix(2) Out[73]: '/ffff:ffff:ffff:ffff:0000:0000:0000:0000' ipv6._printPrefix(3) Out[74]: '-2003:0000:0000:0000:ffff:ffff:ffff:ffff' -------------------------------------- #可以将IP地址转化为多种类型的字符串。 ipv6.strBin() #返会IPv4或者IPv6的2进制形式字符串 Out[79]: '00100000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' ipv6.strCompressed() #返会简写的形式的地址,主要针对IPv6有效果 Out[80]: '2003::/64' ipv6.strDec() #返会10进制的地址形式 Out[81]: '42550872755692912415807417417958686720' ipv6.strFullsize() #返会完整形式的地址格式。 Out[82]: '2003:0000:0000:0000:0000:0000:0000:0000/64' ipv6.strHex() #返会16进制形式的地址 Out[83]: '0x20030000000000000000000000000000' ipv6.strNetmask() #返会掩码长度 Out[84]: '/64' ipv6.strNormal(wantprefixlen = None) #可以按输入的wantprefixlen来转化为字符串 ipv6.strNormal(wantprefixlen = 0) #不输出掩码 Out[92]: '2003:0:0:0:0:0:0:0' ipv6.strNormal((wantprefixlen = 1) #输出前缀掩码 Out[93]: '2003:0:0:0:0:0:0:0/64' ipv6.strNormal((wantprefixlen = 2) #输出网络掩码 Out[94]: '2003:0:0:0:0:0:0:0/ffff:ffff:ffff:ffff:0000:0000:0000:0000' ipv6.strNormal(3) #输出地址段 Out[95]: '2003:0:0:0:0:0:0:0-2003:0000:0000:0000:ffff:ffff:ffff:ff --------------------------------------- ip.iptype() #返会IP地址的类型 Out[98]: 'PRIVATE' ip2 = IPint('1.1.1.1') ip2.iptype() Out[100]: 'PUBLIC' print(IP('127.0.0.1').iptype()) Out[101]: LOOPBACK print(IP('::1').iptype()) Out[102]: LOOPBACK print(IP('2001:0658:022a:cafe:0200::1').iptype()) Out[103]: ALLOCATED RIPE NCC ----------------------------------------- ip.netmask() #返会整型形式的掩码 Out[104]: 4294967040 ip.strNetmask() #返会字符串形式的掩码 Out[105]: '255.255.255.0' ip.len() #返会子网的长度 Out[106]: 256 IP('10.1.1.0/28').len() Out[108]: 16 ---------------------------------------- ip.__getitem__(1) #返会网络号中第i个地址。 Out[120]: 3232235777 ip.__getitem__(2) Out[121]: 3232235778 ip.__getitem__(3) Out[122]: 3232235779 ip Out[124]: IPint('192.168.1.0/24') ip.__contains__('192.168.1.1') #判断一个地址是否在这个网段中 Out[125]: True ip.__contains__('192.168.2.1') Out[126]: False '192.168.1.1' in ip Out[127]: True '192.168.3.1' in ip Out[128]: False ------------------------------------------ #检查给定IP地址是否在这个实例化的IP地址返回内 def overlaps(self, item): #如果不重叠,返会0; #如果给定地址在这个实例化的IP地址范围内返会1. #如果给定地址在不这个实例化的IP地址范围内返会-1. IP('192.168.1.0/24').overlaps('192.168.1.254') Out[131]: 1 IP('192.168.1.0/24').overlaps('192.168.2.254') Out[132]: 0 IP('192.168.1.0/24').overlaps('192.168.0.0/16') Out[134]: -1 ---------------------------------------- #实例化后的两个IP地址可以进行比较,IPv4总是小于IPv6地址,第一个地址总是小的。 掩码短的小于掩码长的 #如果self < other,返会-1, 如果self == other,返会0,如果self > other,返会1. ip Out[158]: IPint('192.168.1.0/24') ip2 Out[159]: IPint('1.1.1.1') ip3 Out[160]: IP('192.0.0.0/8') ipv6 Out[161]: IPint('2003::/64') ip4 = IP('192.168.1.0/24') ip.__cmp__(ip4) Out[163]: 0 ip.__cmp__(ip3) Out[166]: 1 ip.__cmp__(ipv6) Out[168]: -1 ip > ip2 Out[177]: True ip


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3