200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > ip地址范围汇总成ip网段

ip地址范围汇总成ip网段

时间:2020-02-04 16:32:04

相关推荐

ip地址范围汇总成ip网段

将ip地址范围转换成通过掩码表示的形式,可以先将ip范围转换成单个ip,再计算掩码

一、python中实现将IP地址与整数类型之间的转换,有两种方法。

第一种方法:利用socket,struct模块

import socketimport structdef ip2num(ip):#将IP地址转换成整数,返回结果是一个元组(16843009,),通过下标[0]取出第一个值return struct.unpack("!L", socket.inet_aton(ip))[0]print(ip2num('1.1.1.1'))print(type(ip2num('1.1.1.1')))#16843009#<class 'int'>def num2ip(num):#将整数转换成IP地址,类型为字符串return socket.inet_ntoa(struct.pack("!L", num))print(num2ip(16843009))print(type(num2ip(16843009)))#1.1.1.1#<class 'str'>

第二种方法:利用ipaddress模块,ipaddress中有两种方式:

1、使用ipaddress中的IPv4Address和IPv6Address模块,可指定需要转换的IP地址类型,如果类型不匹配则会报错。

import ipaddressdef ip2num(ip):#将IP地址转换成整数类型return int(ipaddress.IPv4Address(ip))print(ip2num('1.1.1.1'))print(type(ip2num('1.1.1.1')))#16843009#<class 'int'>def num2ip(num):#将整数转换成IP地址return str(ipaddress.IPv4Address(num))print(num2ip(16843009))print(type(num2ip(16843009)))#1.1.1.1#<class 'str'>def num2ipv6(num):return str(ipaddress.IPv6Address(num))print(num2ipv6(33686018123141231234123123124124123412))#1957:b0eb:ffa4:5af4:7b46:e610:c5d6:114def ipv62num(ipv6):return int(ipaddress.IPv6Address(ipv6))print(ipv62num('1957:b0eb:ffa4:5af4:7b46:e610:c5d6:114'))#33686018123141231234123123124124123412

2、直接使用ipaddress中的ip_address模块,可以自动识别IP地址的类型,进行转换。

from ipaddress import ip_addressprint(int(ip_address('2.2.2.2')))#33686018print(str(ip_address(33686018)))#2.2.2.2print(int(ip_address('1957:b0eb:ffa4:5af4:7b46:e610:c5d6:114')))#33686018123141231234123123124124123412print(str(ip_address(33686018123141231234123123124124123412)))#1957:b0eb:ffa4:5af4:7b46:e610:c5d6:114

例子:将IP地址范围转换成单个IP

from ipaddress import ip_addressdef ips_range(ips_range):#以‘-’为分割符,识别出起始IP和终止IPip_start, ip_end = ips_range.split('-')#将起始IP和终止IP转换成整数ip_start_int = int(ip_address(ip_start))ip_end_int = int(ip_address(ip_end)) + 1return [str(ip_address(ip)) for ip in range(ip_start_int, ip_end_int)]ips_range_list = ips_range('1.1.1.251-1.1.2.5')print(ips_range_list)#['1.1.1.251', '1.1.1.252', '1.1.1.253', '1.1.1.254', '1.1.1.255', '1.1.2.0', '1.1.2.1', '1.1.2.2', '1.1.2.3', '1.1.2.4', '1.1.2.5']

3、列出IP网段中所有的IP地址

import ipaddressdef ip_network2ips(ips_network):#将ip网段的字符串类型转换成IPv4Network类型network = ipaddress.ip_network(ips_network, strict=False)#print(network, type(network))#1.1.1.0/29 <class 'ipaddress.IPv4Network'>#调用hosts()方法,将ip网段转换成单个ipreturn network.hosts()ips = ip_network2ips('1.1.1.1/29')for ip in ips:print(ip)# 1.1.1.1# 1.1.1.2# 1.1.1.3# 1.1.1.4# 1.1.1.5# 1.1.1.6

二、对所有单个ip进行汇总,计算是否在同一网段中,对同一网段中可汇总和ip地址通过计算子网掩码进行汇总表示

。。。

参考/3/howto/ipaddress.html#comparisons

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。