使用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模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
详解Python如何获取列表(List)的中位数
Aug 12 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
Python实现完整的事务操作示例
Jun 20 Python
Python上下文管理器和with块详解
Sep 09 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
解决pycharm界面不能显示中文的问题
May 23 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
python字符串替换第一个字符串的方法
Jun 26 Python
Python API自动化框架总结
Nov 12 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
没编程基础可以学python吗
Jun 17 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 define的第二个参数使用方法
2013/11/04 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
便利店促销方案
2014/02/20 职场文书
承诺书的格式范文
2014/03/28 职场文书
爱心捐款倡议书
2014/04/14 职场文书
纪检监察建议书
2014/05/19 职场文书
技术股东合作协议书
2014/12/02 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
办公用品管理制度
2015/08/04 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL