如何为 IPv6 使用 geoip 数据?

Posted

技术标签:

【中文标题】如何为 IPv6 使用 geoip 数据?【英文标题】:How to use geoip data for IPv6? 【发布时间】:2013-06-30 01:16:40 【问题描述】:

这是我使用的代码

$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$buffer= geoip_country_code_by_addr($gi, $ip); 
geoip_close($gi);
return $buffer;

对于 IPv4。

我应该如何修改代码以同时支持 IPv6 和 IP4?

【问题讨论】:

你试过不修改吗? 不可能,因为ip6的.dat文件名不同。 如果您正在寻找 IPv6,IP2Location 是另一种选择。 【参考方案1】:

为了使其正常工作,您需要从 MaxMind 下载 IPv6 数据库。您可以在以下位置找到:

http://dev.maxmind.com/geoip/legacy/geolite/

将 geoip_open 指向 IPv6 文件后,您应该能够查找 IPv6 地址。

例如:

$database = (strpos($ip, ":") === false) ? "GeoIP.dat" : "GeoLiteCityv6.dat";
$gi = geoip_open($database, GEOIP_STANDARD);

其余的和以前一样。

也就是说,您可能需要考虑重构,以免每次调用都打开和关闭数据库。

【讨论】:

是的,我想就是这样。但是 maxmind 有什么东西可以证实它确实是这样吗?你在哪里找到它?我想我从某个地方复制了整个代码。我忘记在哪里了。 数据库链接自 MaxMind 开发者网站。 重构怎么样?

以上是关于如何为 IPv6 使用 geoip 数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 maxmind geoip2 eclipse 添加依赖项

MaxMind GeoIP2 没有 IPv6 的结果?

如何为inet设置sequelize postgres模型类型?

如何在 OS X 中为 Django 正确设置 GEOIP_PATH?

如何更正 maxmind GeoIP 位置?

IP到地理位置的转换,如maxmind geoip