gpt4 book ai didi

mysql - IPv6 SQL 到 Perl

转载 作者:行者123 更新时间:2023-11-29 06:17:04 25 4
gpt4 key购买 nike

我在 mysql 表中有一个字段作为 varbinary(16),它存储二进制 IPv6 地址。

在摆弄我的代码和测试东西时,我用二进制值填充了它的一条记录:

0fff0fff0fff0fff0fff0fff0fe00000

(这是我在phpmyadmin中看到的值)

当我通过查询调用值时:

SELECT INET6_NTOA(value)
FROM table

我得到的返回值为

fff:fff:fff:fff:fff:fff:fe0::

在 perl 中,当我尝试将其放入 Net::IP 对象时:

$ip = new Net::IP('fff:fff:fff:fff:fff:fff:fe0::', 6);

它返回未定义。

我的问题:

  • 谁或哪里出了问题?
  • 为什么?
  • 我该怎么做才能让 perl 理解我提供给它的 IP 地址?

最佳答案

显然 MySQL 和 Net::IP 不同意使用 :: 来表示尾随 :0

据我了解RFC4191 , fff:fff:fff:fff:fff:fff:fe0:: 应该是完全有效的 IPv6 地址(扩展为 0fff:0fff:0fff:0fff:0fff:0fff:0fe0: 0000), 但 Net::IP 似乎不同意。

Net::IP 似乎同意将 :: 用于尾随 :0:0,但不仅仅用于 :0。用 :: 替换单个 :0: 也是可以的。看起来像一个错误。它可以追溯到 ip_is_ipv6,它认为 IPv6 地址不能有 8 个 :(这在所有情况下都是正确的,但单个前导或尾随 0 被 ::).

您可以做一些预处理,将尾随 :: 替换为 :0 并将前导 :: 替换为 0 :如果IP中有8个冒号。

编辑

事实证明RFC5952表示单个 0(因此尾随 :0)不应在输出中替换为 ::,因此 MySQL INET6_NTOA 有问题,但它仍然表示应接受符合 RFC4191 的地址作为输入,因此 Net::IP 仍应接受它。修复任何一方的错误都可以解决问题。

关于mysql - IPv6 SQL 到 Perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com