アンチコレクションの原理は非常に簡単です。まず、訪問者の IP をデータベース内のテーブルに追加する動的ステートメントを追加します。次に、JS が動的ページに直接アクセスして、訪問者の IP を追加します。データベース内の別のテーブルへの IP とその内部。
昨日、インターネット上で、コレクションは現在の Web ページにのみアクセスし、Web ページの写真や JS などにはアクセスしないというアンチコレクション ソフトウェアを見ました。今日、訪問者の IP に突然気づきました。動的プログラムと JS アクセスを通じて記録される必要があり、収集プロセス中に JS はアクセスされず、動的プログラムによって記録された IP のみが検出されます。 JS を使用することで、Web ページ プログラムの収集を防止します。
アンチコレクションの原理は非常に簡単です。まず、訪問者の IP をデータベース内のテーブルに追加する動的ステートメントを追加します。次に、JS が動的ページに直接アクセスして、訪問者の IP を追加します。データベース内の別のテーブルへの IP とその内部。再度アクセスするときに、2 つのテーブルから IP データを読み取り、時間差を決定します。最初のテーブルにのみ存在し、2 番目のテーブルには存在しない場合、または時間差が 10 秒を超えている場合は、収集されたとみなされます。 。
アドバンテージ
1. 導入が簡単。動的言語であれば、サーバーサイドプログラムを必要とせずに簡単に実装できます。
2. 致死性が高く、ほぼすべての収集プロセスをブロックできます。
欠点がある
1. 最初の欠点は、その致死性の高さです。実際に使用する必要がある場合は、検索クローラーを誤って停止しないように、いくつかの特別な状況を考慮する必要があります。
2. 動的 Web ページにのみ適用され、静的ページは使用できません。
プロセスは少し面倒ですが、原理自体はそれほど複雑ではありません。以下にプログラム例を示します。ASP を知っている人ならすぐに理解できるはずです。
プログラム例(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=サーバー .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&' Ip1_Id による順序
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;データ ソース= & 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
'関数: ページのソース コードを取得する関数
' パラメーター: URL HttpUrl
'==============================
Function GetHttpPage(HttpUrl,Code )
IsNull(HttpUrl)=True または HttpUrl= の場合、
GetHttpPage=サイトはメンテナンス中です。
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 siteメンテナンス中です!
Exit function
End if
GetHttpPage=BytesToBSTR(Http.responseBody,Code)
Set Http=Nothing
If Err.number<>0 then
Err.Clear
GetHttpPage=Cサイトはメンテナンス中です。
Exit 関数
End If
End Function
'==============================
'関数名: BytesToBstr
'関数: エンコード関数
のパラメータ
を変換: 文字列ボディ、エンコーディング 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
%>
この記事は元々 Fang によって作成されました。カオンライン、転載の際は出典を明記してください。類似点はまったくの偶然です。