代码之家  ›  专栏  ›  技术社区  ›  Richard C

将IP地址创建为十六进制值

  •  2
  • Richard C  · 技术社区  · 8 年前

    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 回复  |  直到 6 年前
        1
  •  2
  •   Bharel    8 年前

    你把事情复杂化了。只需将IP地址作为int并将其转换为十六进制:

    # 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'
    
        2
  •  1
  •   gehbiszumeis Anja H    8 年前

    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 在函数定义中