求思路 如何判断一个IP是否在某网段内

whirlwind (别人笑,不去想,我就为你而倔强.除了你,都一样,不能放,害怕丢失唯一的信仰.你在我永远到不了的地方!) | 2013-11-05 00:10

我的思路是

1.AAA.BBB.CCC.DDD-aaa.bbb.ccc.ddd

拆分成数组,一个一个比较

1.IP==边界

2.比较AAA,如果不同 且在范围内 返回1

然后比较BBB 如果不同 且在范围内 返回1

如果BBB相同 比较CCC 如果不同 且在范围内 返回1

如果CCC相同 比较DDD 如果不同 且在范围内 返回1

否则返回0

这块是不是可以递归调用下??

有啥好的算法啊,我感觉这样判断也忒麻烦了吧。。PHP。。

比如CSDN上看到 有人直接去掉. 然后比大小。。不过位数问题哇。。

大牛勿喷。。小弟连芝诺的乌龟问题刚才都没想明白呢。。

[原文地址]

相关讨论:

1#

Hydra | 2013-11-05 02:20

ip可以做成int去判断

2#

核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2013-11-05 11:26

建议楼主了解下ip格式的基本知识。

a.b.c.d 8.8.8.8 192.168.1.1 192.168.1.255

这种叫“点分十进制”表示格式,主要是为了方便人类阅读与理解。

还有另外其他几种格式,例如十进制格式:

192.168.1.1 = 192*256*256*256 + 168*256*256 + 1*256 + 1 = 3232235777 (十六进制:C0A80101)
192.168.2.255 = 192*256*256*256 + 168*256*256 + 2*256 + 255 = 3232236287 (十六进制:C0A802FF)

那么要判断范围就相当简单了,例如:192.168.1.1 - 192.168.2.255

if ip_int > 3232235777 and ip_int < 3232236287 then
    echo "192.168.1.1 - 192.168.2.255"
end if

3#

whirlwind (别人笑,不去想,我就为你而倔强.除了你,都一样,不能放,害怕丢失唯一的信仰.你在我永远到不了的地方!) | 2013-11-05 20:02

@核攻击

真机智。。非常感谢哇,哈哈

留言评论(旧系统):

佚名 @ 2013-11-06 23:56:14

编程编傻了.... 有时候一个挺简单的问题,会导致思维混乱,结果就给弄复杂了.

本站回复:

真·程序猿也……