使用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 Web开发模板引擎优缺点总结
May 06 Python
python ddt实现数据驱动
Mar 14 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
Flask框架Flask-Login用法分析
Jul 23 Python
Python配置文件处理的方法教程
Aug 29 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
Tensorflow限制CPU个数实例
Feb 06 Python
Django ModelForm操作及验证方式
Mar 30 Python
keras导入weights方式
Jun 12 Python
使用K.function()调试keras操作
Jun 17 Python
Python实现天气查询软件
Jun 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
PHP n个不重复的随机数生成代码
2009/06/23 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
JavaScript的类型简单说明
2010/09/03 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
Vue3为什么这么快
2020/09/23 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
毕业求职自荐信格式是什么
2013/11/19 职场文书
自考生自我评价分享
2014/01/18 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
社区活动总结
2015/02/04 职场文书
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript