使用Python脚本生成随机IP的简单方法

 更新时间:2015年07月30日 12:07:52   作者:luqiuwen  
这篇文章主要介绍了使用Python脚本生成随机IP的简单方法,并且可以自己设定IP数值范围,需要的朋友可以参考下


需求

在某应用中,需要根据一定的规则生成随机的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)清除高位。

供各位读者参考。

相关文章

  • 分位数回归模型quantile regeression应用详解及示例教程

    分位数回归模型quantile regeression应用详解及示例教程

    这篇文章主要为大家介绍了介绍了分位数回归quantile regeression的概念详解及代码示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Python开发如何在ubuntu 15.10 上配置vim

    Python开发如何在ubuntu 15.10 上配置vim

    这篇文章主要介绍了Python开发如何在ubuntu 15.10 上配置vim 的相关资料,需要的朋友可以参考下
    2016-01-01
  • Python 实现数组相减示例

    Python 实现数组相减示例

    今天小编就为大家分享一篇Python 实现数组相减示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python缩进和冒号详解

    Python缩进和冒号详解

    下面小编就为大家带来一篇Python缩进和冒号详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Python算法应用实战之栈详解

    Python算法应用实战之栈详解

    栈是什么,你可以理解为一种先入后出的数据结构(First In Last Out),一种操作受限的线性表。下面这篇文章主要给大家介绍了Python中栈的应用实战,文中给出了多个实例,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • pandas.loc 选取指定列进行操作的实例

    pandas.loc 选取指定列进行操作的实例

    今天小编就为大家分享一篇pandas.loc 选取指定列进行操作的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 解决Keras 自定义层时遇到版本的问题

    解决Keras 自定义层时遇到版本的问题

    这篇文章主要介绍了解决Keras 自定义层时遇到版本的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python全栈之面向对象基础

    Python全栈之面向对象基础

    这篇文章主要为大家介绍了Python面向对象基础,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • Python获取秒级时间戳与毫秒级时间戳的示例代码

    Python获取秒级时间戳与毫秒级时间戳的示例代码

    这篇文章主要介绍了Python获取秒级时间戳与毫秒级时间戳的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Selenium(Python web测试工具)基本用法详解

    Selenium(Python web测试工具)基本用法详解

    这篇文章主要介绍了Selenium(Python web测试工具)基本用法,结合实例形式分析了Selenium的基本安装、简单使用方法及相关操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论