13 12
发新话题
打印

ASP小偷(远程数据获取)程序入门教程

本主题由 admin 于 2008-1-29 15:55 解除置顶

ASP小偷(远程数据获取)程序入门教程

这里所说的“小偷”指的是在asp中运用xml中的xmlhttp组件提供的强大功能,把远程网站上的数据(图片,网页及其他文件)抓取到本地,经过各种处理后显示到页面上或者存储进数据库的一类程序。你可以通过这种小偷程序,完成过去一些似乎完全不可能实现的任务,比如说把某个站的页面偷梁换柱后变成自己的页面,或者把某个站的一些数据(文章,图片)保存到本地数据库中加以利用。“小偷”的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省大量的服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点在于:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。怎么样,听起来很神奇吧?我们现在就开始来学习一些“小偷”程序的入门知识吧!
& p7 k' |. a. R& s我们拿个简单点的东西来研究一下吧,qq网站上的天气预报程序
5 Q' m8 W. }7 k' m) q    代码如下:
# d8 r7 T, |7 P1 <%
- I% j  D' L4 l! m; f- y7 F! c
2 On Error Resume Next 3 Server.Scripttimeout=9999999 4 Function Gethttppage(Path)  Z% v+ a9 _0 L& z% w, \
5 T = Getbody(Path)' A9 M/ d" [& l$ k0 w( F1 a8 o& x. E
6 Gethttppage=Bytestobstr(T,"Gb2312")  l4 h9 [$ a9 E7 c9 q; x1 C1 t
7 End Function 8 9 ' 首先,进行小偷程序的一些初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时时间设置得很长(这样不会出现运行超时的错误),转换原来默认的utf-8编码转换成gb2312编码,否则直接用xmlhttp组件调用有中文字符的网页得到的将是乱码。1011 Function Getbody(Url)
+ {- P7 j" r' T1 j! k: G
12 On Error Resume Next13 Set Retrieval = Createobject("Microsoft.Xmlhttp")
# m. k8 j* C$ v1 H4 M4 j2 @/ J
14 With Retrieval ) ?5 h( A8 P  I( R& Y1 ]
15 .Open "Get", Url, False, "", "" + K; s! a) b8 q
16 .Send , X, r! _7 g; w7 c# y. v
17 Getbody = .Responsebody) @! p  y" V3 Z$ b% h7 b
18 End With : O2 R* u( P& S; u& P
19 Set Retrieval = Nothing 4 Q9 k  G2 A- l
20 End Function2122 '然后调用xmlhttp组件创建一个对象并进行初始化设置。2324 Function Bytestobstr(Body,Cset)
+ q/ M: g9 o  F. c- e" z# P
25 Dim Objstream( B. d0 ~9 b1 A9 s" g( _
26 Set Objstream = Server.Createobject("Adodb.Stream")
, Z) f' S, Y/ g/ O/ R
27 Objstream.Type = 128 Objstream.Mode =329 Objstream.Open+ K" v: F+ ^% F$ E* `
30 Objstream.Write Body
4 C' d* {1 }& {
31 Objstream.Position = 032 Objstream.Type = 233 Objstream.Charset = Cset2 _9 Q# C* c7 W) w- S# D9 g7 e
34 Bytestobstr = Objstream.Readtext . L1 }0 L. x+ u, O
35 Objstream.Close, L/ x5 Q; i& }9 a- X6 t: \& k- x
36 Set Objstream = Nothing37 End Function3839 Function Newstring(Wstr,Strng); @& R" b, E" I6 Z$ C& W: J+ N
40 Newstring=Instr(Lcase(Wstr),Lcase(Strng))3 J$ e3 q/ C$ \
41 If Newstring<=0 Then Newstring=Len(Wstr)
" W7 \. |+ l  x, \
42 End Function4344 '处理抓取回来的数据需要调用adodb.Stream组件并进行初始化设置。%>
草根,不是为了草根而草根;
草根,是手段,不是目的,脱颖而出才是目的!

草根站长论坛一定是你脱颖而出的必选的平台!
请帮助宣传/支持草根站长网.草根站长网是一个需要理解的地方,适宜长期居住!

TOP

小偷程序大揭秘 小偷程序大揭秘

前言:小偷程序其实是懒人的妙法。它可以偷文章,实时新闻资讯,歌曲,甚至歌曲数据的职能寻找和入库等!功能可谓强大,但是还有好多朋友到处求小偷程序,问什么?因为网上没有几篇详细介绍小偷程序的文章供大家参考。其实做小偷程序并不难,我在这儿把我作小偷程序的经验贴出来大家看看,可能也有不对的地方,请大家多多指出来。4 A; B. V: H5 s* x2 b: _
一、基本原理及简单实例
8 Z8 _0 T" q9 J2 y& Q  g" q原理部分网上太多了,blue1000也没有必要在这里罗嗦了,这里引用一下,嘿嘿: O  |# d) U) d* q9 W
注:此下内容为引用(有部分修改):原作者:572019 引用自:动易网络3 C7 n' y2 m5 }$ h
7 D8 M+ v8 w5 W# K4 z& L$ `
(一)原理
. G9 \9 I' R2 ^/ I' ~1 T1 ^小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。% q# ]1 C, O6 a% P/ b
(二)事例- N  |- Y, g* }) e
下面就XMLHTTP在ASP中的应用做个简单说明& o% R% A2 x9 _* [
<%
2 y! s7 R; q6 A6 O, S9 _5 O’常用函数
) w, Q: B2 s; \! f' J+ Y9 m’1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码 : B1 M: S; {7 ?7 ?5 |
function getHTTPPage(url)
) U' `% t' b- U3 bdim Http
. R' x$ U* n) H9 Z7 Vset Http=server.createobject("MSXML2.XMLHTTP") ' d" L+ O2 [4 F9 J) S& y
Http.open "GET",url,false
. n/ [" H* `8 N6 O2 k: c- @$ `Http.send()
% r% T8 J6 w; }; xif Http.readystate<>4 then
8 e2 x- P" m$ s+ Y+ l7 Y/ Bexit function
1 F" U; a1 x( Z& k6 S$ wend if - {' k/ ^; u; u, H5 J/ D- E" r) I
getHTTPPage=bytesToBstr(Http.responseBody,"GB2312")
$ x7 L/ B! ?# T, h8 W1 wset http=nothing
  E8 z( I+ a- ~, X+ m) A# i1 kif err.number<>0 then err.Clear * X( R: s- l) f3 z. v9 N
end function4 k" y7 c' n9 w8 ^% U  x0 ]) L9 v
'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换7 R/ {+ e# ^8 g3 I' s; `
Function BytesToBstr(body) ; T4 x6 c& T* Z' @" q, s+ r/ W
dim objstream 2 T0 ]5 A+ y- b2 _/ H
set objstream = Server.CreateObject("adodb.stream") 2 h( [+ H) `. T  D
objstream.Type = 1 6 T# l4 J1 w7 T" M, s9 c9 Z
objstream.Mode =3 , l) q$ L6 o1 Y3 s0 e. ]' h
objstream.Open
, v5 ]0 E  n. S( z& Q0 Y  \objstream.Write body + f( ]' R- ]1 e
objstream.Position = 0
! @7 l, n/ j3 tobjstream.Type = 2 - x  Z' x2 S! b' S6 I" `3 K6 i- p9 g
objstream.Charset = "GB2312" ’转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP组件调用有中文字符的网页得到的将是乱码
* p' R8 ?- |8 ~BytesToBstr = objstream.ReadText ; F; H: n- A2 _& l3 u
objstream.Close
6 v. D9 I3 G  P( N& C/ \set objstream = nothing
; q3 l% l' u7 N8 [" `End Function
" O) s7 Q6 J% i3 V! c3 a4 \’下面试着调用http://www.3doing.com/earticle/的html内容
5 E: @9 `0 Y& r# I( g$ H& v- ODim Url,Html : O$ W9 ~2 e: D- J7 t6 h" O
Url="http://www.3doing.com/earticle/";
9 }% S9 W, b0 q: C* u6 f: L$ ~Html = getHTTPPage(Url)
8 K3 z; y( d2 I5 w* @: Q; nResponse.write Html & E( f. Q9 i, v1 u5 m0 k; f" y, w8 g
%>" E6 K$ n0 I& a' t( v9 @- `5 d
: W8 V3 x/ f2 f" _, p4 n
注:此上内容为引用(有部分修改):原作者:572019 引用自:动易网络
3 z6 b$ g2 ]3 B1 s% X, E+ _; M! Q' U5 m
二、几个常用的函数
% f! j, p  D1 b3 v" O* m(一)InStr 函数
) M' p% r8 y" w( a9 v4 a1 ?描述( x5 r1 _: n: K  W+ u+ t. C
返回某字符(string2)串在另一字符串(string1)中第一次出现的位置。9 ^) K1 c0 z8 n3 C0 c! Q
语法  O$ ?5 h/ I' c+ a% k
InStr(string1, string2)
  X3 C$ `3 r  z5 P& @5 V例如:
* C% H+ |, w5 q" g9 `Dim SearchString, SearchChar+ {, I7 N9 {0 l" i
SearchString ="http://blue1000.com" ' 要在其中搜索的字符串。! D) q. ?' o# j. _
SearchChar = "blue1000" ' 搜索 "blue1000"。! ?- q3 P0 r1 }, E* {& N
MyBK = Instr(SearchString, SearchChar) ' 返回 8
9 Z8 {; m) g: `2 U# i& N: T'如果找不到则返回“0”,例如:0 ^$ a$ r( Q2 M' n2 O1 }) _0 g# I
SearchChar = "BK"
/ u3 ^( K- z- W$ B2 W2 bMyBK = Instr(SearchString, SearchChar) ' 返回 0# \' N. ]7 @; Y* S8 s
(二)Mid 函数  U; N* r0 _% K- R9 W6 t9 S& g- G- V8 D
描述
5 i, S+ q7 S. w; F从字符串中返回指定数目的字符。
' T0 Q+ D0 @6 N7 |; K% k语法
: Z( s! j- \- K$ r2 J9 ?" SMid(string, start, over)& A7 p1 V$ ~+ ?9 V( ]8 H) ]/ @( D% [
例如:
# R9 j- M4 e# Q; e# X" s6 EDim MyBK
/ e& c  }: M% W+ a3 `# _4 GMyBK = Mid("我们的BK(blue1000.com)设计", 7, 12) '截取字符串"我们的BK(blue1000.com)设计"第7个字符以后的12个字符
; Z7 a, n% ?: U( L: h& C0 u( Y2 N'此时MyBK的值就变成了"blue1000.com"- L" ?. s7 w& D  F0 s
(三)Replace 函数(这个我就不细说了,只举个例子)4 c4 P+ q9 q0 g3 u
Dim SearchString, SearchChar
4 c  T0 g7 z( N4 y$ E$ x, r; ySearchString ="我们的BK设计是一个网站建设资源网站" ' 要在其中搜索的字符串。
: L' Z* M* g) ^SearchString =Replace(SearchString,"BK设计","Blue1000.Com")
6 I0 }- R( `( a, N'此时SearchString的值就变成了"我们的Blue1000.Com是一个网站建设资源网站"* D4 D8 l& z% o2 ^5 q
上面的内容只说了如何获取整个页面的html的代码和几个常用的函数,那么如何获取指定部分的代码呢?如何删除我不需要的内容呢?如何才能将外站的链接改成我的呢?又如何实现把原来的翻页做成我的呢?
. e1 E& g/ X& A) e& _& O6 j5 y) D详情请看下节,小偷程序精华所在:1 L' o6 C- J' p$ p. _
小偷程序大揭秘(1)--技巧篇
草根,不是为了草根而草根;
草根,是手段,不是目的,脱颖而出才是目的!

草根站长论坛一定是你脱颖而出的必选的平台!
请帮助宣传/支持草根站长网.草根站长网是一个需要理解的地方,适宜长期居住!

TOP

上一篇blue1000给大家讲了些原理和几个常用的函数,这一节说一些技巧类的东西~(对高手来说,这是废话,所以高手可以不看,但也不要骂我哦)4 v/ N" g. M1 r5 ]
(一)如何截取指定区域的HTML代码?
9 V! N  M8 b) q5 e1 G$ U8 O(对方网站的HTML代码在哪儿看?晕:IE浏览器>>查看>>源文件。不要告诉我你不知道IE是什么!)
. f  |' h/ i5 C3 P; q例如我只想获取以下HTML代码中"<td>"和"</td>"之间的的文字部分:
+ Q% I7 P+ X* C( i% a8 [3 S9 I( _# a<html> $ @- i( T3 b, A1 u8 A9 x# X
<title>BK(blue1000.com)设计--网页制作资源站点</title>
! @+ T' {3 ~5 U; ?) B<body>
1 [+ C- R* j" w7 G5 u( O5 B<table> ' G& X# o+ {: a7 b$ y$ w/ ^7 B
<tr><td></td></tr> + n/ l2 ?) S" k# D! {! }
<tr><td id="Content">BK(blue1000.com)设计--网页制作资源站点是个资源多多的站点……</td></tr> . Q# S- J$ ]7 i- w
</table>
* v6 p$ A2 ^" d1 }  @</body>
. G+ k4 o8 B/ N* C</html>
& }% {; c+ m# P. ?# _; A& e# p<% - z% i$ n% w8 E- G1 X/ X& v  b$ v" K
……
9 j2 w1 S' X9 FDim StrBK,start,over,RsBK
8 `1 W) J9 w+ e5 J( I. J1 ~StrBK=getHTTPPage(网页的地址)
9 A3 j+ U7 e6 `4 U3 u; {start=Instr(StrBK,"<td id=""Content"">") ’此处的作用是获取字符串开始地方的定位。Instr函数前面一节说过了哦~ ; z, c* f4 r5 d) H
’这里要有人问了:原来的代码是<td id="Content">,怎么你这里调用的是<td id=""Content"">啊?答案:asp中(准确的说是VBscript中是用两个双引号来表示一个双引号的,因为双引号对于程序来说是个敏感字符。) 1 m- e4 L  m/ B7 I. y$ T
over=Instr(StrBK,"…</td></tr>")’此处的作用是获取字符串结束地方的定位。 , }/ K% A. w3 y1 ?0 A) Q$ t8 ^
’这里又要有人问了:( :程序调用HTML代码干吗前面多出来3个点点"…"啊?答:提示:上面一行也有一个</td></tr>,如果这里用</td></tr>来定位的话,程序会错误地把上面一行的</td></tr>当成欲获取字符串的结束部分了。
$ `7 N8 z: S! c2 _RsBK=mid(StrBK,start,over-start) ’此处的作用是取出StrBK中第start个字符到第over个字符之间的字符串。mid函数前面一节我也讲过了;over-start是为了计算出开始位置和结束位置之间的距离,也就是字符数。 3 g" Y* m, W" n# J  e+ n' v3 ~
response.write(RsBK) ’最后输出程序获取的内容 ; y" X) D, W( e" W
%>. f* ]- ?( F8 j, a3 q7 _; P
不要高兴的太早,当你运行的时候,你会发现页面的html代码有错误,为什么呢?因为你获取的html代码是:
7 j6 J* a/ f% O* x<td id="Content">BK(blue1000.com)设计--网页制作资源站点是个资源多多的站点…$ B" s; S9 D( n9 k6 R: n. H( R; H; @2 j
看到了吧?有残缺的HTML代码啊!怎么办呢?start=Instr(StrBK,"<td id=""Content"">")这个语句获取的是"<td id="Content">"在StrBK中的位置数,现在我们可以在程序语句的后面加上17,那么程序就会将位置指向<td id="Content">后面的那个字符.
8 F6 X4 ~- b1 k: w& q0 z, f' {: S1 X好的,程序将改成这样:   B( X6 L5 R- m" |# F' B
<%
5 y# c5 x( }' T# M' Q0 }6 G3 C% r……
& V* O) E6 N' Z% C2 w9 A7 I" ?Dim StrBK,start,over,RsBK
5 |1 J- f+ ^- `: D- fStrBK=getHTTPPage(网页的地址)
. a! I) |+ W9 s/ Y% Rstart=Instr(StrBK,"<td id=""Content"">") + 17
- T+ ^. r/ @- d" A% }over=Instr(StrBK,"…</td></tr>") ’这里你也可以减去七(-7)把3个点去掉 $ h; r. h' R' F) q
RsBK=mid(StrBK,start,over-start)
: I1 K6 s0 @" l3 r! k' eresponse.write(RsBK) 2 Q* s: J3 c8 R" j! P  B( J1 Y, ?: N
%>
- ^1 C9 o. `. u; T3 y! d; N这样就OK了,我们就可以将我们想要的东西偷过来显示在我们自己的页面了,呵呵~2 p, u* D& A/ D: p
(二)如何将获取的字符中的一部分删掉或者做一些修改?
  U- ]- o0 M% D$ H, m接着上面的来讲,我们可以将RsBK中的"BK(blue1000.com)"换成"BK":. r  I% q/ }. R8 t9 B! L
RsBK=replace(RsBK,"BK(blue1000.com)","BK")6 i5 `/ Z" I$ S/ D* b
或者直接把"(blue1000.com)"删掉:
& M9 `. k" |  G7 s$ A, N& t) oRsBK=replace(RsBK,"(blue1000.com)",""): h9 e. j  v; P$ P, G/ m
好了,现在RsBK就变成了:"BK设计--网页制作资源站点是个资源多多的站点……"了.: p3 M2 q8 X6 p9 }+ @( l( J
但是事实中,有些情况可能replace函数是不适应的,比如我们想把某个字符串里面的所有连接都去掉.连接可能包括很多种类型,replace只能替代其中特定的一个,我们不可能用一个又一个对应的replace函数来替换吧?
) K, N& c2 z$ ~, l7 u- F2 o# D! T那么现在就用到了程序中的正则表达式,详细请参阅:6 A4 ~% m5 r. Y4 Y& t
正则表达式简介(1):
5 A/ J8 ]! U$ d5 T2 a# H8 Vhttp://www.blue1000.com/bbs/dispbbs.asp?boardID=3&ID=1558&page=1. e6 k/ m9 Y, ~! n
正则表达式简介(2):" c7 ]6 U+ M4 ~/ n
http://www.blue1000.com/bbs/dispbbs.asp?boardID=3&ID=1559&page=17 `/ d  }9 _) U2 M2 Z% w/ w
如果哪位朋友正好想去掉页面中所有链接的话,请关注Blue1000.com的下一篇教程:<<如何清除网页中的所有链接[正则表达式]>>$ }! u. @! Y( U6 `" Z
(三)如何将对方网站的翻页也处理成我们自己的呢?* a- R3 R% n6 D+ c% H, g2 f
答案是:利用replace函数和页面参数的传递。  l# S, F. ?* N8 \
例如对方页面里含有这样的翻页代码:"<a href=2.htm>下一页</a>",我们可以先利用上面讲的内容,获取这个字符串,然后用replace函数:RsBK=replace(RsBK,"<a href=","<a href=page.asp?Url=")
* {# K* j7 p# E1 B7 K  u: u然后再page.asp的程序里获取Url的参数值,最后用小偷技术获取下一页你想要的内容就可以了。
7 E& K1 i) `% ~9 c(四)如何将获取的内容入库4 c4 u6 I+ q1 [! C4 f  c( o- W$ l
由于篇幅有限,这里简单说一下.0 W& v& b$ s: V! t/ A7 s
其实很简单:
0 U; D$ N2 m  k$ a) m将偷来的内容作一下处理,防止在写入数据库的时候出现sql注入错误,例如:replace(String,"'","''")
1 ?% g+ w0 ^8 f2 Y3 I2 e然后执行一个插入数据库操作的sql命令就ok了~
" [1 x1 X. y9 o6 t0 s以上只是一些关于XMLHTTP组件的初级应用,实际上它还能实现的功能还有很多,比如说保存远程图片到本地服务器上,配合adodb.stream组件可以把获取来的数据保存进数据库。小偷的作用和使用范围都很广。. L, S. }  j1 U) a
最好再送大家两个源码,大家可以参考参考:
- d9 f9 s, b$ O4 q) Q! L站长站站长学院的技术文章小偷(blue1000做的,还用了一些Javascript优化了速度):
  M+ |/ G1 X2 Z" u& ^9 ihttp://blue1000.com/bbs/dispbbs.asp?boardID=9&ID=1595&page=1
, |  v* h  j# S% v6 n2 ^8 eblue1000修改完善的音乐小偷程序:' f! A  `  }/ l5 q0 @) a, _. L, O
http://blue1000.com/bbs/dispbbs.asp?boardID=9&ID=1599&page=1
草根,不是为了草根而草根;
草根,是手段,不是目的,脱颖而出才是目的!

草根站长论坛一定是你脱颖而出的必选的平台!
请帮助宣传/支持草根站长网.草根站长网是一个需要理解的地方,适宜长期居住!

TOP

向你学习.....你对小偷程序很有研究呀....

TOP

跟ajax有些相似啊

TOP

有做好了的程序吗?

TOP

回复 1# 的帖子

我用小偷程序有这段5 u; |5 E  r( k6 i
sub change(OldStr,newStr)
% x3 h8 P4 C' H7 A6 @  page=replace(page,OldStr,newStr)
- U* b  S( x0 ~6 F+ M/ h/ N/ dEnd sub& M0 {4 f- h. O* y# s$ A# T, _
$ @& @: [1 N* n" `6 W; Q! r# k
sub title(str)
' q$ \9 V" r" j& L0 Aresponse.write "<title>"&sitename&" >> "&str&"</title>"# a( Z' |  R$ S+ X# Q, V
end sub
; D9 H) @' U/ h2 g$ Y%>不知道是什么意思,在网上也搜不出来

TOP

强啊````强
中国合租专家www.9935.net服务器租用
客服QQ:511914405
我们会用真诚  真实  真信  的服务来对待每一个客户

TOP

有做好了的程序吗

TOP

那些小字......?是些蚂蚁吗?

TOP

 13 12
发新话题