< %@LANGUAGE="VBSCRIPT " CODEPAGE="936"%>
<html>
<頭>
<title>無題のドキュメント</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<本文>
<%
ディムフィニッシュゲットチップ、ショーイップ、アリップ
'/////////////////////////////////////////////// /// ////////
「プログラムはまだあまり合理化されていないため、後で修正される予定です。
「このプログラムで使用されるデータベースは、「Feng Zhihong」によって作成され、「Punt」によって作成され、ソフトウェアに含まれる IP データベースです。
「Guohua Soft」の作者「Feng Guohua」が作成した「Global IP Address Allocation Table.chm」を 1 つに統合
「データを提供してくれた「Feng Zhihong」と「Feng Guohua」に感謝します
「データベースには重複した IP アドレスがまだたくさんあります。誰かがそれらを削除してデータベースのサイズを削減できることを願っています。
「私のプログラムはまだ非常に不器用です。皆さんがもっと意見をくれて、もっとコミュニケーションできることを願っています。ありがとう!」
'/////////////////////////////////////////////// /// //////////
'解決策: www.downcodes.com
'取得したクライアント IP は通常 202.11.25.1 で、データベース内の IP 形式は 202.011.025.001 です。これには、取得した
'クライアント IP をデータベース内の IP と同じ形式に変換します
現在使用しているIPは4つのセグメントに分かれているため、各セグメントは「.」で区切られた3桁の数字になります。
そこで私のアイデアは、クライアント IP を「.」記号で 4 つのセグメント、つまり 202/11/25/1 に分割することです。
'その後、各段落を個別に確認します。3 桁の場合は変更されません。3 桁未満の場合は、段落の前に 1 0 を追加すると 1 になります。同様に、2 を追加します。 0秒。
' フォーマットされた IP を取得した後、IP の最後のセグメントを削除します。つまり、「.」を含む最初の 11 桁を取得し、データベースの startip フィールドの最初の 11 桁と比較し、同じ値を見つけます。
なぜなら、startip と endip の最初の 3 つのセグメントが同じであり、最後のセグメントは単なる内部サブネット アドレスであり、削除できることがデータベースからわかるからです。
したがって、startip または endip のフィールドの最初の 11 桁を取得し、それをクライアント IP の最初の 11 桁と比較して、正しい場所を見つけます。
'/////////////////////////////////////////////// /// ///////////////
関数 checkip_trueip()
'クライアントの実際のIPを取得します
getclientip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 'クライアントがプロキシ サーバーを使用している場合、Request.ServerVariables("REMOTE_ADDR") メソッドは null 値しか取得できないため、ServerVariables("HTTP_X_FORWARDED_FOR") メソッドを使用する必要があります。
getclientip = "" の場合、
getclientip = Request.ServerVariables("REMOTE_ADDR")'クライアントがプロキシを使用しない場合、Request.ServerVariables("HTTP_X_FORWARDED_FOR") は null 値を取得するため、Request.ServerVariables("REMOTE_ADDR") メソッドを使用する必要があります。
終了する場合
checkip_trueip = getclientip
終了関数
'/////////////////////////////////////////////// /// ////////
function getaccessrecordset(db,sql,mark,read)' Recordset オブジェクトの取得
set conn=getaccessconn(db)' 入力パラメータは db-database の相対パス、SQL-SQL ステートメント、mark、read はデータベース読み取りメソッド、1、1 は読み取り専用、1、3 は読み取り/書き込みです
'constr="Provider=microsoft.jet.oldb.4.0;"&"data Source="&Server.MapPath(db)
' conn.open constr
set getaccessrecordset=server.CreateObject("ADODB.Recordset")
getaccessrecordset.open sql、conn、mark、read
終了機能
'/////////////////////////////////////////////// /// ///////////
function getaccessconn(db)'接続オブジェクトを取得します
set getaccessconn=server.CreateObject("ADODB.Connection")
'constr="DRIVER={MICROSOFT ACCESS DRIVER (*.MDB)};DBQ="&SERVER.MAPPATH("allcon/#bbsall.mdb")
constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
getaccessconn.open constr
終了関数
'/////////////////////////////////////////////// /// ///////////
薄暗いゲティップ
'getip=(trim(request.ServerVariables("REMOTE_ADDR")))'クライアントから IP を取得します
'getip=(trim(request.QueryString("comes"))) 'テストするには IP を自分で入力してください
'response.Write(getip&"<br>")
'/////////////////////////////////////////////// /// ///////////
function checkip_locations(checkstring) 'IP の区切り文字の位置関数を返します
checkip_locations=Instr(checkstring,".") '位置の値を関数に代入します
終了関数
'/////////////////////////////////////////////// /// ///////////
'次の関数は、IP を分割し、各分割後の「.」記号の右側にある残りの IP 文字列を取得します。
関数 checkip_left(チェック文字列)
location_left=checkip_locations(checkstring) 'IP の残りの文字列内で「.」が最初に出現する位置を取得します。
iplength_left=Len(checkstring) 'IP の残りの文字列の長さを取得します
Division_locations_left=iplength_left-locations_left 'IP の残りの文字列内で最初に「.」が出現する位置を右から左に何桁あるかを取得します。
ipstr_left=Right(checkstring,divide_locations_left) 'この分割後の「.」記号の右側にある残りの IP 文字列を取得します。
checkip_left=ipstr_left '上記で取得した文字列を関数に代入します
終了関数
'/////////////////////////////////////////////// /// //////////
'次の関数は、IP を分割し、各分割後に「.」記号の左側の IP 文字列を取得します。つまり、IP は 4 つのセグメントに分割され、各セグメントの文字列関数は
checkip_right(checkstring) です。
location_right=checkip_locations(checkstring) 'IP 内で最初に「.」が出現する場所を取得します。
iplength_right=Len(checkstring) 'IP文字列の長さを取得します
Division_locations_right=iplength_right-locations_right 'IP の残りの文字列内で最初に「.」が出現する位置を右から左に何桁あるかを取得します。
ipstr11=Trim(Replace(Left(checkstring,locations_right),".","")) '取得した「.」の左側の文字列から「.」記号を削除します。
'IPが4つのセグメントに分かれており、各セグメントが3桁未満の場合は0を追加します
if Len(ipstr11)="2" then ipstr11="0"&ipstr11
Len(ipstr11)="3" の場合、ipstr11=ipstr11
if Len(ipstr11)="1" then ipstr11="00"&ipstr11
checkip_right=ipstr11 '「.」記号より前の文字列、つまりIPを4つのセグメントに分割した後の4つのセグメントのうちの1つを取得します。
関数終了
'////////////////////////////////////////////// /// //////////
' IP が内部ネットワーク IP であるかどうかを確認します
「私が書いた判断は、127.0.0.0-127.XXX.XXX.255 と 192.0.0.0-192.XXX.XXX.255 に基づいています。この 2 つであれば、それは内部ネットワーク IP です。それ以外の場合は、外部ネットワーク。
「社内知財を判断する基準がわからないので、専門家にアドバイスをもらい、修正してもらいたい。」
関数 checkiplocal(チェック文字列)
ディムレ1
set re1=new RegExp '正規表現オブジェクトを取得
「re1.pattern」の式は、内部ネットワークの IP が 127 または 192 で始まり、中間が 0 ~ 9 の任意の 1 ~ 3 の数字と「.」で段落を形成する必要があるということです。
re1.pattern="^(127.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(192. [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})$"
re1.global=false
re1.Ignorecase=false
checkiplocal=re1.test(チェック文字列)
re1=何も設定しない
終了関数
'/////////////////////////////////////////////// /// ///////////////////////
関数 checkip_remote(チェック文字列)
dim iplength 'IP文字列の長さ
薄暗い場所 '"."キャラクターが出現する場所
iplength=Len(チェックスティング)
location=Instr(checkstring,".") 'IP 文字列内で最初に「.」記号が出現する位置を左から右に取得します。
'IP を「.」文字で 4 つのセグメントに分割します。
location2=iplength-場所
ipstring1=Left(チェック文字列,場所)
ipstring2=右(チェック文字列,場所2)
終了関数
'/////////////////////////////////////////////// /// ////////
'/////////////////////////////////////////////// /// ////////
ipinfo_local="あなたの IP はイントラネット IP です!"
ipinfo_remote="外部ネットワーク IP!"
getip=checkip_trueip()
currentip=checkiplocal(getip) 'checkiplocal() 関数を呼び出して取得した IP をチェックし、それが内部ネットワーク アドレスであるか外部ネットワーク アドレスであるかを判断します。
「if currentip=true then」テストコード
'response.Write(ipinfo_local)
currentip=true の場合、 は false
「response.Write(ipinfo_local)」は内部ネットワーク IP を示します
それ以外
'変換する
' 以下は、IP を 4 つのセグメントに分割するためのループ抽出と 0 でのビット埋め込みです。
location=checkip_locations(getip)'最初の分割の前に IP 内で「.」が最初に出現する場所を取得します
iplength=Len(getip) 'クライアントIPの長さを取得する
Division_locations=iplength-locations '左から右に数えて、IP の最初の「.」まで右から左に数えてクライアント IP の位置を取得します。
ipstr1=Trim(Replace(Left(getip,locations),".",""))
ipstr2=Right(getip,divide_locations)'最初の分割後のクライアントの右側にある残りの値を取得します
'IPが4つのセグメントに分かれており、各セグメントが3桁未満の場合は0を追加します
if Len(ipstr1)="2" then ipstr1="0"&ipstr1 '長さは 2 で、3 未満です。文字列の前に 0 を追加します。
if Len(ipstr1)="3" then ipstr1=ipstr1 '上記の類推によると
if Len(ipstr1)="1" then ipstr1="00"&ipstr1 'この時点の ipstr1 は IP の最初のセグメントです
ipstr12=checkip_right(ipstr2) 'この時点の ipstr12 は IP の 2 番目のセグメントです
ipstr122=checkip_left(ipstr2)
ipstr13=checkip_right(ipstr122) 'この時点での ipstr13 は IP の 3 番目のセグメントです
ipstr14=checkip_left(ipstr122) 'この時点の ipstr14 は IP の 4 番目のセグメントです
if Len(ipstr14)="1" then ipstr14="00"&ipstr14 '取得した IP の 4 番目のセグメントに 0 を加算します。この手順は不要です。
Len(ipstr14)="2" then ipstr14="0"&ipstr14 の場合
Len(ipstr14)="3" の場合、ipstr14=ipstr14
'response.write ipstr1&"<br>" 'IPセグメント化後の各セグメントの値を書き込みます
'response.write ipstr12&"<br>"
'response.write ipstr13&"<br>"
'response.write ipstr14
allip=ipstr1&"."&ipstr12&"."&ipstr13&"."&ipstr14
終了ヒント=左(allip,11)
dim ipaddr、iplocal、sqls
'次の SQL ステートメントは、startip フィールドの左 11 ビット値がクライアント IP の左 11 ビット値と等しいかどうかを抽出します。
sqls="SELECT country_state,areauser FROM ip WHERE Left(startip,11)='"&finishgetip&"'"
set rs=getaccessrecordset("#worldip.mdb",sqls,"1","1") 'クエリ値を取得します
if rs.eof then 'クライアント IP に等しい値が見つからない場合
showip=checkip_trueip() 'showip にクライアント IP を割り当てます
ipaddr="不明な地域" '国または地方
iplocal="不明な場所" '特定の場所
それ以外
showip=checkip_trueip()
ipaddr=rs("国_州")
iplocal=rs("エリアユーザー")
終了する場合
'response.write("あなたのIPは: "&showip&" ")
'response.write("あなたの出身地: "&ipaddr&" ")
'response.write("あなたは:"&iplocal)
rs.close
rs=何も設定しない
%>
<%="あなたの IP は:"&showip&" "%>
<%="あなたの出身者:"&ipadr&" "%>
<%="あなたは:"&iplocal&"<br>"%>
IP アドレスに誤りがある場合は、私にご連絡いただくか、データベースをダウンロードして修正してください。ありがとうございます。 <br>
<table width="760" border="0" cellpacing="0" cellpadding="0">
<tr>
<td width="203"><a href="Script56.rar">Script56.CHM をダウンロード</a>-->1.34M</td>
<td width="548">概要: VBscript 構文、JScript 構文、正規表現を含む Microsoft のヘルプ ドキュメント </td>
<td width="3"> </td>
<td width="6"> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td><a href="ipsearch.rar">ASP グローバル IP アドレス検索プログラムをダウンロード</a></td>
<td>ASP+ACCESS サイズ 401K 形式 rar</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><font color="#000099"> </font> <font color="#0000FF"> </font></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>IP が不明な場合は、必要に応じて所在地を送信してください:</td>
<td>
<form name="form1" method="post" action="postip.asp">
<table width="100%" border="1" cellpacing="0" cellpadding="0">
<tr>
<td width="21%"> 州: </td>
<td width="44%">
<input type="text" name="country_state">
</td>
<td width="35%"> </td>
</tr>
<tr>
<td width="21%">特定の場所またはネットワーク ユーザー:</td>
<td width="44%">
<input type="text" name="エリアユーザー">
</td>
<td width="35%">例: 北京清華大学または北京ネットコム ユーザー</td>
</tr>
<tr>
<td width="21%"> </td>
<td width="44%">
<input type="hidden" name="startip" value="<%=finishgetip&".000"%>">
<input type="hidden" name="endip" value="<%=finishgetip&".255"%>">
</td>
<td width="35%"> </td>
</tr>
<tr>
<td width="21%"> </td>
<td width="44%">
<input type="submit" name="submit" value="submit">
</td>
<td width="35%"> </td>
</tr>
</テーブル>
</form>
</td>
<td> </td>
<td> </td>
</tr>
</テーブル>
<%
終了する場合
%>
</body>
</html>
デモのアドレス: http://www.knowsky.com/ip