比较没有点的IP地址和带点的IP

时间:2014-04-17 07:57:13

标签: geolocation location ip compare ip-address

我有一个包含一系列IP地址和此范围位置的数据库。该范围以IP形式给出,没有点,例如QUEENSLAND AU的25946112 - 25946367

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

感谢您的帮助。 托马斯

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

点删除功能不够,因为有一种IP转换的可能性。

换句话说,根据你的例子,当你试图传递时 对于该情况,123.231.4.11123231004011是可能的,但是相反,没有零, 25946112 可以是2.59.46.112,25.9.46.112,25.94.6.112,25.94。 61.12。

因此,您需要应用一些逻辑,例如它们是否是有效的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?目标是继续过滤添加条件,直到您只有一种可能性,即从数据库中的其他字段和表中获取的条件。