2013-07-06 31 views
1

Maxmind提供免费的ipv6可下载的csv。他们提供ip范围块,但有谁知道我可以如何可以某人ipv6 ip并在他们提供的块内进行检查?Maxmind ipv6 - 如何获取IPV6 IP并将其转换为它们提供的块?

这里是一个csv条目的例子。我相信头如下:

起始IP,结束IP,起始IP块,结束IP块,...

“2001:200 ::”,“2001:200:FFFF:FFFF: FFFF:FFFF:FFFF:FFFF”, “42540528726795050063891204319802818560”, “42540528806023212578155541913346768895”, “JP”, “日本”

+0

我不遵循你的问题:什么是“在他们提供的块内进行检查”。你只是想知道IP地址是否属于其中一个块?如果是这样,那么你有起始IP地址和结束IP地址,因此测试某个IP地址是否在这些边界之间是微不足道的! – Celada

+0

对于maxmind ipv4 db,我可以使用将ip转换为数字格式的mysql inet_aton。然后,我可以使用此值来查看它是否落在特定范围内。我想知道ipv6的等价物...... – user984314

+0

如果你在谈论MySQL,那么就没有等价物,因为MySQL没有足够大的整数来适应IPv6地址(它的最大整数类型是64位) 。所以你必须推出自己的。您可以将IPv6地址存储为文本或两个64位整数(低部分和高部分)。 – Celada

回答

0

既然你使用MySQL,你可能要导入的IPv6地址为二进制(16)列。它应该为比较做正确的事情,MySQL 5.6提供了INET6_ATON函数,可以将字符串符号转换为二进制。

+0

我已经看到了inet_aton6,但它带回了一个字母数字结果。那么我怎么可以用它来比较呢?我知道inet_aton适用于ipv4,因为它返回一个整数。只是困惑我怎么能比较字母数字结果? – user984314

+0

INET6_ATON返回一个可以转换为十六进制的二进制字符串,我认为这就是你所指的。你应该能够对二进制字符串进行比较。 –

+0

如何在PHP和MongoDB中执行此操作? –