如何从IP地址中删除主机?

时间:2016-10-17 02:58:50

标签: python ip openstack

目前,我创建了一种生成随机ip(IPv4)地址的方法,如下所示:

def rand_ip(mask=False):
    """This uses the TEST-NET-3 range of reserved IP addresses.
    """
    test_net_3 = '203.0.113.'
    address = test_net_3 + six.text_type(random.randint(0, 255))
    if mask:
        address = '/'.join((address,
                            six.text_type(random.randrange(24, 32))))
    return address

现在,我需要通过删除主机地址的能力来增强该方法 我启用了掩码,案例在

之下
1.1.2.23/24(before) => 1.1.2.0/24(after host address removed) 
1.1.2.23/16 => 1.1.0.0 (the same as above)

实际上,更改只是将左侧部分(32-mask,从右到左)替换为0 在十六进制中,有没有简单的方法或现有的libs可以做到这一点(应考虑python 2.7x和3.x的兼容性)?

1 个答案:

答案 0 :(得分:1)

这是你要找的东西吗?

>>> from netaddr import *
>>> ip = IPNetwork('1.1.2.23/16')
>>> ip.ip
IPAddress('1.1.2.23')
>>> ip.network
(IPAddress('1.1.0.0')
>>> ip.netmask
(IPAddress('255.255.0.0')

要随机生成IP和网络掩码,您可以使用此代码。这可以做得更好。

import random
def get_random_ip():
    def ip():
        return random.randint(0, 255)

    value = str(ip())
    for i in range(3):
        value = value + "." + str(ip())

    return value

def get_random_cidr():
    return random.randrange(24, 32)