使用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时区设置方法与pytz查询时区教程
Nov 27 Python
python中self原理实例分析
Apr 30 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
python实现简单的文字识别
Nov 27 Python
python实现统计代码行数的小工具
Sep 19 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 Python
浅谈Python响应式类库RxPy
Jun 14 Python
Python学习之迭代器详解
Apr 01 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php连接数据库代码应用分析
2011/05/29 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
js身份证验证超强脚本
2008/10/26 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python实现在IDLE中输入多行的方法
2018/04/19 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
selenium如何定位span元素的实现
2021/01/13 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
学生安全责任书
2014/04/15 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书