您当前的位置: 首页 > 网站编程 > ASP教程 > 动态程序防采集的新方法

动态程序防采集的新方法

作者:不详 来源:网络 发布时间: 2011-03-11 10:17 点击:
昨天在网上看到一个防采集软件,说采集只访问当前网页,不会访问网页的图片、JS等,今天突然想到,通过动态程序和Js访问分别记录访问者的IP,然后进行IP判断,由于采集过程不会访问JS,采集的时候只会查到用动态程序记录的IP,而不会有通过JS记录的IP,从而实现网页程

动态程序防采集的新方法

  昨天在网上看到一个防采集软件,说采集只访问当前网页,不会访问网页的图片、JS等,今天突然想到,通过动态程序和Js访问分别记录访问者的IP,然后进行IP判断,由于采集过程不会访问JS,采集的时候只会查到用动态程序记录的IP,而不会有通过JS记录的IP,从而实现网页程序的防采集。
  
  防采集的原理非常简单,首先放一段动态语句,把访问者的IP加入到数据库的一个表里,然后在页面底部加入一个JS,JS直接访问动态页面,将访问者的IP加入到数据库的另外一个表里。再次访问的时候,从两个表里读IP数据,然后判断时间差,如果只在第一个表里找到,在第二个表里找不到,或者时间差超过10秒,则认为是采集。
  
  优点
  
  1.部署简单,只要是动态语言就能很容易的实现,无需借助服务器端程序
  
  2.杀伤力大,几乎能封杀所有的采集过程
  
  缺点
  
  1.第一个缺点还是杀伤力大,如果需要实际使用需要考虑一些特殊情况,以免误杀已经杀掉搜索爬虫
  
  2.只适用于动态网页,静态页面就没法用了
  
  流程写的比较乱,不过原理本身就不是很复杂,下面附上程序例子,懂ASP的应该很快就能看懂。
  
  本文由方卡在线(http://www.fangka.net/)原创,转载请注明出处。如有雷同,纯属巧合!
  
  程序例子(ASP+ACCESS)(测试程序下载):
  
  1.建立数据库
  
  表1:Ip1,字段Ip1_Adderss(文本),Ip1_Time(日期/时间,默认值=Now())
  
  表2:Ip2,字段Ip2_Adderss(文本),Ip2_Time(日期/时间,默认值=Now())
  
  2.Index.asp(仅动态代码,全部代码请见测试程序中)
  
  <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
  
  <%
  
  Dim Conn,Rs,Sqlstr,Ip,IpTime,IpTime2,NewUser
  
  NewUser=0
  
  Set Conn = Server.CreateObject("Adodb.Connection")
  
  Set Rs=Server.Createobject("Adodb.RecordSet")
  
  ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("Data.mdb")
  
  Conn.Open ConnStr
  
  Ip=Request.ServerVariables("REMOTE_ADDR")
  
  Sqlstr="Select * From [Ip1] Where Ip1_Address='"&Ip&"' Order By Ip1_Id Desc"
  
  Rs.Open Sqlstr,Conn,1,3
  
  If Rs.Eof Then
  
  NewUser=1
  
  Application.Lock()
  
  Rs.AddNew()
  
  Rs("Ip1_Address")=Ip
  
  Rs.Update()
  
  Application.UnLock()
  
  Else
  
  IpTime=Rs("Ip1_Time")
  
  Application.Lock()
  
  Rs.AddNew()
  
  Rs("Ip1_Address")=Ip
  
  Rs.Update()
  
  Application.UnLock()
  
  End If
  
  Rs.Close
  
  If NewUser=0 Then
  
  Sqlstr="Select * From [Ip2] Where Ip2_Address='"&Ip&"' Order By Ip2_Id Desc"
  
  Rs.Open Sqlstr,Conn,1,3
  
  If Rs.Eof Then
  
  Rs.Close
  
  Response.Write("请勿采集!")
  
  Response.End()
  
  Else
  
  IpTime2=Rs("Ip2_Time")
  
  If DateDiff("s",IpTime2,IpTime)>10 Then
  
  Rs.Close
  
  Response.Write("请勿采集!")
  
  Response.End()
  
  End If
  
  End If
  
  Rs.Close
  
  End If
  
  %>
  
  3.Js.asp
  
  <%
  
  Dim Conn,Rs,Sqlstr,Ip
  
  Set Conn = Server.CreateObject("Adodb.Connection")
  
  Set Rs=Server.Createobject("Adodb.RecordSet")
  
  ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("Data.mdb")
  
  Conn.Open ConnStr
  
  Ip=Request.ServerVariables("REMOTE_ADDR")
  
  Sqlstr="Select * From [Ip2]"
  
  Rs.Open Sqlstr,Conn,1,3
  
  Application.Lock()
  
  Rs.AddNew()
  
  Rs("Ip2_Address")=Ip
  
  Rs.Update()
  
  Application.UnLock()
  
  Rs.Close
  
  %>
  
  4.Get.asp
  
  <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
  
  <%
  
  Response.Write(Server.HTMLEncode(GetHttpPage("http://localhost/Index.asp","GB2312")))
  
  '==============================
  
  '函 数 名:GetHttpPage
  
  '作 用:获取页面源代码函数
  
  '参 数:网址HttpUrl
  
  '==============================
  
  Function GetHttpPage(HttpUrl,Code)
  
  If IsNull(HttpUrl)=True Or HttpUrl="" Then
  
  GetHttpPage="A站点维护中!"
  
  Exit Function
  
  End If
  
  On Error Resume Next
  
  Dim Http
  
  Set Http=server.createobject("MSX"&"ML2.XML"&"HTTP")
  
  Http.open "GET",HttpUrl,False
  
  Http.Send()
  
  If Http.Readystate<>4 then
  
  Set Http=Nothing
  
  GetHttpPage="B站点维护中!"
  
  Exit function
  
  End if
  
  GetHttpPage=BytesToBSTR(Http.responseBody,Code)
  
  Set Http=Nothing
  
  If Err.number<>0 then
  
  Err.Clear
  
  GetHttpPage="C站点维护中!"
  
  Exit function
  
  End If
  
  End Function
  
  '==============================
  
  '函 数 名:BytesToBstr
  
  '作 用:转换编码函数
  
  '参 数:字符串Body,编码Cset
  
  '==============================
  
  Function BytesToBstr(Body,Cset)
  
  Dim Objstream
  
  Set Objstream = Server.CreateObject("ado"&"d"&"b.st"&"re"&"am")
  
  Objstream.Type = 1
  
  Objstream.Mode =3
  
  Objstream.Open
  
  Objstream.Write body
  
  Objstream.Position = 0
  
  Objstream.Type = 2
  
  Objstream.Charset = Cset
  
  BytesToBstr = Objstream.ReadText
  
  Objstream.Close
  
  set Objstream = nothing
  
  End Function
  
  %>

分享到:
本文"动态程序防采集的新方法"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4