怎么取IP地址的前三位数
我想限制用户重复注册,如果IP地址的前三位相同,就不能注册,问题:怎么取得用户IP地址的前三位,并和数据库里的前三位进行比较。
如用户的IP是 202.96.128.10,我要怎么样才行得到,202.86.128这三位,然后比较一下,数据库里有没有202.86.128开头的IP地址?
问题点数:0、回复次数:22Top
1 楼sunjiujiu(绿茶狂人@抵制日货)回复于 2004-08-01 11:04:55 得分 0
dim a = "202.96.128.10"
dim IP()
ip = split(a,".")
a = ip(0) & "." & ip(1) & "." & ip(2)
这样,a就是你要前三位了
不过你注意下,我忘了这个IP数组是从0开始的还是1开始的,你看看,不行就改成从ip(1)取到ip(3)Top
2 楼ghy412(用心良苦)回复于 2004-08-01 11:07:38 得分 0
ip=split(ip,".")
ip3=""
for i=0 to ubound(ip)-1
ip3=ip3+ip(i)
next
'***********************************查找*********************
sql="select * from table1 where ip like"'sel+""+"%"+"'"
rs.open sqlTop
3 楼ghy412(用心良苦)回复于 2004-08-01 11:08:31 得分 0
ip=split(ip,".")
ip3=""
for i=0 to ubound(ip)-1
ip3=ip3+ip(i)
next
'***********************************查找*********************
sql="select * from table1 where ip like"'ip3+""+"%"+"'"
rs.open sql
Top
4 楼zjcxc(邹建)回复于 2004-08-01 11:50:14 得分 0
数组默认从0开始Top
5 楼ScriptKid()回复于 2004-08-01 11:57:42 得分 0
数组的下标默认是从0开始。
Top
6 楼aspczlover(你的骄傲...)回复于 2004-08-01 12:12:39 得分 0
ip="202.96.128.10"
aa=instrrev(ip,".") '取得最后一个.的位置
'response.write aa
bb=left(ip,aa-1) '取得前三位
response.write bb
Top
7 楼aspczlover(你的骄傲...)回复于 2004-08-01 12:16:03 得分 0
数据库里有没有202.86.128开头的IP地址?
-----》
sql="select *from table where ip like '"&bb&"%'"Top
8 楼cfooo(Mr.Liu)回复于 2004-08-01 12:27:16 得分 0
都不错,各种方法都有了,我不补充了Top
9 楼QQgenie(妖魔鬼怪)回复于 2004-08-01 23:13:34 得分 0
sql="select *from table where ip like '"&bb&".%'"Top
10 楼wubaozhang()回复于 2004-08-01 23:23:42 得分 0
so easy!!!
呵呵,补充下 aspczlover(执子之手...)
不该去掉后面的点的,要不查192.168.11.1时会查到192.168.1.1的
还有数据库可以绝对匹配查嘛,干吗要用模糊查!!
sql="select *from table where left(ip,len('"&bb&"'))='"&bb&"'"
Top
11 楼wubaozhang()回复于 2004-08-01 23:24:40 得分 0
哦,反了,是查192.168.1.1时会查到192.168.11.1
呵呵Top
12 楼emilsong(菜菜emil)回复于 2004-08-01 23:27:00 得分 0
还有问题,使用动网的LockIP()函数。 在char.asp(const.asp)文件里面!
Top
13 楼Jaron(WWW.JARON.CN)回复于 2004-08-01 23:29:08 得分 0
用SQL语句统计IP地址前三段 http://blog.csdn.net/jaron/archive/2003/07/14/15130.aspx
/* written by Jaron ,2003-07-10 */
/* 首次发表于CSDN */
/* 转载请注明出处和保留此版权信息 */
在做网站统计专家时,我们需要对IP地址段进行统计和分析,这里应用SQL-SERVER的自定义函数和存储过程实现在数据库中直接生成结果,以下代码稍作修改即可。
/* SQL语句 */
select top 99 dbo.fn_ipleft3(IPAddress),count(id) FROM tblStatisticalDetail group by dbo.fn_ipleft3(IPAddress) order by count(id) desc
/* 自定义函数的内容 */
CREATE function fn_ipleft3(@ipaddr varchar(100))
returns nvarchar(50)
as
begin
declare @ip_resault varchar(100)
set @ip_resault=''
declare @aa varchar(100),@bb int,@cc int
set @aa=@ipaddr
set @bb=0
set @cc=charindex('.',@aa)
set @ip_resault=@ip_resault+right('00'+substring(@aa,@bb,@cc-@bb)+'.',4)
while @cc>0
begin
set @bb=@cc+1
set @cc=charindex('.',@aa,@bb)
set @ip_resault=@ip_resault+right('00'+substring(@aa,@bb,case when @cc>0 then @cc-@bb else len(@aa) end)+'.',4)
end
return left(@ip_resault,11)
end
Top
14 楼computer17(黄昏之路づ流浪汉)回复于 2004-08-02 00:13:04 得分 0
花样齐全了嘛Top
15 楼xzq686(★_瞬_★)回复于 2004-08-02 07:54:11 得分 0
sIP=Request.ServerVariables("REMOTE_ADDR")
nIPNum=Split(sIP,".")
sIPOne=nIPNum(0) '首段
sIPTwo=nIPNum(0)&"."&nIPNum(1) '前两段
sIPThree=nIPNum(0)&"."&nIPNum(1)&"."&nIPNum(2)'前三段
关键看你数据库里存的IP是前三段,还是整个IP。
如果是整个IP。直接用like好像不行。如果后三段和你前三段相同,再有出现"."的位置不正确不就出事了。。
所以楼上几位用like,我觉得不爽。。。。。。
Jaron(good,better,best)可行。。。。。。
如果楼不想用存储过程,可以让数据库里存的IP为192168000001这种值。。也就是说把IP中的"."去掉,再存入数据库。然后再用wubaozhang() 的方法:
再把偶上面的sIPThree=nIPNum(0)&"."&nIPNum(1)&"."&nIPNum(2)'前三段
改成:sIPThree=nIPNum(0)&nIPNum(1)&nIPNum(2)'前三段
sql="select *from table where left(ip,len('"&sIPThree&"'))='"&sIPThree&"'"
不知道我说明白没有。。。
也就是说数据库存入的是去掉.的字串。。这种方法显得有点笨吧。不过确实可用。。有些流量统计系统就是用的这种方法。。。。
Top
16 楼flying310(林林)回复于 2004-08-02 08:08:42 得分 0
简单方法,取ip地址然后输出前11位。用left就可以。Top
17 楼huhanshan013(飞兵团将军)回复于 2004-08-02 08:24:10 得分 0
flying310(林林) ,楼上兄台,你这样不行吧。
202.101.234.211 这样的IP还可以
但是假如
211.25.24.1 怎么办?Top
18 楼Jaron(WWW.JARON.CN)回复于 2004-08-02 08:27:09 得分 0
只是用 left,substr的方法是很麻烦的.
因为取得的IP地址长度可能不同,这样取前三段的时候,就很难判断,如果在做分组统计的时候,怎么办呢? 如 Group By ?
将下面的IP地址做一个统计,取出前三段地址一样的用户的访问排名试试?
10.0.1.1
10.0.1.2
10.12.3.59
202.102.1.1
61.177.183.58
61.185.2.2
......
要得到这样的结果
10.0.1.* 2
10.12.3.* 1
......
Top
19 楼mrshelly(Shelly)回复于 2004-08-02 08:43:58 得分 0
用正则~~~~~~~~~~~~~Top
20 楼hawk_js(鹰)回复于 2004-08-02 08:50:22 得分 0
学习Top
21 楼Cloria817(心晴)回复于 2004-08-02 09:13:27 得分 0
dim string = "IP地址"
ip = split(string,".")
string1 = ip(0) & "." & ip(1) & "." & ip(2)Top
22 楼coofucoo()回复于 2004-08-02 15:00:35 得分 0
老是说,
你整个方法不好,
又宁可错杀一千,
决不放过一个的嫌疑。
你最好放宽一下要求,
干脆存IP算了。Top




