【问题标题】:Maxmind ipv6 - How to take an IPV6 IP and convert it into a block they provide?Maxmind ipv6 - 如何获取 IPV6 IP 并将其转换为他们提供的块?
【发布时间】:2013-07-06 06:53:43
【问题描述】:

Maxmind 提供免费的 ipv6 可下载 csv。他们提供 ip range 块,但有谁知道我如何才能让某人 ipv6 ip 并在他们提供的块内进行检查?

这是一个 csv 条目的示例。我相信标题如下:

开始IP,结束IP,开始IP块,结束IP块,...

“2001:200::”、“2001:200:ffff:ffff:ffff:ffff:ffff:ffff”、“42540528726795050063891204319802818560”、“425405288060232125781257815541913346768895”、“日本”

【问题讨论】:

  • 我不理解您的问题:什么是“在他们提供的块内进行检查”。您是否只想知道 IP 地址是否属于其中一个块?如果是这样,那么您有起始 IP 地址和结束 IP 地址,因此测试某个 IP 地址是否在这些界限之间很简单!
  • 对于 maxmind ipv4 db,我可以使用 mysql inet_aton 将 ip 转换为数字格式。然后我可以使用这个值来查看它是否在特定范围内。我想知道 ipv6 的等价物...
  • 如果你在谈论 MySQL,那么没有等价物,因为 MySQL 没有足够大的整数类型来容纳 IPv6 地址(它的最大整数类型是 64 位)。所以你必须自己动手。您可以将 IPv6 地址存储为文本或两个 64 位整数(低位和高位)。
  • 由于 LIR 分配的 IPv6 永远不应小于 /64,因此您应该可以使用 64 位整数。

标签: database ipv6 maxmind


【解决方案1】:

由于您使用的是 MySQL,您可能希望将 IPv6 地址导入 binary(16) 列。它应该为比较做正确的事情,并且 MySQL 5.6 提供了一个 INET6_ATON 函数将字符串表示法转换为二进制。

【讨论】:

  • 我见过inet_aton6,但它带回了一个字母数字结果。那么我怎么能用它来进行比较呢?我了解 inet_aton 非常适合 ipv4,因为它返回一个整数。只是困惑我如何比较字母数字结果?
  • INET6_ATON 返回一个可以转换为十六进制的二进制字符串,我认为这就是您所指的。您应该能够对二进制字符串进行比较。
  • 如何在 PHP 和 MongoDB 中做到这一点?
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2023-02-23
  • 2016-11-13
  • 1970-01-01
  • 2015-09-22
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多