Python:将包对象/ inet对象转换为32位整数

时间:2017-06-06 18:52:40

标签: python sockets

我有IPv4地址,想要将其转换为32位整数。 我能够使用socket.inet_ntop将IPv4地址转换为字符串,然后将该字符串转换为32位整数
但有直接的方法吗?

1 个答案:

答案 0 :(得分:2)

基本格式的IPv4地址是网络字节顺序的32位整数。 我假设你将它作为一个字节序列(因为这是你通常将其移交给inet_ntop)。

将它转换为python整数所需的是struct模块及其unpack方法以及“!I”格式规范(表示网络字节顺序,无符号32位)整数)。看到这段代码:

from socket import inet_ntop, inet_pton, AF_INET
from struct import unpack

ip = inet_pton(AF_INET, "192.168.1.42")
ip_as_integer = unpack("!I", ip)[0]
print("As string[{}] => As bytes[{}] => As integer[{}]".format(
      inet_ntop(AF_INET, ip), ip, ip_as_integer))

您当然也可以按字节顺序重建整数:

ip_as_integer = (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3]