使用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获取当前时间的方法
Jan 14 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
Python绘制频率分布直方图的示例
Jul 08 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
Python代码中如何读取键盘录入的值
May 27 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
Python爬虫制作翻译程序的示例代码
Feb 22 Python
Python函数中的不定长参数相关知识总结
Jun 24 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
进行数据处理的6个 Python 代码块分享
Apr 06 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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
一个oracle+PHP的查询的例子
2006/10/09 PHP
十天学会php之第五天
2006/10/09 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
用jquery写的一个万年历(自写)
2014/01/20 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
vue观察模式浅析
2018/09/25 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
将python图片转为二进制文本的实例
2019/01/24 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
大学生专科毕业生自我评价
2013/11/17 职场文书
单位单身证明范本
2014/01/11 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
安全承诺书范文
2014/03/26 职场文书
考研复习计划
2015/01/19 职场文书
雷峰塔导游词
2015/02/09 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书