1

我正在尝试将 GeoLite2 ip 导入国家 csv 文件到我的 MySQL 数据库。我成功地做到了,但是,要使用它在我的查询中搜索 IP,我需要在 ipv4 和 ipv6 表中再创建两个字段,以存储给定的每个 CIDR 范围的 start_ip 和 end_ip 值(GeoLite csv 文件仅指定 CIDR 格式的范围)。

我能够使用此处给出的解决方案将其正确转换为 ipv4 地址范围 Importing MaxMind's GeoLite2 to MySQL

所以我用

INET_ATON(SUBSTRING(network, 1, LOCATE('/', network) - 1))

对于 start_ip 和

INET_ATON(SUBSTRING(network, 1, LOCATE('/', network) - 1)) + (POW(2, (32-CONVERT(SUBSTRING(network, LOCATE('/', network) + 1), UNSIGNED INT)))-1)

对于 end_ip。network 是存储 CIDR 范围的字段的名称。

但是,这不适用于 CIDR 格式的 IPv6 地址范围。我尝试使用 INET6_ATON 而不是 INET_ATON 但它给了我一个数值超出范围的错误。我对 IPv6 地址了解不多,所以自己找到一个公式并不容易。

任何帮助表示赞赏。

4

2 回答 2

1

您可以使用我的工具从 GitHub https://github.com/mbto/maxmind-geoip2-csv2sql-converter将 MaxMind GeoLite2 国家/城市 CSV 转换为 MySQL/PostgreSQL/Microsoft SQL Server 2019

您可以阅读示例,或按照以下步骤操作:

  1. 在https://support.maxmind.com/account-faq/license-keys/how-do-i-generate-a-license-key/获取 MaxMind API 的免费许可证密钥(如果您没有)
  2. 在采用openjdk.netgithub.com/raphw/raphw.github.iooracle.com/java安装 Java 11(如果未安装)
  3. 发行版(.zip 或 .tar)下载工具
  4. 解压到你的目录
  5. 使用您的配置文件名称复制/粘贴 .ini 模板bin/GeoLite2-Country-CSV.mysql.default.ini、示例bin/GeoLite2-Country-CSV.mysql.Your Project Name.ini或使用默认值。
  6. 使用记事本打开 .ini 模板并更改[windows_loader][unix_loader]部分(设置 MySQL 主机:端口、用户和密码)。
  7. 对于 unix:执行chmod +x maxmind-geoip2-csv2sql-converter
  8. 运行转换:maxmind-geoip2-csv2sql-converter.bat -c "GeoLite2-Country-CSV.mysql.Your Project Name.ini" -k Your_License_Key -i 4,6
  9. bin/converted/loader.bat转换后,脚本bin/converted/loader.sh将可用。
  10. 对于 unix:执行chmod +x loader.sh
  11. 执行loader.batloader.sh用于导入模式。

完毕

图式

于 2021-09-01T11:44:12.953 回答
1

使用类型为 VARBINARY(16) 的列来存储值。您可以将 INET6_ATON 用于 IPv4 和 IPv6 地址。

参考:https ://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton

于 2021-04-03T18:51:29.700 回答