有三个字段
[startIP] [endIP] [Addr]
58.58.200.1 58.58.205.255 地球中国某省某市
而我要查询的IP是:58.58.203.168
应该界于这[startIP] 和 [endIP] 之间 所以地址也是 地球中国某省某市
但是这是IP 可不是什么整数,怎么匹配?
用什么方法?
18 个解决方案
#1
#2
http://topic.csdn.net/u/20080703/14/b43b4edb-ab9f-4d60-a676-04cd76acce59.html
#3
这个就直接用大于小于来判断就好了
就用
if ip>=rs("startip") and ip<=rs("endip") then
response.write rs("addr")
end if
就好了
就是一个字符串的比较.
就用
if ip>=rs("startip") and ip<=rs("endip") then
response.write rs("addr")
end if
就好了
就是一个字符串的比较.
#4
你把库里的IP 全部转成 (IP段1*256*256*256 + IP段1*256*256 + IP段1*256 + IP段4) 的数值
查询的时候也这样计算后就可以比较了.
查询的时候也这样计算后就可以比较了.
#5
[img=http://blog.ii-home.cn/diy/sign.asp][/img]
[img=http://blog.ii-home.cn/diy/ip.asp][/img]
[img=http://blog.ii-home.cn/diy/ip.asp][/img]
#6
是不是 IP段1*256*256*256 + IP段2*256*256 + IP段3*256 + IP段4) 的数值 ???
#7
建议采用掩码的形式来匹配,.
[align=center] = = = = 思 想 重 于 技 巧 = = = =
[/align]
.
贴子分数<20:对自已的问题不予重视。
贴子大量未结:对别人的回答不予尊重。
.
#8
这样呀。。哦。。哦。。。
#9
就比如说
58.58.200.1
58.58.205.255
就转成
(58*255*255*255 + 58*255*255 + 200*255 + 1) = 965542201
(58*255*255*255 + 58*255*255 + 205*255 + 255) = 965543730
改造一下数据库,这样存储
[startIP] [endIP] [Addr]
965542201 965543730 地球中国某省某市
965543731 ..... 地球xx国xx省xx市
查询时把 "58.58.203.168" 计算一下,得到 965543133
select addr from yourTABLE where startIP<=965543133 AND endIP>=965543133
#10
才发现,原来上面第一次回复时,写错了....囧
#11
转成数值比较。
#12
纯真数据库,动网都是这样的~~呵呵~那天研究动网的ip查询发现的
#13
我用的是
int(ipstr(0))*256*256*256+int(ipstr(1))*256*256+int(ipstr(2))*256+int(ipstr(3))-1
int(ipstr(0))*256*256*256+int(ipstr(1))*256*256+int(ipstr(2))*256+int(ipstr(3))-1
#14
.
这个真的行吗?两个字符串的比较
#15
字符串比较应该不行吧,因为长度不一样
比如 "9.9.9.9" 比较后就会比 "10.10.10.10" 大, 这显然不正确
如果长度一样 像 "009.009.009.009", "010.010.010.010" 就可以用字符串直接比较
字符串比较 效率会下降很多
还是建议用数字
比如 "9.9.9.9" 比较后就会比 "10.10.10.10" 大, 这显然不正确
如果长度一样 像 "009.009.009.009", "010.010.010.010" 就可以用字符串直接比较
字符串比较 效率会下降很多
还是建议用数字
#16
应该是*256 而不是*255
把它当做(256)进制。
IP这东西,非常有规律:比如 202.203.237.1
它是一个四位数,每位数字不超过255,
把它当做(256)进制。
IP这东西,非常有规律:比如 202.203.237.1
它是一个四位数,每位数字不超过255,
#17
恩,256
#18
对.256
#1
#2
http://topic.csdn.net/u/20080703/14/b43b4edb-ab9f-4d60-a676-04cd76acce59.html
#3
这个就直接用大于小于来判断就好了
就用
if ip>=rs("startip") and ip<=rs("endip") then
response.write rs("addr")
end if
就好了
就是一个字符串的比较.
就用
if ip>=rs("startip") and ip<=rs("endip") then
response.write rs("addr")
end if
就好了
就是一个字符串的比较.
#4
你把库里的IP 全部转成 (IP段1*256*256*256 + IP段1*256*256 + IP段1*256 + IP段4) 的数值
查询的时候也这样计算后就可以比较了.
查询的时候也这样计算后就可以比较了.
#5
[img=http://blog.ii-home.cn/diy/sign.asp][/img]
[img=http://blog.ii-home.cn/diy/ip.asp][/img]
[img=http://blog.ii-home.cn/diy/ip.asp][/img]
#6
是不是 IP段1*256*256*256 + IP段2*256*256 + IP段3*256 + IP段4) 的数值 ???
#7
建议采用掩码的形式来匹配,.
[align=center] = = = = 思 想 重 于 技 巧 = = = =
[/align]
.
贴子分数<20:对自已的问题不予重视。
贴子大量未结:对别人的回答不予尊重。
.
#8
这样呀。。哦。。哦。。。
#9
就比如说
58.58.200.1
58.58.205.255
就转成
(58*255*255*255 + 58*255*255 + 200*255 + 1) = 965542201
(58*255*255*255 + 58*255*255 + 205*255 + 255) = 965543730
改造一下数据库,这样存储
[startIP] [endIP] [Addr]
965542201 965543730 地球中国某省某市
965543731 ..... 地球xx国xx省xx市
查询时把 "58.58.203.168" 计算一下,得到 965543133
select addr from yourTABLE where startIP<=965543133 AND endIP>=965543133
#10
才发现,原来上面第一次回复时,写错了....囧
#11
转成数值比较。
#12
纯真数据库,动网都是这样的~~呵呵~那天研究动网的ip查询发现的
#13
我用的是
int(ipstr(0))*256*256*256+int(ipstr(1))*256*256+int(ipstr(2))*256+int(ipstr(3))-1
int(ipstr(0))*256*256*256+int(ipstr(1))*256*256+int(ipstr(2))*256+int(ipstr(3))-1
#14
.
这个真的行吗?两个字符串的比较
#15
字符串比较应该不行吧,因为长度不一样
比如 "9.9.9.9" 比较后就会比 "10.10.10.10" 大, 这显然不正确
如果长度一样 像 "009.009.009.009", "010.010.010.010" 就可以用字符串直接比较
字符串比较 效率会下降很多
还是建议用数字
比如 "9.9.9.9" 比较后就会比 "10.10.10.10" 大, 这显然不正确
如果长度一样 像 "009.009.009.009", "010.010.010.010" 就可以用字符串直接比较
字符串比较 效率会下降很多
还是建议用数字
#16
应该是*256 而不是*255
把它当做(256)进制。
IP这东西,非常有规律:比如 202.203.237.1
它是一个四位数,每位数字不超过255,
把它当做(256)进制。
IP这东西,非常有规律:比如 202.203.237.1
它是一个四位数,每位数字不超过255,
#17
恩,256
#18
对.256