使用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的Django框架的运行方式及处理流程
Apr 08 Python
django实现前后台交互实例
Aug 07 Python
Python中偏函数用法示例
Jun 07 Python
Python中安装easy_install的方法
Nov 18 Python
python3.x实现base64加密和解密
Mar 28 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
keras slice layer 层实现方式
Jun 11 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
如何使用php实现评委评分器
2015/07/31 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
Python更新所有已安装包的操作
2020/02/13 Python
Python configparser模块应用过程解析
2020/08/14 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
运动会入场解说词
2014/02/07 职场文书
办公室主任职责范本
2014/03/07 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
2015年少先队活动总结
2015/03/25 职场文书
如何写辞职信
2015/05/13 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
详解OpenCV曝光融合
2022/04/29 Python