mysql - IPv6 SQL to Perl -
i have field in mysql table varbinary(16), stores binary ipv6 addresses.
while toying around code , testing stuff, filled 1 of records binary value for:
0fff0fff0fff0fff0fff0fff0fe00000
(this value see in phpmyadmin)
when call value query:
select inet6_ntoa(value) table
the return value
fff:fff:fff:fff:fff:fff:fe0::
in perl, when try put net::ip-object:
$ip = new net::ip('fff:fff:fff:fff:fff:fff:fe0::', 6);
it returns undefined.
my questions:
- who or wrong here?
- why?
- what can make perl understand ip address i'm giving it?
apparently mysql , net::ip
not agree on use of ::
represent trailing :0
.
as far understand rfc4191, fff:fff:fff:fff:fff:fff:fe0::
should valid ipv6 address (expanded 0fff:0fff:0fff:0fff:0fff:0fff:0fe0:0000
), net::ip
not seem agree.
net::ip
seems agree on using ::
trailing :0:0
, not :0
. ok ::
replacing single :0:
anywhere else. looks bug. can traced down ip_is_ipv6
thinks ipv6 address cannot have 8 :
s (which true in cases single leading or trailing 0 replaced ::
).
you bit of preprocessing replace trailing ::
:0
, leading ::
0:
if there 8 colons in ip.
edit
it turns out rfc5952 says single 0
(and hence trailing :0
) should not replaced ::
in output, mysql inet6_ntoa
@ fault, still says rfc4191-compliant addresses should accepted input, net::ip
should accept nonetheless. fixing bug on either side address issue.
Comments
Post a Comment