使用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 19 Python
python机器学习实战之K均值聚类
Dec 20 Python
python实现画圆功能
Jan 25 Python
Python实现端口检测的方法
Jul 24 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
Django ORM 查询管理器源码解析
Aug 05 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
python 爬取豆瓣网页的示例
Apr 13 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
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
python socket 超时设置 errno 10054
2014/07/01 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
C语言中break与continue的区别
2012/07/12 面试题
英语自我评价范文
2014/01/24 职场文书
班队活动设计方案
2014/01/30 职场文书
大班幼儿评语大全
2014/04/30 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
创先争优承诺书
2015/01/20 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
python开发的自动化运维工具ansible详解
2021/08/07 Python