我正在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
答案 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