CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

怎么取IP地址的前三位数

楼主lvconghua(吕聪华)2004-08-01 10:40:44 在 Web 开发 / ASP 提问

我想限制用户重复注册,如果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

相关问题

  • 取ip地址
  • pb8中如何写函数实现随机选取一个三位数?
  • 获取Ip地址
  • 三位数的问题?
  • 取得modem 的ip 地址?
  • 〓〓〓〓 如何获取ip地址 〓〓〓〓
  • 〓 〓 〓 〓 如何获取ip地址 〓 〓 〓 〓
  • IP地址读取问题?
  • 怎样提取ip地址
  • 如何获取IP地址?

关键词

  • ip
  • 数据库
  • 函数
  • 用户
  • nipnum
  • resault
  • sipthree
  • 地址
  • ipleft
  • bb

得分解答快速导航

  • 帖主:lvconghua

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo