在SQL中查询GeoLite2国家/地区CSV

时间:2014-02-25 01:04:12

标签: geoip maxmind

有谁知道如何使用SQL从MaxMind的GeoLite2国家/地区CSV查找IP4地址?

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

我已经通过MaxMind开发人员文档和谷歌搜索,但似乎无法找到有关如何查询新格式的任何信息。我确定这很明显,如果我在过渡期间弄明白,我会编辑这个帖子。

谢谢我必须找到大于或等于IP4地址的第一个块条目,或者可能是LIMIT 1。

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

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

非常感谢

2 个答案:

答案 0 :(得分:2)

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

以下网址可能很方便查找特定Prefix_Length可用的IP地址数量:

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

__菲利普

答案 1 :(得分:1)

Prefix_Length计算器用法:

(在这种情况下,更多的是一个简单的 Table Lookup 工具而非计算器,真的......; - )

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

__菲利普