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

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

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

import socket
import 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 ipaddress
def 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地址通过计算子网掩码进行汇总表示

。。。

参考https://docs.python.org/3/howto/ipaddress.html#comparisons

转载于:https://www.cnblogs.com/dxnui119/p/11249305.html

ip地址范围汇总成ip网段相关推荐

  1. python 实现ip分配_Python实现根据IP地址和子网掩码算出网段的方法

    本文实例讲述了Python实现根据IP地址和子网掩码算出网段的方法.分享给大家供大家参考.具体如下: 该代码在Linux环境2.6.6python版本测试通过! #!/usr/bin/env pyth ...

  2. 修改用友服务器ip地址,用友服务器ip地址更换

    用友服务器ip地址更换 内容精选 换一换 若用户想要更换Ubuntu服务器的IP地址,则Mind Studio安装使用的IP地址也要随之更换,方法如下:如果env.conf文件中的IP配置为Ubunt ...

  3. linux 修改ip地址_Day.19 变更IP地址

    一.怎么登陆交换机及服务器?去做网络和服务器配置? 登陆交换机和服务器的跳板不是一个. 登陆交换机的跳板机也是一个Linux服务器 1.ssh 交换机的跳板机(Linux服务器) ssh xxxxx ...

  4. ip地址分类及预留ip地址大全

    现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0.地址格式为:IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址. IP地址类型 最初设计互联网络时,为了便 ...

  5. win7系统怎么查看服务器IP地址,win7系统的ip地址在哪 小编教你怎么查看

    很多刚开端运用windows7系统的朋友不晓得w7的ip地址在哪.w7的ip地址在哪?小编教你怎样查看w7的ip地址.今天小编就带来了两种十分简单查看w7的ip地址的办法供大家学习.w7的ip地址在哪 ...

  6. android解析ip地址,android – 如何从IP地址解析网络主机名

    我正在研究基于wifi的聊天引擎,我能够通过跟随this链接检索连接到当前wifi网络的主机列表,现在获得了具有ip地址的设备列表但我需要来自ip地址的主机名并尝试以下 InetAddress ine ...

  7. 计算机IP地址pin,打印机的ip地址在机身上哪里,打印机的pin在哪看

    打印机的ip地址在机身上哪里,打印机的pin在哪看 时间:2021-04-19 10:38:04 打印机是我们日常工作中必备的公办用品,但是对于刚接触打印机的电脑小白来说,打印机的网络设置可不简单,比 ...

  8. java判断内网ip_Java判断IP地址为内网IP还是公网IP的方法

    本文实例讲述了Java判断IP地址为内网IP还是公网IP的方法.分享给大家供大家参考.具体分析如下: tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8 ...

  9. php网站服务器ip地址吗,php 服务器ip地址吗

    php 服务器ip地址吗 内容精选 换一换 LAMP是由Linux.Apache.MySQL和PHP 建立的web应用平台.本文档指导用户使用华为云市场镜像"LNMP平台(CentOS7.4 ...

最新文章

  1. linux环境变量显示、添加、删除
  2. 22. loacte命令
  3. java 只显示文本文件_Java设计并实现一个应用程序,能够读取一个文本文件中的内容并显示,同时能够计算出文本中的行数。...
  4. Maven仓库添加自定义jar包
  5. 删除Linux下/tmp目录引起的不正常登录系统
  6. 40个script 常用代码
  7. 学术诚信的重要性_论文投稿触犯“忌讳”,选择“三缄其口”?学术道德底线不能丢...
  8. C语言创建学生姓名分数链表,C语言编程 编写程序,建立一个学生数据链表,学生的数据包括学号、姓名、成绩。...
  9. 【优化调度】基于matlab粒子群算法求解水火电系统经济、环境运行单目标调度优化问题【含Matlab源码 1138期】
  10. office visio 替代_5款替代微软Visio的开源免费软件(转)
  11. 数据分析的软件最全场景盘点
  12. 码栈——让一切变得自动化
  13. android cpu调度策略_最完整的Android CPU模式设置和功能
  14. 智能商场管理系统(可当做毕设)
  15. JDK1.6支持TSL1.2协议
  16. 深入第一个机器学习算法: K-近邻算法(K-Nearest Neighbors)
  17. Linux下常用软件安装指南
  18. matlab自动生成excel工作区,matlab数据怎么导出excel表格-matlab工作区数据怎么转为excel...
  19. ffmpeg之mp4文件解封装截取一段视频并重封装
  20. 【C++】不同模板对象之间赋值

热门文章

  1. 奥特曼传奇英雄存档丢了怎么找回_热血传奇复古传奇:传奇游戏手机版竟然比端游还火爆?你觉得呢?...
  2. itext生成pdf paragraph 自动换行_reportlab高级制作多格式PDF和python的class和装饰器复习
  3. 怎么安装python3.7.3_windows系统安装python3.6.3和python3.7.0
  4. 前景检测算法(三)--帧差法
  5. python力导向图论文_力导向图(关系图) echarts的运用
  6. 嵌入式系统——系统安全之常见病毒漏洞刷题整理
  7. php实现排序,PHP实现各种排序
  8. 【数据库原理实验(openGauss)】实验报告
  9. Linux下setsockopt函数返回-1,errno=22
  10. 【一起学爬虫】PyQuery详解