小偷程序
<%
On Error Resume Next
Server.Scripttimeout=9999999
Function Gethttppage(Path)
T = Getbody(Path)
Gethttppage=Bytestobstr(T,"Gb2312")
End Function
'首先,进行小偷程序的一些初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时时间设置得很长(这样不会出现运行超时的错误),转换原来默认的utf-8编码转换成gb2312编码,否则直接用xmlhttp组件调用有中文字符的网页得到的将是乱码。
Function Getbody(Url)
On Error Resume Next
Set Retrieval = Createobject("Microsoft.Xmlhttp")
With Retrieval
'get
.Open "Get", Url, False, "", ""
.Send
' 'post
' .setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded")
' .Send(escape("A=1&B=2&C=中国"))
Getbody = .Responsebody
End With
Set Retrieval = Nothing
End Function
'然后调用xmlhttp组件创建一个对象并进行初始化设置。
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
Function Newstring(Wstr,Strng)
Newstring=Instr(Lcase(Wstr),Lcase(Strng))
If Newstring<=0 Then Newstring=Len(Wstr)
End Function
Function getHtmlBody()
Dim fromUrl
fromUrl="http://www.jsyks.com"&Request.ServerVariables("SCRIPT_NAME")
Dim QuestStirng,FormString
QuestStirng=Request.QueryString
FormString=Request.Form
if QuestStirng<>"" then fromUrl=fromUrl&"?"&QuestStirng
if FormString<>"" then
if instr(fromUrl,"?")>0 then
fromUrl=fromUrl&"&"&FormString
else
fromUrl=fromUrl&"?"&FormString
end if
end if
getHtmlBody=Gethttppage(fromUrl)
End Function
Dim bodyData
bodyData=getHtmlBody()
'处理抓取回来的数据需要调用adodb.Stream组件并进行初始化设置。
'利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强
'
'大了。确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外两
'
'个方法被我们忽略了,而这正是问题的关键。
'下面首先来说说这个方法
'1。.send()
'由于流行的小偷是使用的GET而不是POST来传送数据,所以很多人忽略了这个方法,而使用SEND发送数据也很简单,就是SEND("内容"),可是,
'
'发送表单就不是这么简单,因为你发送的表单如果是中文的话,就要牵扯到编码的问题了。
'首先,你在OPEN 时要确定是用POST 即 .open("POST",地址,是否异步)
'然后,在SEND里面加上你表单的内容,比如说,你要提交的表单有3个表单域,分别是A,B,C,对应的值分别是1,2,3,那么,你在SEND里这
'
'样写就可以提交表单了,.send("A=1&B=2&C=3"),怎么样,很简单吧,是不是没想到呢?但是别高兴的太早了,我前面说到了,如果表单的值是
'
'中文的话,数据传输的就会出错了。这里我们借助一个函数escape(),熟悉JAVASCRIPT的朋友都应该知道这个函数的作用了,现在VBSCRIPT同样支持这个函数。
'2。.setRequestHeader()
'接着上面的所说,你的数据send出去了,对方却不会接收到,为什么了,其实,那是因为你的HTTP头少了一个东西,然后用这个函数把加上去就可以了,具体就是.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded"), 告诉对方你是提交了一个urlencode编码的表单。
'
'好的,说完了表单的提交来说怎么传送cookies和session
'
'其实传送cookies也很简单了,同样利用这个函数在HTTP头里添加东西,比如,我当前在落伍的cookies是
'cdb_sid=ybBiK0; cdb_cookietime=315360000; cdb_oldtopics=D869008D; cdb_visitedfid=1D45; cdb_auth=AQYHXVFDGERdsggVQA1VYUgxQDwFVV1dUAlwFAFRXVwU%2FbAIJB1lUCg; cdb_fid45=1113370145
'现在我要发送这个cookies就直接是.setRequestHeader("Cookie","cdb_sid=ybBiK0; cdb_cookietime=315360000; cdb_oldtopics=D869008D; cdb_visitedfid=1D45; cdb_auth=AQYHXVFDGERdsggVQA1VYUgxQDwFVV1dUAlwFAFRXVwU%2FbAIJB1lUCg; cdb_fid45=1113370145")
'当然,有些网站页面有页面判断功能,这个也不难,就是.setRequestHeader("Referer","来路的绝对地址")
'这里还有个重要问题,就是这个方法由于是写HTTP头的,所以不能更改现有的HTTP头,对于怎么用asp获取对方页面的cookies或session并且发出去,就下次在发文说明
%>
浙公网安备 33010602011771号