Maxmind 有两个免费的 GeoLite2 cvs 文件,我们可以使用它们来查找与 IP 地址范围相关的位置。我想在 SQL Server 中创建一个存储过程,该过程使用导入的表([GeoLite2_City_Blocks] 和 [GeoLite2_City_Locations]),采用传入 IP 地址的 varchar(45) 字符串并返回与该 IP 地址关联的位置。我原以为网络上会存在相关的 T-SQL 代码,但我找不到。
我检查了Querying GeoLite2 Country CSV in SQL,但我根本不明白 Prefix_Length (在 Blocks 表中称为 Network_mask_Length )是做什么的。如果它们与 CIDR 前缀相同(请参阅:http ://en.wikipedia.org/wiki/IPv6_subnetting_reference ),我会更加困惑,因为 Network_mask_Length 可能是 118、119 或任何其他未显示的数字那个维基百科页面。
我在 SQL Server 中看到了一个谈论 IPv6 的网页,该网页建议用零填充进行比较。我想不能简单地查询免费的 GeoLite2,而无需在表中添加至少一列以获取范围的最终 IP 地址?
我想我可以从 IPv4 地址前面去掉“::ffff:”,如果这是正确的说法的话。但是我仍然不知道如何将 network_mask_length (前缀)字段翻译成我理解的内容。然后对 IPv6 地址进行零填充,但我仍然不知道那个前缀是关于什么的。
我的问题是:
- 是否有任何地方可用的示例代码可以让我走上正轨?或者,
- 我需要做什么来创建一个接受 IPv4 或 IPv6 地址并返回相关位置或 geoname_id 的 proc?