如何将 IPV6 转换为 15 个字符长度的整数?
How to convert IPV6 to 15 chars length integer?
我需要将 IPV6 地址转换为 15 个字符长度的整数,以便我可以使用 IP2LOCATION 数据库?
这是我从这里下载的数据库 "IP2LOCATION-LITE-DB1.IPV6.CSV" http://download.ip2location.com/lite/
我尝试使用这个函数,但它给了我很长的字符串:
function ipv6_numeric($ip) {
$binNum = '';
foreach (unpack('C*', inet_pton($ip)) as $byte) {
$binNum .= str_pad(decbin($byte), 8, "0", STR_PAD_LEFT);
}
return base_convert(ltrim($binNum, '0'), 2, 10);
}
ipv6_numeric('fe80:0:0:0:202:b3ff:fe1e:8329')
return "338288524927261046600406220626806860202"
我找到了这个函数:
function Dot2LongIP($ipv6) {
return (string) gmp_import(inet_pton($ipv6));
}
此时 URL:https://lite.ip2location.com/faqs
下问题:"How do I convert an IPv6 Address to an IP Number?"
但是你的 ipv6 地址 fe80:0:0:0:202:b3ff:fe1e:8329
也是 returns 一个很长的数字:338288524927261089654163772891438416681
。请注意,此结果与您的结果不同。
关于结果的长度:如果你真的查看 CSV 文件,正如 Nigel Ren 在评论中所建议的那样,你会看到那里也有很长的数字。
所以,这个长数字是正确的。
我需要将 IPV6 地址转换为 15 个字符长度的整数,以便我可以使用 IP2LOCATION 数据库?
这是我从这里下载的数据库 "IP2LOCATION-LITE-DB1.IPV6.CSV" http://download.ip2location.com/lite/
我尝试使用这个函数,但它给了我很长的字符串:
function ipv6_numeric($ip) {
$binNum = '';
foreach (unpack('C*', inet_pton($ip)) as $byte) {
$binNum .= str_pad(decbin($byte), 8, "0", STR_PAD_LEFT);
}
return base_convert(ltrim($binNum, '0'), 2, 10);
}
ipv6_numeric('fe80:0:0:0:202:b3ff:fe1e:8329')
return "338288524927261046600406220626806860202"
我找到了这个函数:
function Dot2LongIP($ipv6) {
return (string) gmp_import(inet_pton($ipv6));
}
此时 URL:https://lite.ip2location.com/faqs
下问题:"How do I convert an IPv6 Address to an IP Number?"
但是你的 ipv6 地址 fe80:0:0:0:202:b3ff:fe1e:8329
也是 returns 一个很长的数字:338288524927261089654163772891438416681
。请注意,此结果与您的结果不同。
关于结果的长度:如果你真的查看 CSV 文件,正如 Nigel Ren 在评论中所建议的那样,你会看到那里也有很长的数字。
所以,这个长数字是正确的。