使用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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python程序设计入门(5)类的使用简介
Jun 16 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
PyQt5每天必学之事件与信号
Apr 20 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
详解Python文件修改的两种方式
Aug 22 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
Python基于smtplib模块发送邮件代码实例
May 29 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获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
Convert Seconds To Hours
2007/06/16 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
python中去空格函数的用法
2014/08/21 Python
python逆序打印各位数字的方法
2018/06/25 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
高级护理实习生自荐信
2013/09/28 职场文书
电大学习个人自我评价范文
2013/10/04 职场文书
教师实习自我鉴定
2013/12/13 职场文书
社区党员先进事迹
2014/01/22 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
员工教育培训协议书
2014/09/27 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
Python制作春联的示例代码
2022/01/22 Python