使用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下载文件时显示下载进度的方法
Apr 02 Python
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
python 查找字符串是否存在实例详解
Jan 20 Python
django基础之数据库操作方法(详解)
May 24 Python
python3大文件解压和基本操作
Dec 15 Python
numpy返回array中元素的index方法
Jun 27 Python
详解python单元测试框架unittest
Jul 02 Python
Python PO设计模式的具体使用
Aug 16 Python
新手入门学习python Numpy基础操作
Mar 02 Python
keras 多gpu并行运行案例
Jun 10 Python
用Python进行websocket接口测试
Oct 16 Python
Django解决frame拒绝问题的方法
Dec 18 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
使用Python对Access读写操作
2017/03/30 Python
深入理解Python中的super()方法
2017/11/20 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
基于python的列表list和集合set操作
2019/11/24 Python
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
工商管理实习自我鉴定
2013/09/28 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
作风建设年度心得体会
2014/10/29 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
Pandas 稀疏数据结构的实现
2021/07/25 Python