MySQL检查IP地址是否在范围内?

时间:2014-06-12 08:10:32

标签: mysql

我的表格包含两列ipStartipEnd

这两个字段包含一系列ip地址。例如:

`ipStart` = 193.235.18.0

ipEnd = 193.235.21.255

我希望能够选择ip在该范围内的行,例如:

193.235.19.255

这可能吗?

2 个答案:

答案 0 :(得分:19)

试试这个

SELECT *
FROM TABLE_NAME
WHERE (INET_ATON("193.235.19.255") BETWEEN INET_ATON(ipStart) AND INET_ATON(ipEnd));

答案 1 :(得分:5)

解释将ip地址转换为几个答案所依赖的数字(我同意)。

IP地址需要被视为一个32位数而不是4个8位数

例如ip地址

193.235.18.0

转换为二进制文件是: -

11000001.11101011.00010010.00000000

你转化为(即拿出点): -

11000001111010110001001000000000

解决这个问题: -

1 * 2147483648 = 2147483648 
1 * 1073741824 = 1073741824 
0 * 536870912 = 0
0 * 268435456 = 0
0 * 134217728 = 0
0 * 67108864 = 0
0 * 33554432 = 0
1 * 16777216 = 16777216 
1 * 8388608 = 8388608 
1 * 4194304 = 4194304 
1 * 2097152 = 2097152 
0 * 1048576 = 0
1 * 524288 = 524288 
0 * 262144 = 0
1 * 131072 = 131072 
1 * 65536 = 65536 
0 * 32768 = 0
0 * 16384 = 0
0 * 8192 = 0
1 * 4096 = 4096 
0 * 2048 = 0
0 * 1024 = 0
1 * 512 = 512 
0 * 256 = 0
0 * 128 = 0
0 * 64 = 0
0 * 32 = 0
0 * 16 = 0
0 * 8 = 0
0 * 4 = 0
0 * 2 = 0
0 * 1 = 0

将这些加在一起你得到3253408256

通过将原始IP地址视为基本256号码,您可以获得一些捷径。所以你有0个单位,18个256个,235个65536个(即256 * 256个)和193个(即256 * 256 * 256个)

0 * 1 + 18 * 256 + 235 * 256 * 256 + 193 * 256 * 256 * 256

提到的INET_ATON函数可以帮到你。