使用Python脚本生成随机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)清除高位。

供各位读者参考。

(0)

相关推荐

  • python批量生成本地ip地址的方法

    本文实例讲述了python批量生成本地ip地址的方法.分享给大家供大家参考.具体分析如下: 这段代码用于在本地计算机上生成本地ip地址绑定到网卡,生成的是一个bat的批处理文件,运行此批处理文件,可以通过ipconfig查看 #!/usr/bin/python2.7 # -*- coding: utf-8 -*- # Filename: AddIPAliases.py import re,sys,socket,struct # 1. 判断IP地址是否合法: 2. 判断用户输入的IP是否在Clas

  • python基础教程之获取本机ip数据包示例

    这几天用到了raw socket,用python写了些demo程序,这里记录下. 首先我们看一个简单的sniffer程序: 复制代码 代码如下: #! /usr/bin/python# code for linuximport socket#s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.I

  • python利用标准库如何获取本地IP示例详解

    标准库 Python拥有一个强大的标准库.Python语言的核心只包含数字.字符串.列表.字典.文件等常见类型和函数,而由Python标准库提供了系统管理.网络通信.文本处理.数据库接口.图形系统.XML处理等额外的功能. Python标准库的主要功能有: 1.文本处理,包含文本格式化.正则表达式匹配.文本差异计算与合并.Unicode支持,二进制数据处理等功能 2.文件处理,包含文件操作.创建临时文件.文件压缩与归档.操作配置文件等功能 3.操作系统功能,包含线程与进程支持.IO复用.日期与时

  • Python访问纯真IP数据库脚本分享

    项目中有这样的需求,通过IP地址判断客户端是网通的还是电信的.从同事那拿了个纯文本的IP纯真数据库,用Python写了一个小程序,感觉挺好的.下面给出实现源码: #!/usr/bin/env python # -*- coding: utf-8 -*- from bisect import bisect _LIST1, _LIST2 = [], [] _INIT = False ip2int = lambda ip_str: reduce(lambda a, b: (a << 8) + b,

  • python获取本机mac地址和ip地址的方法

    本文实例讲述了python获取本机mac地址和ip地址的方法.分享给大家供大家参考.具体如下: import sys, socket def getipaddrs(hostname): result = socket.getaddrinfo(hostname,None,0,socket.SOCK_STREAM) return [x[4][0] for x in result] # the name of the local machine hostname = socket.gethostnam

  • Python实现一个转存纯真IP数据库的脚本分享

    前言 之前写过很多关于扫描脚本的文章,一直都没写自己的扫描IP段是哪里搞来的,也会有朋友经常来问一些扫描经验,说实话我觉得这个工具并没有实际的技术含量,但是能提高工作效率,就共享出来给大家耍耍- 谈到扫描经验,我个人通常都会针对不同的设备,不同的应用选择不同类型的段. 比如我现在扫描的目标是一款电信光猫,那自然是选择电信的IP段,光猫一般是家庭用户,我们筛选下家庭用户的活跃IP段,这样我们就有针对性了. 再比如我现在想扫一款企业路由设备,那么我就可以选择企业公司多的段. 纯真IP真心是个不错的工

  • python获取本机外网ip的方法

    本文实例讲述了python获取本机外网ip的方法.分享给大家供大家参考.具体如下: python从显示ip地址的网站获取本机外网ip,这段python代码抓取网站上的ip地址信息 import urllib import re print "we will try to open this url, in order to get IP Address" url = "http://checkip.dyndns.org" print url request = ur

  • python 获取本机ip地址的两个方法

    第一种: 复制代码 代码如下: import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]

  • python脚本实现统计日志文件中的ip访问次数代码分享

    适用的日志格式: 106.45.185.214 - - [06/Aug/2014:07:38:59 +0800] "GET / HTTP/1.0" 200 10 "-" "-" 171.104.119.22 - - [06/Aug/2014:08:55:01 +0800] "GET / HTTP/1.0" 200 10 "-" "-" 27.31.238.242 - - [06/Aug/

  • python简单获取本机计算机名和IP地址的方法

    本文实例讲述了python简单获取本机计算机名和IP地址的方法.分享给大家供大家参考.具体实现方法如下: 方法一: >>> import socket >>> hostname = socket.gethostname() >>> print hostname china-43226208c >>>ip = socket.gethostbyname(hostname) >>>print ip 192.168.3.19

随机推荐