使用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求pi的方法
Oct 08 Python
Python实现的检测网站挂马程序
Nov 30 Python
Python中的模块和包概念介绍
Apr 13 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
python opencv 图像尺寸变换方法
Apr 02 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
python实现五子棋小游戏
Mar 25 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
Python实现把类当做字典来访问
Dec 16 Python
Django更新models数据库结构步骤
Apr 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php中常用编辑器推荐
2007/01/02 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
打架检讨书300字
2014/02/02 职场文书
法人委托书范本
2014/04/04 职场文书
文明社区申报材料
2014/08/21 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
大明湖导游词
2015/02/03 职场文书
初中运动会前导词
2015/07/20 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
JS Canvas接口和动画效果大全
2021/04/29 Javascript
Java8中Stream的一些神操作
2021/11/02 Java/Android
css弧边选项卡的项目实践
2023/05/07 HTML / CSS