使用Python脚本生成随机IP的简单方法


Posted in Python onJuly 30, 2015

需求

在某应用中,需要根据一定的规则生成随机的IP地址,规则类似于192.168.11.0/24这样的CIDR形式给出。
实现

经过艰苦卓绝的调试,下面的代码是可以用的:

RANDOM_IP_POOL=['192.168.10.222/0']
def __get_random_ip():
  str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]
  str_ip_addr = str_ip.split('/')[0]
  str_ip_mask = str_ip.split('/')[1]
  ip_addr = struct.unpack('>I',socket.inet_aton(str_ip_addr))[0]
  mask = 0x0
  for i in range(31, 31 - int(str_ip_mask), -1):
    mask = mask | ( 1 << i)
  ip_addr_min = ip_addr & (mask & 0xffffffff)
  ip_addr_max = ip_addr | (~mask & 0xffffffff)
  return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))

生成的结果如:

192.168.10.175  192.168.10.29  
 192.168.10.30  192.168.10.207 
 192.168.10.248  192.168.10.145 
 192.168.10.168  192.168.10.223 
 192.168.10.66  192.168.10.138 
 192.168.10.99  192.168.10.136 
 192.168.10.147  192.168.10.244 
 192.168.10.73  192.168.10.180

备注

(mask & 0xffffffff)这一用法,目的在于消除mask上32位以上的高位数据。由于mask是IPv4的掩码,所以不需要32位以上的数据。这一问题在mask取反之后比较明显。由于mask是一个32位以上的数(有可能是64位),取反之后,高位全部为1,计算的结果就不正确了。因此,在使用之前,需要利用(mask & 0xffffffff)清除高位。

供各位读者参考。

Python 相关文章推荐
Python机器学习之K-Means聚类实现详解
Feb 22 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
基于python3实现socket文件传输和校验
Jul 28 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 Python
Python unittest生成测试报告过程解析
Sep 08 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
Python实现批量读取word中表格信息的方法
Jul 30 #Python
python删除特定文件的方法
Jul 30 #Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 #Python
Python的迭代器和生成器
Jul 29 #Python
在Python程序中操作MySQL的基本方法
Jul 29 #Python
Python操作Word批量生成文章的方法
Jul 28 #Python
Python实现批量转换文件编码的方法
Jul 28 #Python
You might like
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php无限级分类实现方法分析
2016/10/19 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
用Python实现大文本文件切割的方法
2019/01/12 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
对Python中画图时候的线类型详解
2019/07/07 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Python实现弹球小游戏
2020/08/01 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
医学专业毕业生个人求职信
2013/12/25 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
党性教育心得体会
2014/09/03 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
银行业务授权委托书
2014/10/10 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
员工评语范文
2014/12/31 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书