有人知道如何使用SQL从MaxMind的GeoLite2 Country CSV中查找IP4地址吗?
我已经使用MaxMind的免费GeoIP数据很多年了,我想升级到他们的GeoLite2数据。我已经将块和位置数据加载到MySQL表中,但不确定如何确定IP4地址的地址范围。旧格式中每个块都有一个起始/结束编号;新格式似乎只有一个起始数字。
我已经搜索了MaxMind开发人员的文档,并在谷歌上搜索了一下,但似乎找不到任何关于如何查询新格式的信息。我相信这是显而易见的,如果我在这期间弄清楚的话,我会编辑这篇文章。
我认为谢谢,我必须找到第一个大于或等于IP4地址的块条目,也许是LIMIT 1。
我使用这些数据既用于web应用程序外观,也用于直接在SQL中查询以生成报告;所以我通常需要确保我可以在Perl代码和纯SQL中实现查找。
我之所以升级,是因为我看到了一些有趣的结果,在旧数据上,似乎来自法国的日本游客。
非常感谢
Geolite2 CSV中使用的地址格式包括一个块IP地址开头,后面跟着一个前缀长度#,可以转换为块IP地址结尾。
(有点令人困惑的是,Maxmind使用"Network_Mask_Length"而不是公认的IPv6术语"Prefix_Length)来标记该字段。)
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
__飞利浦
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-mapped-IPv6地址"。
这些"混合"地址以标准IPv6格式的前96位写入,其余32位以IPv4的常用小数点表示法写入。例如,:ffff:192.0.2.128表示IPv4地址192.0.2.1128
有关这个非常(毛茸茸的)主题的更多信息,请查看此处:
http://en.wikipedia.org/wiki/IPv6
__飞利浦