PHP转Python:寻求MySQL函数INET6_ATON的Python替代方案
MySQL INET6_ATON 的 Python 替代实现
MySQL 的 INET6_ATON 函数用于将 IPv6(或兼容格式的 IPv4)字符串转换为 16 字节的二进制数据,以下是完全对齐其行为的 Python 实现:
核心实现代码
import socket def inet6_aton(ip_address): try: # 优先解析 IPv6 地址 return socket.inet_pton(socket.AF_INET6, ip_address) except socket.error: # 若为 IPv4 地址,转换为 IPv4 映射的 IPv6 格式再处理 ipv4_bytes = socket.inet_pton(socket.AF_INET, ip_address) # 拼接 IPv4 映射 IPv6 的固定前缀 + IPv4 字节数据 return b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff' + ipv4_bytes
行为说明
- 对于标准 IPv6 地址(如
2001:db8::1),直接返回 16 字节二进制数据,与INET6_ATON输出完全一致 - 对于 IPv4 地址(如
192.168.1.1),会自动转换为 IPv4 映射的 IPv6 格式二进制数据,这和 MySQL 处理 IPv4 的逻辑完全对齐(MySQL 存储 IPv4 时会用该格式填充为 16 字节)
测试示例
# 测试 IPv6 print(inet6_aton('2001:db8::1')) # 输出:b' \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' # 测试 IPv4 print(inet6_aton('192.168.1.1')) # 输出:b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xc0\xa8\x01\x01'
内容的提问来源于stack exchange,提问作者HGStyle
相关产品推荐
相关产品推荐

