【问题标题】:Compare IP-adresses without dots with IPs with dots比较不带点的 IP 地址和带点的 IP
【发布时间】:2014-06-01 09:36:37
【问题描述】:

我有一个包含 IP 地址范围和该范围位置的数据库。此范围以不带点的 IP 形式给出,例如25946112 - 25946367 昆士兰澳大利亚。

现在我想将一些 IP 与该数据库进行比较并获取它们的位置。我拥有的 IP 采用点分十进制表示法。我的问题是:我可以通过删除点将这些地址与范围进行比较还是必须添加零?喜欢: 123.231.4.11to123231004011。但是,如您所见,数据库 IP 并非全部为 12 位数字。我还尝试测试上面的示例 (25946112),但找不到位置。

感谢您的帮助。 托马斯

【问题讨论】:

  • 我将重点关注与您的 IP 数据有关的问题:例如,您如何知道 259461122.59.46.112 还是 25.94.6.112
  • 你完全正确。我想有人可能知道如何处理这种符号。感谢您的提问。

标签: geolocation location ip compare ip-address


【解决方案1】:

在数据库中存储 IP 地址的一种方法是将它们存储为整数。我认为您的数据库就是这种情况。 您不应该只替换点并进行比较。相反,您应该将 IP 转换为整数,然后进行比较。各种 RDBM 提供了简化此操作的功能。比如mysql提供INET_ATON

【讨论】:

  • 太棒了!而已。非常感谢!
【解决方案2】:

去除点是不够的,因为一个 IP 翻译有多种可能性。

换句话说,根据您的示例,当您尝试从 在这种情况下,123.231.4.11123231004011 是可能的,但相反,如果没有零,25946112 可以是 2.59.46.112、25.9.46.112、25.94.6.112、25.94.61.12。 p>

因此,您需要应用一些逻辑,例如它们是否是有效 IP。 当然,如果任何八位字节超过 255,但如果它们不属于任何 IP 类 Subnetting IP address classes,则它们当然是无效的: 以下四个是有效 IP,因此您需要更多地理定位信息。

2.59.46.112
25.9.46.112
25.94.6.112
25.94.61.12

您能否告诉我们一些信息,例如,哪些八位位组拥有最多来自昆士兰的 IP?目标是继续过滤添加条件,直到您只有一种可能性,即您应该从数据库中的其他字段和表中获取的条件。

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 2017-10-19
    • 2012-08-26
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多