使用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实现面向对像的ASP程序实例
Nov 10 Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 Python
Python人脸识别初探
Dec 21 Python
Python自定义线程池实现方法分析
Feb 07 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python基于pandas绘制散点图矩阵代码实例
Jun 04 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 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
php 正则表达式小结
2009/08/31 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
python中的编码知识整理汇总
2016/01/26 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python 杀死自身进程的实现方法
2019/07/01 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
opencv python如何实现图像二值化
2020/02/03 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
Python实现画图软件功能方法详解
2020/07/28 Python
店长岗位职责
2013/11/21 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
关于学习的演讲稿
2014/05/10 职场文书
关于保护环境的建议书
2014/05/13 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
python urllib库的使用详解
2021/04/13 Python
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏