中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> ASP编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· 用纯ASP代码实现...
· 纯ASP代码之公历转农...
· 纯ASP代码之公历转农...
· 纯ASP(VBscript)写的...
· 基于ACCESS数据库的...
· 基于ACCESS数据库的...
· 基于ACCESS数据库的...
· 纯ASP结合VML生成完...
· 纯ASP结合VML生成完...
· 纯ASP结合VML生成完...
纯ASP(VBscript)写的全球IP地址搜索程序(1)
作者:不详  来源:不详  发布时间:2006-8-13 0:21:11  发布人:chinazhan

 减小字体 增大字体

     <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
  <html>
  <head>
  <title>Untitled Document</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  <%
   dim finishgetip,showip,allip
  '/////////////////////////////////////////////////////////
  '程序还不是很精简,以后再修改
  '本程序所用的数据库为-- “冯志宏”-- 所写的--“追捕”--软件中所带IP数据库和
  ' “国华软件 Guohua Soft”的作者 --“冯国华”—所写的“全球IP地址分配表.chm”合二为一得到的
  '感谢“冯志宏”和“冯国华”提供的数据
  '数据库中还有不少的重复IP地址,希望有心人能将其删除,减小数据库
  '我的程序写的还很笨拙,希望大家能多提意见,多多交流,谢谢!
  '///////////////////////////////////////////////////////////
  '解决思路: www.knowsky.com
  '取得的客户端IP一般是202.11.25.1这种,而数据库中的IP格式为202.011.025.001,这就需要将取得的
  '客户端IP转换为与数据库中IP一样的格式
  '因为目前我们所用的IP是分为4段,每段3位,中间以“.”分隔
  '所以我的思路是将客户端IP以“.”符号分割为4段,即202/11/25/1
  '然后再分别核对每一段,如果是3位,则不变;如不足3位,为2位,该段前补1个0,为1,同理,则补2个0
  '得到格式化后的IP后,去掉IP的最后一段,即取包括“.”的前11位,与数据库中的startip字段的前11位相比较,查找相同的值
  '因为从数据库中可以看到,startip和endip的前三段都是一样的,而最后一段不过是内部子网地址,可以去掉
  '所以只要取startip或endip的任意一个字段的前11位与客户端IP的前11位相比较就可以查到正确的所在地
  '///////////////////////////////////////////////////////////////
  function checkip_trueip()
   '取客户端真实IP
   getclientip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") '如果客户端用了代理服务器,则用Request.ServerVariables("REMOTE_ADDR")方法只能得到空值,则应该用ServerVariables("HTTP_X_FORWARDED_FOR")方法
   If getclientip = "" Then
   getclientip = Request.ServerVariables("REMOTE_ADDR")'如果客户端没用代理,则Request.ServerVariables("HTTP_X_FORWARDED_FOR")得到是空值,应该用Request.ServerVariables("REMOTE_ADDR")方法
   end if
  checkip_trueip = getclientip
  end function
  '/////////////////////////////////////////////////////////
  function getaccessrecordset(db,sql,mark,read)'取得Recordset对象
   set conn=getaccessconn(db)'输入参数为db-数据库的相对路径,sql-SQL语句,mark,read为数据库读取方式,1,1为只读,1,3为读写
   'constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
   ' conn.open constr
   set getaccessrecordset=server.CreateObject("ADODB.Recordset")
   getaccessrecordset.open sql,conn,mark,read
   End function
  '////////////////////////////////////////////////////////////
  function getaccessconn(db)'取得connection对象
  set getaccessconn=server.CreateObject("ADODB.Connection")
   'constr="DRIVER={MICROSOFT ACCESS DRIVER (*.MDB)};DBQ="&SERVER.MAPPATH("allcon/#bbsall.mdb")
   constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
   getaccessconn.open constr
   end function
  '////////////////////////////////////////////////////////////
  dim getip
  'getip=(trim(request.ServerVariables("REMOTE_ADDR")))'从客户端获取IP
  'getip=(trim(request.QueryString("comes"))) '自己输入IP测试
  'response.Write(getip&"<br>")
  '////////////////////////////////////////////////////////////
  function checkip_locations(checkstring) '返回IP中分隔字符的位置函数
   checkip_locations=Instr(checkstring,".") '将位置的值赋予给函数
  end function
  '////////////////////////////////////////////////////////////
  '以下函数为分割IP,取得每次分割后“.”符号右边的IP剩余的字符串
  function checkip_left(checkstring)
   locations_left=checkip_locations(checkstring) '得到在IP剩余的字符串中“.”第一次出现的位置
   iplength_left=Len(checkstring) '取得IP剩余的字符串的长度
   divide_locations_left=iplength_left-locations_left '取得在IP剩余的字符串中“.”第一次出现的位置,从右往左数是多少位
   ipstr_left=Right(checkstring,divide_locations_left) '取得本次分割后,“.”符号右边的IP剩余的字符串
   checkip_left=ipstr_left '将上面得到的字符串赋给函数
  end function
  '///////////////////////////////////////////////////////////
  '以下函数为分割IP,取得每次分割后“.”符号左边的IP字符串,即将IP分为四段,每一段的字符串
  
  function checkip_right(checkstring)
   locations_right=checkip_locations(checkstring) '取得在IP中“.”第一次出现的位置
   iplength_right=Len(checkstring) '取得IP字符串长度
   divide_locations_right=iplength_right-locations_right '取得在IP剩余的字符串中“.”第一次出现的位置,从右往左数是多少位
   ipstr11=Trim(Replace(Left(checkstring,locations_right),".","")) '将得到的“.”左边的字符串去掉"."符号
   '如果IP分为4段后每一段不足3位则补0
   if Len(ipstr11)="2" then ipstr11="0"&ipstr11
   if Len(ipstr11)="3" then ipstr11=ipstr11
   if Len(ipstr11)="1" then ipstr11="00"&ipstr11
   checkip_right=ipstr11 '得到“.”符号之前的字符串,即本次分割后得到的IP分割为四段后其中的一段
  end function
  
  '/////////////////////////////////////////////////////////
  '检查IP是否为内部网IP
  '我写的判断是以:127.0.0.0-127.XXX.XXX.255和192.0.0.0-192.XXX.XXX.255为依据,如果为这二者,则是内部网IP,反之为外部网
  '判断内部IP的依据是什么,我也不清楚,所以这里要高手多多指点,并加以修正,与我联系
  function checkiplocal(checkstring)
   dim re1
   set re1=new RegExp '取得正则表达式对象
   're1.pattern中的表达式为,内部网的IP应为127或192开头,中间为0-9中任意1-3个数字加"."组成一段
   re1.pattern="^(127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(192\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$"
  
  
  
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .