4

有谁知道如何使用 SQL 从 MaxMind 的 GeoLite2 Country CSV 中查找 IP4 地址?

我多年来一直在使用 MaxMind 的免费 G​​eoIP 数据,并想升级到他们的 GeoLite2 数据。我将块和位置数据加载到 MySQL 表中,但不确定如何确定 IP4 地址所属的地址范围。旧格式的每个块都有一个开始/结束编号;新格式似乎只有一个起始编号。

我已经搜索了 MaxMind 开发人员文档和 Google 搜索,但似乎找不到任何有关如何查询新格式的信息。我确信这很明显,如果我在此期间弄明白,我会编辑这篇文章。

谢谢我必须找到大于或等于 IP4 地址和 LIMIT 1 的第一个块条目。

我将这些数据用于 Web 应用程序外观,以及直接在 SQL 中查询以生成报告;所以我通常需要确保我可以在 Perl 代码和纯 SQL 中实现查找。

我正在升级,因为我在旧数据上看到了一些似乎来自法国的日本游客的有趣结果。

非常感谢

4

2 回答 2

3

Geolite2 CSV中使用的地址格式包括一个块IP地址开始,后跟一个前缀长度#,可以转换成块IP地址结束。

(有点令人困惑的是,Maxmind 使用“Network_Mask_Length”而不是“Prefix_Length”,即公认的 IPv6 术语来标记此字段。)

Geolite2 CSV 的块字段布局:

network_start_ip,network_mask_length,geoname_id,registered_country_geoname_id,re
presented_country_geoname_id,postal_code,latitude,longitude,is_anonymous_proxy,i
s_satellite_provider

示例:(从 Geolite2-Country-Blocks.csv 中提取的记录)

::ffff:81.248.136.0,120,3578476,3017382,,,,,0,0

鉴于上述示例,分配给该块的最后一个 IPv4 地址是什么?

First IP address: 81.248.136.0
Prefix_Length/Network_mask_Length: 120
Last IP address: 81.248.136.255

以下 URL 可能有助于快速查找特定 Prefix_Length 可用的 IP 地址数量:

http://www.gestioip.net/cgi-bin/subnet_calculator.cgi

__philippe

于 2014-02-25T15:04:59.753 回答
1

Prefix_Length 计算器用法:

(在这种情况下,更多的是一个简单的表格查找工具而不是计算器,真的......;-)

http://www.gestioip.net/cgi-bin/subnet_calculator.cgi

在计算器中,勾选 IPv6 按钮,然后单击 PL 框向下箭头。将显示“前缀长度”列表,以及相应的可用 IP 地址数量。

要确定任何 Geolite2 块的最后一个 IP 地址,以下 Prefix_Length/地址对的相关范围很可能就足够了:

Prefix  #addresses
Length

117 2048
118 1024
119 512
120 256
121 128
122 64
123 32
124 16
125 8
126 4
127 2
128 1

请注意,Geolite2 文件结构遵循一种混合 IPv4/IPv6 表示法的形式,即“IPv4 映射 IPv6 地址”。

这些“混合”地址以标准 IPv6 格式的前 96 位写入,其余 32 位以 IPv4 的习惯点十进制表示法写入。例如 ::ffff:192.0.2.128 代表 IPv4 地址 192.0.2.128

有关这个非常(毛茸茸的)主题的更多信息,请点击此处:

http://en.wikipedia.org/wiki/IPv6

__philippe

于 2014-02-27T08:43:59.133 回答