< %@LANGUAGE="VBSCRIPT " CODEPAGE="936"%>
<html>
<머리>
<title>제목 없는 문서</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<본문>
<%
희미한 마무리getip,showip,알립
'/////////////////////////////////////////////// /// ////////
'프로그램은 아직 매우 간소화되지 않았으며 나중에 수정될 예정입니다.
'이 프로그램에서 사용하는 데이터베이스는 - "Feng Zhihong" - 작성자 - "Punt" - 소프트웨어에 포함된 IP 데이터베이스이며
'Guohua Soft'의 저자인 'Feng Guohua'가 작성한 'Global IP Address Allocation Table.chm'이 하나로 통합되었습니다.
'데이터를 제공해 주신 '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 자리 미만이면 2 자리가됩니다. 단락 앞에 0을 추가하면 1이됩니다. 0초.
'포맷된 IP를 가져온 후 IP의 마지막 세그먼트를 제거합니다. 즉, "."을 포함한 처음 11자리를 가져와서 데이터베이스의 startip 필드의 처음 11자리와 비교하여 동일한 값을 찾습니다.
'startip과 endip의 처음 세 세그먼트가 동일하고 마지막 세그먼트는 내부 서브넷 주소일 뿐이므로 제거할 수 있다는 것을 데이터베이스에서 볼 수 있기 때문입니다.
'따라서 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
함수 종료
'/////////////////////////////////////////////// /// ////////
함수 getaccessrecordset(db,sql,mark,read)'레코드세트 개체 가져오기
set conn=getaccessconn(db)'입력 매개변수는 db-database의 상대 경로, sql-SQL 문, mark, read는 데이터베이스 읽기 방법, 1,1은 읽기 전용, 1,3은 읽기-쓰기입니다.
'constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
' conn.open constr
getaccessrecordset=server.CreateObject("ADODB.Recordset") 설정
getaccessrecordset.open sql,conn,mark,read
기능 종료
'/////////////////////////////////////////////// /// ///////////
함수 getaccessconn(db)'연결 개체 가져오기
getaccessconn=server.CreateObject("ADODB.Connection") 설정
'constr="DRIVER={MICROSOFT 액세스 드라이버(*.MDB)};DBQ="&SERVER.MAPPATH("allcon/#bbsall.mdb")
constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
getaccessconn.open 구성
함수 종료
'/////////////////////////////////////////////// /// ///////////
희미한 getip
'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(체크스트링)
Locations_left=checkip_locations(checkstring) 'IP의 나머지 문자열에서 "."이 처음 나타나는 위치를 가져옵니다.
iplength_left=Len(checkstring) 'IP의 나머지 문자열 길이를 가져옵니다.
Divide_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)입니다.
Locations_right=checkip_locations(checkstring) 'IP에서 "."이 처음 나타나는 위치를 가져옵니다.
iplength_right=Len(checkstring) 'IP 문자열 길이를 가져옵니다
Divide_locations_right=iplength_right-locations_right 'IP의 나머지 문자열에서 "."이 처음 나타나는 위치를 가져오고 오른쪽에서 왼쪽으로 몇 자리가 있는지 확인합니다.
ipstr11=Trim(Replace(Left(checkstring,locations_right),".","")) '얻어진 "."의 왼쪽에 있는 문자열에서 "." 기호를 제거합니다.
'IP를 4개의 세그먼트로 나누고 각 세그먼트가 3자리 미만인 경우 0을 추가합니다.
Len(ipstr11)="2"이면 ipstr11="0"&ipstr11
Len(ipstr11)="3"이면 ipstr11=ipstr11
Len(ipstr11)="1"이면 ipstr11="00"&ipstr11
checkip_right=ipstr11 '"." 기호 앞의 문자열, 즉 IP 뒤의 4개 세그먼트 중 하나를 4개의 세그먼트로 나눕니다.
함수 종료
'////////////////////////////////////////////// /// //////////
'해당 IP가 내부 네트워크 IP인지 확인하세요.
'제가 작성한 판단은 127.0.0.0-127.XXX.XXX.255와 192.0.0.0-192.XXX.XXX.255를 기준으로 합니다. 이 둘이면 내부 네트워크 IP이고, 그렇지 않으면 입니다. 외부 네트워크.
'내부 IP를 판단하는 기준이 무엇인지 모르기 때문에 전문가의 조언과 수정이 필요합니다.
함수 checkiplocal(체크스트링)
희미한 RE1
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(체크스팅)
sites=Instr(checkstring,".") 'IP 문자열에서 "." 기호가 처음 나타나는 위치를 왼쪽에서 오른쪽으로 검색합니다.
'문자를 사용하여 IP를 4개의 세그먼트로 분할합니다.
Location2=iplength-위치
ipstring1=왼쪽(검사문자열,위치)
ipstring2=오른쪽(검사문자열,위치2)
함수 종료
'/////////////////////////////////////////////// /// ////////
'/////////////////////////////////////////////// /// ////////
ipinfo_local="귀하의 IP는 인트라넷 IP입니다!"
ipinfo_remote="외부 네트워크 IP입니다!"
getip=checkip_trueip()
currentip=checkiplocal(getip) 'checkiplocal() 함수를 호출하여 획득한 IP를 확인하여 내부 네트워크 주소인지 외부 네트워크 주소인지 확인
'현재ip=true이면' 테스트 코드
'응답.쓰기(ipinfo_local)
currentip=true이면 'false'입니다.
response.Write(ipinfo_local)'은 내부 네트워크 IP를 나타냅니다.
또 다른
'전환하다
'다음은 IP를 4개의 세그먼트로 나누기 위해 루프 추출 및 0으로 비트 채우기입니다.
Locations=checkip_locations(getip)'첫 번째 분할 전 IP에 "."이 처음 나타나는 위치를 가져옵니다.
iplength=Len(getip) '클라이언트 IP 길이를 가져옵니다
Divide_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의 두 번째 세그먼트입니다.
ipstr122=checkip_left(ipstr2)
ipstr13=checkip_right(ipstr122) '이때 ipstr13은 IP의 세 번째 세그먼트입니다.
ipstr14=checkip_left(ipstr122) '이때 ipstr14는 IP의 네 번째 세그먼트입니다.
if Len(ipstr14)="1" then ipstr14="00"&ipstr14 '얻은 IP의 네 번째 세그먼트에 0을 추가합니다. 이 단계는 필요하지 않습니다.
Len(ipstr14)="2"이면 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
마무리getip=왼쪽(알립,11)
희미한 ipaddr,iplocal,sqls
'다음 SQL 문은 startip 필드의 왼쪽 11비트 값이 클라이언트 IP의 왼쪽 11비트 값과 같은지 여부를 추출하는 것입니다.
sqls="SELECT country_state,areauser FROM IP WHERE 왼쪽(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.닫기
rs=아무것도 설정하지 않음
%>
<%="귀하의 IP는 다음과 같습니다:"&showip&" "%>
<%="귀하는 출신지:"&ipaddr&" "%>
<%="귀하는:"&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+액세스 크기 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 너비="44%">
<input type="text" name="국가_주">
</td>
<td width="35%"> </td>
</tr>
<tr>
<td width="21%">특정 위치 또는 네트워크 사용자:</td>
<td 너비="44%">
<input type="text" name="areauser">
</td>
<td width="35%">예: Beijing Tsinghua University 또는 Beijing Netcom 사용자</td>
</tr>
<tr>
<td width="21%"> </td>
<td 너비="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 너비="44%">
<input type="submit" name="제출" value="제출">
</td>
<td width="35%"> </td>
</tr>
</table>
</form>
</td>
<td> </td>
<td> </td>
</tr>
</table>
<%
종료하면
%>
</body>
</html>
데모 주소: http://www.knowsky.com/ip