asp 동적 페이지 채집 방지 새로운 방법

5041 단어 asp채집 방지
어제 인터넷 에서 채집 방지 소프트웨어 를 봤 는데 채집 은 현재 웹 페이지 만 방문 하고 웹 페이지 의 그림,JS 등 은 방문 하지 않 는 다 고 합 니 다.오늘 갑자기 동적 프로그램 과 JS 방문 을 통 해 방문 자의 IP 를 각각 기록 한 다음 에 IP 판단 을 하 는 것 이 생각 났 습 니 다.채집 과정 에서 JS 에 방문 하지 않 기 때문에 채집 할 때 동적 프로그램 으로 기록 한 IP 만 찾 을 수 있 고 JS 를 통 해 기록 한 IP 는 없 을 것 입 니 다.웹 프로그램의 수집 방 지 를 실현 합 니 다.채집 방지 의 원 리 는 매우 간단 하 다.먼저 동적 문 구 를 넣 고 방문 자의 IP 를 데이터베이스 의 한 표 에 넣 은 다음 에 페이지 밑 에 JS 를 추가 하고 JS 는 동적 페이지 를 직접 방문 하여 방문 자의 IP 를 데이터베이스 의 다른 표 에 넣는다.다시 방문 할 때 는 두 표 에서 IP 데 이 터 를 읽 고 시간 차 를 판단 하고,첫 번 째 표 에서 만 찾 으 면 두 번 째 표 에서 찾 을 수 없 거나 10 초 이상 시간 차 를 두 면 채집 이 라 고 본다.장점 1.배치 가 간단 하고 동적 언어 만 있 으 면 쉽게 실현 할 수 있 습 니 다.서버 엔 드 프로그램 을 빌 리 지 않 아 도 됩 니 다.2.살상력 이 크 고 모든 채집 과정의 단점 을 막 을 수 있 습 니 다.1.첫 번 째 단점 은 살상력 이 큽 니 다.실제 사용 이 필요 하 다 면 특수 한 상황 을 고려 하여 파충 류 를 잘못 죽 이지 않도록 해 야 합 니 다.2.동적 웹 페이지 에 만 적 용 됩 니 다.정적 페이지 는 프로 세 스 를 사용 하여 복잡 하 게 쓸 수 없 지만 원리 자체 가 복잡 하지 않 습 니 다.다음은 프로그램 예 를 첨부 하여 ASP 를 아 는 사람 은 곧 알 아 볼 수 있 을 것 입 니 다.프로그램 예(ASP+ACCESS)(테스트 프로그램 다운로드):1.데이터베이스 테이블 만 들 기 1:Ip1,필드 Ip1Adders(텍스트),Ip1시간(날짜/시간,기본 값=Now()표 2:Ip 2,필드 Ip 2Adders(텍스트),Ip 2Time(날짜/시간,기본 값=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
%>
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
%>
만약 비슷 한 점 이 있다 면,순 전 히 우연 의 일치 이다!

좋은 웹페이지 즐겨찾기