使用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实现获取序列中最小的几个元素
Sep 25 Python
python私有属性和方法实例分析
Jan 15 Python
Python中有趣在__call__函数
Jun 21 Python
Python操作csv文件实例详解
Jul 31 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
python读取文本中的坐标方法
Oct 14 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
解决python对齐错误的方法
Jul 16 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
Python实现的最近最少使用算法
2015/07/10 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
python中return不返回值的问题解析
2020/07/22 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
班组长安全职责
2014/01/05 职场文书
工作失职自我检讨书
2015/05/05 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL