使用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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
Python中itertools模块用法详解
Sep 25 Python
python字典get()方法用法分析
Apr 17 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
python字符串string的内置方法实例详解
May 14 Python
关于python写入文件自动换行的问题
Jun 23 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
简单了解python反射机制的一些知识
Jul 13 Python
Python 如何对文件目录操作
Jul 10 Python
python 基于DDT实现数据驱动测试
Feb 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
星际原理概述
2020/03/04 星际争霸
个人站长制做网页常用的php代码
2007/03/03 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
python关闭windows进程的方法
2015/04/18 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
python模块内置属性概念及实例
2021/02/18 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
生产厂长岗位职责
2014/02/21 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
个性婚礼策划方案
2014/05/17 职场文书
文化产业实施方案
2014/06/07 职场文书
证婚人致辞精选
2015/07/28 职场文书
python编写函数注意事项总结
2021/03/29 Python