使用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实现的Google IP 可用性检测脚本
Apr 23 Python
Python爬取京东的商品分类与链接
Aug 26 Python
Python中单例模式总结
Feb 20 Python
对python中的pop函数和append函数详解
May 04 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
详解django自定义中间件处理
Nov 21 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
python 装饰器的使用示例
Oct 10 Python
python 实现Harris角点检测算法
Dec 11 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
Python基础之条件语句详解
Jun 16 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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+DBM的同学录程序(3)
2006/10/09 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
php array的学习笔记
2012/05/16 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
javascript中普通函数的使用介绍
2013/12/19 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Python基础篇之初识Python必看攻略
2016/06/23 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
opencv+python实现均值滤波
2020/02/19 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
美国家居装饰店:Pier 1
2019/09/04 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
网吧消防安全制度
2014/01/28 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
技术负责人岗位职责
2015/02/10 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
师德承诺书2015
2015/04/28 职场文书
介绍信怎么写
2015/05/05 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技