在Python中,你可以使用`socket`模块的`inet_aton`函数将IP地址转换为整数,然后使用`struct`模块的`unpack`函数将整数转换回IP地址。以下是一个示例代码:
import socket
import struct
def ip2long(ip):
将IP地址转换为二进制格式
packedIP = socket.inet_aton(ip)
使用struct.unpack将二进制数据转换为整数
return struct.unpack('!L', packedIP)
def long2ip(long):
将整数转换为二进制格式
packedIP = struct.pack('!L', long)
使用socket.inet_ntoa将二进制数据转换回IP地址
return socket.inet_ntoa(packedIP)
示例使用
ip_addr = '192.168.2.10'
long_ip = ip2long(ip_addr)
print(f"IP address as long: {long_ip}")
retrieved_ip = long2ip(long_ip)
print(f"Long integer as IP address: {retrieved_ip}")
这段代码定义了两个函数:`ip2long`用于将IP地址转换为整数,`long2ip`用于将整数转换回IP地址。在示例中,我们首先将字符串形式的IP地址`192.168.2.10`转换为整数,然后再将这个整数转换回字符串形式的IP地址。
请注意,`!L`是网络字节序的大端打包格式,其中`L`代表长整数(32位)。如果你在处理IPv6地址,你可能需要使用不同的格式字符串,例如`!`代表128位整数。