zoukankan      html  css  js  c++  java
  • 小偷程序原理和简单示例

    现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助。
    (一)原理
    小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。
    (二)事例

    下面就XMLHTTP在ASP中的应用做个简单说明

    XML相关技术资料

    xmlHTTP技术
    ----------------------------------------------------------
    一、数据库远程管理技术

    基于互联网的广域网现代应用中的一个重要环节是数据库远程监控。首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式:

    早期通过编写CGI-BIN程序模块进行数据库远程管理。但CGI-BIN的运行速度慢,维护很不方便,现在已经基本被弃用。

    这几年使用组件对象模型(Component Object Model, COM)的应用非常多,效果也很好。但如果使用的是第三方服务器(笔者的网站就是建立在第三方的虚拟主机上),服务器方往往因为保密或其它商业原因不允许用户注册自己的组件。

    近年来由微软公司推出的.NET平台和SUN公司的J2EE平台都是非常高档的数据库远程管理与服务平台。都能提供优质的多层(n-Tier)应用服务。
    其中,.NET的简单对象访问协议(Simple Object Access Protocol, SOAP)使用超文本传输协议(Hypertext Transfer Protocol, HTTP)和扩展标记语言(Extensible Markup Language, XML)技术实现跨系统(例如Windows - Linux)的通讯服务方式已经广为开发商接受和使用。许多大型应用,例如企业资源计划(Enterprise resource planning, ERP)等都建立在这样的大型平台之上。
    但对于中小型应用,比如一个网站的建设和维护,这种大型应用平台就显得有些尾大不掉,开销也过于庞大。

    曾经在互联网技术和Java技术方面一度落后的微软公司在XML应用开发则走在了前头。她的XML解析器(MSXML)中的XMLHTTP协议是一个非常方便实用的客户服务通讯管道。综合运用XMLHTTP以及ActiveX数据对象(ActiveX Data Objects, ADOADOX)可以简单方便地实现数据库远程管理。

    本文介绍如何综合运用XMLHTTP和ADOADOX进行远程数据库管理。

    二、数据库远程管理体系

    数据库远程管理的任务流程是:
    1、客户端向服务端发出数据库结构和数据的查询或修改指令。
    2、服务端接受并执行有关指令并向客户端返回结果。
    3、客户端接受并显示服务端返回的指令执行结果。

    实现数据库远程管理的二个主要关键环节是:
    1、客户端与服务端之间的指令上传和结果下传的数据通道,由XMLHTTP协议实现。
    2、服务端前沿与数据库之间的指令传送和结果返回,由起着中间层作用的ADOADOX接口完成。
    三、XMLHTTP的使用

    顾名思义,XMLHTTP是个传送XML格式数据的超文本传输协议。

    实际上,XMLHTTP的数据传输过程更为灵活一些:
    它上传的指令可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。还可以是URL的参数。
    它下达的结果可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。
    详情可参阅文末链接。

    客户端调用XMLHTTP的过程很简单,只有5个步骤:
    1、创建XMLHTTP对象
    2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。
    客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用GET方法或POST方法指向服务端的服务网页。
    3、发送指令。
    4、等待并接收服务端返回的处理结果。
    5、释放XMLHTTP对象

    XMLHTTP方法:
    Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword
    bstrMethod:数据传送方式,即GET或POST。
    bstrUrl:服务网页的URL。
    varAsync:是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。
    应用中一般将其置为False,即异步执行。
    bstrUser:用户名,可省略。
    bstrPassword:用户口令,可省略。

    Send varBody
    varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。

    setRequestHeader bstrHeader, bstrvalue
    bstrHeader:HTTP 头(header)
    bstrvalue:HTTP 头(header)的值
    如果Open方法定义为POST,可以定义表单方式上传:
    xmlhttp.setRequestHeader Content-Type, applicationx-www-form-urlencoded

    XMLHTTP属性:
    onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
    responseBody:结果返回为无符号整数数组。
    responseStream:结果返回为IStream流。
    responseText :结果返回为字符串。
    responseXML:结果返回为XML格式数据。


    下面是本文附件源程序中的一个应用示例:
    Function GetResult(urlStr)
    Dim xmlHttp
    Dim retStr

    Set xmlHttp = CreateObject(Msxml2.XMLHTTP ’创建对象
    On Error Resume Next ’出错处理
    xmlHttp.Open POST, urlStr, False ’用POST方式打开连接,异步执行。
    xmlHttp.setRequestHeader Content-Type, applicationx-www-form-urlencoded ’上传表单
    xmlHttp.Send ’发送指令

    If Err.Number = 0 Then ’如果连接正确
    retStr = xmlHttp.responseText ’等待并获得服务端返回的结果字符串
    Else
    retStr = Url not found ’否则返回出错信息
    End If
    Set xmlHttp = nothing ’释放对象
    GetResult = retStr ’返回结果
    End Function

    GetResult()函数带入一个服务网页的URL参数,把上传的指令安放在URL后面的参数上,如:
    urlStr = server.aspcmd= & cmd & &db= & db & table= & table
    cmd:执行方式,例如查询,修改,删除等等。
    db:服务端数据库名
    table:服务端表名

    然后提交指令,等待并接收返回的处理结果。结果以字符串方式返回。

    最后由函数调用者处理并显示结果。

     下面是小偷的内容:
    Sample.asp

    <%
     if hour(now)=9 and minute(now)<30 then
      getCategories()
     end if
     Function getCategories()
      on error resume next
      Dim oXMLHTTP ' As Object
      Dim oCategories ' As Object
      Dim BodyText
      Dim Pos,Pos1
      Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")
      '--- set the XMLHTTP call and issue send (no parm as category
      '--- is included in URL
      oXMLHTTP.open "GET","http://weather.china.com.cn/travel_gntq.php?cityid=56196&cityname=绵阳",False '这个地方换成你自己的地址
      oXMLHTTP.send
      '--- load the response into the Categories data island
      BodyText=oXMLHTTP.responsebody
      BodyText=BytesToBstr(BodyText,"gb2312")
      Pos=Instr(BodyText,"<body")
      pos1=Instr(BodyText,"</body>")
      BodyText=mid(BodyText,pos,pos1)
      BodyText=split(BodyText,"<table")
      Pos=Instr(BodyText(4),"<tr")
      pos1=Instr(BodyText(4),"</tr>")
      Body=mid(BodyText(4),pos,len(BodyText(4))-pos)
      body=split(body,"</table>")
      body1=split(replace(replace(replace(body(0),"<br>",""),"</td>",""),"</tr>",""),"天气")
      for i= 1 to ubound(body1)
       body3=split(body1(i),"<td")
       weather=weather & "document.write("""& i&"$" & "天气" & HTMLEncode(trim(body3(0))) & """);" & vbcrlf
      next
      weather=replace(weather,"1$","<FONT color=#ffffff>【今天】</FONT>")
      weather=replace(weather,"2$","<FONT color=#ffffff>【明天】</FONT>")
      weather=replace(weather,"3$","<FONT color=#ffffff>【后天】</FONT>")
      Set fs = CreateObject("Scripting.FileSystemObject")
      Set f = fs.CreateTextFile(request.ServerVariables("APPL_PHYSICAL_PATH")& "tq.js", True)
      f.write("document.write('绵阳天气预报:');" &vbcrlf & replace(weather,"<BR>",""))
      f.close
      Set f = nothing
      Set fs = nothing
      response.write "绵阳天气预报:"& weather
      Set oXMLHTTP = Nothing
      if err.number<>0 then
       response.write "出错了,错误描述:"&err.description & "<br>错误来源"& err.source
       response.End()
      end if
     End Function

     Function BytesToBstr(body,Cset)
      dim objstream
      set objstream = Server.CreateObject("adodb.stream")
      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
     Public Function HTMLEncode(fString)
      If Not IsNull(fString) Then
       fString = replace(fString, ">", ">")
       fString = replace(fString, "<", "<")
       fString = Replace(fString, CHR(32), " ") ' 
       fString = Replace(fString, CHR(9), " ") ' 
       fString = Replace(fString, CHR(34), """)
       fString = Replace(fString, CHR(39), "'") '单引号过滤
       fString = Replace(fString, CHR(13), "")
       fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ")
       fString = Replace(fString, CHR(10), "<BR> ")
       HTMLEncode = fString
      End If
     End Function
    %>

    我来自:向东博客
  • 相关阅读:
    关于使用AJAX获取数据时,由于IE缓存而导致数据不更新,串数据的问题!
    优化PHP代码的40条建议(转)
    这么晚了!难得今天看了几个小时的JAVA
    WEB开发,路漫漫其修远兮,个人的求索思考
    (转)高效的MySQL分页
    20121108随笔,关于代码严谨性、编写的优雅性
    Ubuntu 12.04LTS 安装PHP扩展pdo_oci.so支持ORACLE数据库
    程序员应该具备的11项基本技能
    Windows下配置使用MemCached
    PHP浮点数比较
  • 原文地址:https://www.cnblogs.com/meil/p/487277.html
Copyright © 2011-2022 走看看