创建一个IP地址作为十六进制值

时间:2018-09-07 11:10:02

标签: python-3.x hex

我正在python(3x)中运行以下函数以生成随机IP地址

def get_ip_address(self):
            x = ".".join(map(str, (random.randint(0, 255)
                                   for _ in range(4))))
            return x

但是,我需要将生成的IP地址转换为十六进制值,我不需要做任何复杂的事情,并且很乐意在创建后转换x或在创建Ip地址功能中进行转换。我需要能够轻松查看我正在创建和转换的IP地址,因为这是测试套件的一部分,而另一端的十六进制IP地址又被转换回去。我还需要格式为0xb15150ca

2 个答案:

答案 0 :(得分:2)

您正在使事情复杂化。只需将IP地址作为一个整数并将其转换为十六进制即可:

# Generate a random 
>>> hex(random.randint(0,(1<<32)-1))
'0x85c90851'
>>> hex(random.randint(0,(1<<32)-1))
'0xfb4f592d'

如果您始终希望它精确地是8个十六进制数字,并在前面剥去0x,则也可以像这样直接格式化它:

>>> "{:0X}".format(random.randint(0,(1<<32)-1))
'4CC27A5E'

如果您想知道IP,请像这样使用ipaddress模块:

import ipaddress
>>> ip = random.randint(0,(1<<32)-1)
>>> ipaddress.ip_address(ip)
IPv4Address('238.53.246.162')
>>> "{:0X}".format(ip)
'EE35F6A2'

答案 1 :(得分:1)

您可以扩展功能,如下所示:

def get_ip_address():

    x = ".".join(map(str, (random.randint(0, 255)
                           for _ in range(4))))

    # Split you created decimal IP in single numbers
    ip_split_dec = str(x).split('.')

    # Convert to hex
    ip_split_hex = [int(t) for t in ip_split_dec]

    # Construct hex IP adress
    # ip_hex = '.'.join([hex(X)[2:] for X in ip_split_hex]) # Format hh.hh.hh.hh
    ip_hex = '0x' + ''.join([hex(X)[2:] for X in ip_split_hex]) # Format 0xhhhhhhhh

    return ip_hex

这会给你

>>> address = get_ip_address()
>>> 0xa535f08b

您还可以将其与十进制IP的结构结合起来以节省一些代码行

顺便说一句:只要您的函数不是类的方法,就不需要在函数定义中使用self