You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:10:33