【问题标题】:How to calculate end IP in the range, based on start IP and network mask length in JAVA如何根据JAVA中的起始IP和网络掩码长度计算范围内的结束IP
【发布时间】:2014-07-26 04:11:21
【问题描述】:

我正在试验 MaxMind GeoIP (Geo lite 2) DB。

在来自 MaxMind 网站的 (GeoLite2-Country-CSV.zip) 的源文件 GeoLite2-Country-Blocks.csv 中,我有这一行:

::ffff:87.197.0.0,112,3057568,3057568,,,,,0,0

我有一个起始 IPv4 IP 地址 ::ffff:87.197.0.0 并且我的 IPv6 网络掩码长度为 112,如何计算 JAVA 范围内的最后一个 IP?

原因是我将 CSV 格式的 MaxMind Geo lite 2 数据库导入 PostgreSQL 数据库,因此我需要将起始 IP 地址导入一个 DB 列,并将最后一个 IP 地址导入另一个 DB 列。

谢谢。

伊万

【问题讨论】:

    标签: java postgresql maxmind


    【解决方案1】:

    如果您使用 Postgres,则应使用 cidr or inet type。使用这些类型,您可以以::ffff:87.197.0.0/112(或87.197.0.0/16 用于非IPv6 映射地址)的形式插入数据。使用网络类型,您可以在查询时利用 Pg 的network functions

    【讨论】:

    • 感谢您的回答,我在表格中使用了 cidr 类型。在 postgreSQL DB 中,在“blocks”表中(从 GeoLite2-City-Blocks.csv 导入数据)我有列:“network_start_ip”cidr NOT NULL,“network_mask_length”整数 NOT NULL。请问,你能告诉我,SQL select语句,如何查看我的IP地址,例如:87.197.148.121?
    • 您应该只有一列,而不是两列。数据应该以{network_start_ip}/{network_mask_length} 的形式插入,它代表一个特定的子网。一旦你这样做了,你就可以使用我上面链接的网络运营商了。
    猜你喜欢
    • 2014-07-19
    • 2013-08-14
    • 2010-12-01
    • 1970-01-01
    • 2012-10-06
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多