【问题标题】:How to convert IPV6 to 15 chars length integer?如何将 IPV6 转换为 15 个字符长度的整数?
【发布时间】:2019-07-24 10:04:11
【问题描述】:

我需要将 IPV6 地址转换为 15 个字符长度的整数,以便我可以使用 IP2LOCATION 数据库?

这是我从http://download.ip2location.com/lite/这里下载的数据库“IP2LOCATION-LITE-DB1.IPV6.CSV”

我尝试使用这个函数,但它给了我很长的字符串:

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"

【问题讨论】:

  • 粗略一看,这只是部分十进制表示。文档中还有更多示例代码:blog.ip2location.com/knowledge-base/…
  • 如果你继续往下看,会有相当多的数字大小范围(第 186000 行往下)。

标签: php laravel-5 ipv6


【解决方案1】:

我找到了这个功能:

function Dot2LongIP($ipv6) {
    return (string) gmp_import(inet_pton($ipv6));
}

在这个网址:https://lite.ip2location.com/faqs

在问题下:“如何将 IPv6 地址转换为 IP 号?”

但是你的 ipv6 地址fe80:0:0:0:202:b3ff:fe1e:8329 也返回一个长数字:338288524927261089654163772891438416681。请注意,此结果与您的结果不同。

关于结果的长度:如果你真的查看 CSV 文件,正如 Nigel Ren 在评论中所建议的那样,你会看到那里也有很长的数字。

所以,这个长数字是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多