< %@LANGUAGE="VBSCRIPT " CODEPAGE="936"%>
<html>
<cabeça>
<title>Documento sem título</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<corpo>
<%
acabamento escurogetip,showip,allip
'////////////////////////////////////////////// /// ////////
'O programa ainda não está muito simplificado e será modificado posteriormente.
'O banco de dados usado por este programa é - "Feng Zhihong" - escrito por - "Punt" - o banco de dados IP incluído no software e
'O "Global IP Address Allocation Table.chm" escrito pelo autor de "Guohua Soft" - "Feng Guohua" - é combinado em um
'Agradeço a "Feng Zhihong" e "Feng Guohua" por fornecer dados
'Ainda existem muitos endereços IP duplicados no banco de dados. Espero que alguém possa excluí-los e reduzir o tamanho do banco de dados.
'Meu programa ainda é muito desajeitado. Espero que todos possam me dar mais opiniões e se comunicar mais. Obrigado!
'////////////////////////////////////////////// /// //////////
'Solução: www.downcodes.com
'O IP do cliente obtido geralmente é 202.11.25.1, e o formato IP no banco de dados é 202.011.025.001, o que requer o obtido
'Converte o IP do cliente para o mesmo formato do IP no banco de dados
'Como o IP que usamos atualmente é dividido em 4 segmentos, cada segmento possui 3 dígitos, separados por "."
'Então minha ideia é dividir o IP do cliente em 4 segmentos com o símbolo ".", ou seja, 202/11/25/1
'Então verifique cada parágrafo separadamente. Se tiver 3 dígitos, permanecerá inalterado; se tiver menos de 3 dígitos, serão 2 dígitos. Adicione 1 0 na frente do parágrafo e será 1. Da mesma forma, adicione 2. 0s.
'Após obter o IP formatado, remova o último segmento do IP, ou seja, pegue os primeiros 11 dígitos incluindo ".", compare com os primeiros 11 dígitos do campo startip no banco de dados, e encontre o mesmo valor
'Porque pode ser visto no banco de dados que os três primeiros segmentos de startip e endip são iguais, e o último segmento é apenas o endereço de sub-rede interno e pode ser removido.
'Portanto, basta pegar os primeiros 11 dígitos de qualquer campo de startip ou endip e compará-los com os primeiros 11 dígitos do IP do cliente para encontrar o local correto.
'////////////////////////////////////////////// /// ///////////////
função checkip_trueip()
'Obtém o IP real do cliente
getclientip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 'Se o cliente usar um servidor proxy, o método Request.ServerVariables("REMOTE_ADDR") só pode obter um valor nulo, então o método ServerVariables("HTTP_X_FORWARDED_FOR") deve ser usado
Se getclientip = "" Então
getclientip = Request.ServerVariables("REMOTE_ADDR")'Se o cliente não usar um proxy, Request.ServerVariables("HTTP_X_FORWARDED_FOR") obterá um valor nulo e o método Request.ServerVariables("REMOTE_ADDR") deverá ser usado
terminar se
checkip_trueip=getclientip
função final
'////////////////////////////////////////////// /// ////////
function getaccessrecordset(db,sql,mark,read)'Obter objeto Recordset
set conn=getaccessconn(db)'Os parâmetros de entrada são o caminho relativo do banco de dados db, instrução sql-SQL, mark, read são métodos de leitura de banco de dados, 1,1 são somente leitura, 1,3 são leitura-gravação
'constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
' conn.open construção
definir getaccessrecordset=server.CreateObject("ADODB.Recordset")
getaccessrecordset.open sql,conn,marca,ler
Função final
'////////////////////////////////////////////// /// ///////////
function getaccessconn(db)'Obtém o objeto de conexão
definir 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 construção
função final
'////////////////////////////////////////////// /// ///////////
dim getip
'getip=(trim(request.ServerVariables("REMOTE_ADDR")))'Obter IP do cliente
'getip=(trim(request.QueryString("comes"))) 'Digite você mesmo o IP para testar
'resposta.Write(getip&"<br>")
'////////////////////////////////////////////// /// ///////////
function checkip_locations(checkstring) 'Retorna a função de localização do caracter delimitador no IP
checkip_locations=Instr(checkstring,".") 'Atribuir o valor da localização à função
função final
'////////////////////////////////////////////// /// ///////////
'A função a seguir é dividir o IP e obter a string restante do IP no lado direito do símbolo "."
função checkip_left(string de verificação)
locations_left=checkip_locations(checkstring) 'Obtém o local onde "." aparece pela primeira vez na string restante do IP
iplength_left=Len(checkstring) 'Obtém o comprimento da string restante do IP
divide_locations_left=iplength_left-locations_left 'Obtém a posição onde "." aparece pela primeira vez na string restante do IP, quantos dígitos existem da direita para a esquerda
ipstr_left=Right(checkstring,divide_locations_left) 'Obtém a string restante do IP no lado direito do símbolo "."
checkip_left=ipstr_left 'Atribuir a string obtida acima para a função
função final
'////////////////////////////////////////////// /// //////////
'A seguinte função é dividir o IP e obter a string IP à esquerda do símbolo "." após cada divisão, ou seja, o IP é dividido em quatro segmentos, e a função da string de cada segmento
é checkip_right(checkstring)
locations_right=checkip_locations(checkstring) 'Obtém o local onde "."
iplength_right=Len(checkstring) 'Obtém o comprimento da string IP
divide_locations_right=iplength_right-locations_right 'Obtém a posição onde "." aparece pela primeira vez na string restante do IP, quantos dígitos existem da direita para a esquerda
ipstr11=Trim(Replace(Left(checkstring,locations_right),".","")) 'Remova o símbolo "." da string à esquerda do "."
'Se o IP for dividido em 4 segmentos e cada segmento tiver menos de 3 dígitos, adicione 0
se Len(ipstr11)="2" então ipstr11="0"&ipstr11
se Len(ipstr11)="3" então ipstr11=ipstr11
se Len(ipstr11)="1" então ipstr11="00"&ipstr11
checkip_right=ipstr11 'Obtém a string antes do símbolo ".", ou seja, um dos quatro segmentos após o IP ser dividido em quatro segmentos.
função final
'//////////////////////////////////////////// /// //////////
'Verifique se o IP é um IP de rede interna
'O julgamento que escrevi é baseado em: 127.0.0.0-127.XXX.XXX.255 e 192.0.0.0-192.XXX.XXX.255. Se forem esses dois, é o IP da rede interna, caso contrário é o IP da rede interna. rede externa.
'Não sei qual é a base para julgar a PI interna, por isso preciso que especialistas me dêem alguns conselhos e façam correções. Entre em contato comigo.
função checkiplocal(string de verificação)
escurecer re1
set re1=new RegExp 'Obter objeto de expressão regular
A expressão em 're1.pattern é que o IP da rede interna deve começar com 127 ou 192, e o meio deve ser qualquer número de 1 a 3 de 0 a 9 mais "."
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 = falso
re1.Ignorecase = falso
checkiplocal=re1.test(string de verificação)
definir re1 = nada
função final
'////////////////////////////////////////////// /// /////////////////////
função checkip_remote(string de verificação)
dim iplength 'O comprimento da string IP
dim locais '"."O local onde o personagem aparece
iplength=Len(verificação)
locations=Instr(checkstring,".") 'Recupera a posição onde o símbolo "." aparece pela primeira vez na string IP da esquerda para a direita.
'Divida o IP em 4 segmentos com caracteres "."
locais2=iplength-locais
ipstring1 = Esquerda (string de verificação, locais)
ipstring2 = Direita (string de verificação, locais2)
função final
'////////////////////////////////////////////// /// ////////
'////////////////////////////////////////////// /// ////////
ipinfo_local="Seu IP é um IP da intranet!"
ipinfo_remote="IP da rede externa!"
getip=checkip_trueip()
currentip=checkiplocal(getip) 'Chama a função checkiplocal() para verificar o IP obtido e determinar se é um endereço de rede interno ou um endereço de rede externo
'se currentip = true então' código de teste
'resposta.Write(ipinfo_local)
se currentip=true então 'é falso
response.Write(ipinfo_local)' indica o IP da rede interna
outro
'Converter
'A seguir está uma extração de loop e preenchimento de bits com 0 para dividir o IP em 4 segmentos
locations=checkip_locations(getip)'Obtém o local onde "." aparece pela primeira vez no IP antes da primeira divisão.
iplength=Len(getip) 'Obtém o comprimento do IP do cliente
divide_locations=iplength-locations 'Obtém a localização do IP do cliente contando da direita para a esquerda até o primeiro "." do IP contando da esquerda para a direita.
ipstr1=Trim(Replace(Left(getip,locais),".",""))
ipstr2=Right(getip,divide_locations)'Obtém o valor restante no lado direito do cliente após a primeira divisão
'Se o IP for dividido em 4 segmentos e cada segmento tiver menos de 3 dígitos, adicione 0
if Len(ipstr1)="2" then ipstr1="0"&ipstr1 'O comprimento é dois, menor que três, adicione um 0 antes da string
if Len(ipstr1)="3" then ipstr1=ipstr1 'De acordo com a analogia acima
if Len(ipstr1)="1" then ipstr1="00"&ipstr1 'O ipstr1 neste momento é o primeiro segmento do IP
ipstr12=checkip_right(ipstr2) 'O ipstr12 neste momento é o segundo segmento do IP
ipstr122=checkip_left(ipstr2)
ipstr13=checkip_right(ipstr122) 'O ipstr13 neste momento é o terceiro segmento do IP
ipstr14=checkip_left(ipstr122) 'O ipstr14 neste momento é o quarto segmento de IP
if Len(ipstr14)="1" then ipstr14="00"&ipstr14 'Adicione 0 ao quarto segmento do IP obtido Esta etapa não é necessária.
se Len(ipstr14)="2" então ipstr14="0"&ipstr14
se Len(ipstr14)="3" então ipstr14=ipstr14
'response.write ipstr1&"<br>" 'Escreve o valor de cada segmento após a segmentação do IP
'response.write ipstr12&"<br>"
'response.write ipstr13&"<br>"
'resposta.write ipstr14
allip=ipstr1&"."&ipstr12&"."&ipstr13&"."&ipstr14
acabamentogetip=esquerda(allip,11)
dim ipaddr,iplocal,sqls
'A seguinte instrução SQL é para extrair se o valor esquerdo de 11 bits do campo startip é igual ao valor esquerdo de 11 bits do IP do cliente
sqls="SELECT country_state,areauser FROM ip WHERE Left(startip,11)='"&finishgetip&"'"
set rs=getaccessrecordset("#worldip.mdb",sqls,"1","1") 'Obtém o valor da consulta
if rs.eof then 'Se nenhum valor igual ao IP do cliente for encontrado
showip=checkip_trueip() 'Atribuir o IP do cliente ao showip
ipaddr="Região desconhecida" 'País ou província
iplocal="Local desconhecido" 'Local específico
outro
showip=checkip_trueip()
ipaddr=rs("estado_país")
iplocal=rs("areauser")
terminar se
'response.write("Seu IP é: "&showip&" ")
'response.write("Você é de: "&ipaddr&" ")
'response.write("Você é:"&iplocal)
rs.fechar
definir rs = nada
%>
<%="Seu IP é:"&showip&" "%>
<%="Você é de:"&ipaddr&" "%>
<%="Você é:"&iplocal&"<br>"%>
Caso haja algum erro no endereço IP, entre em contato comigo ou baixe o banco de dados para correção, obrigado! <br>
<table width="760" border="0" cellpacing="0" cellpadding="0">
<tr>
<td width="203"><a href="Script56.rar">Baixar Script56.CHM</a>-->1,34M</td>
<td width="548">Introdução: documentação de ajuda da Microsoft, incluindo sintaxe VBscript, sintaxe JScript, expressões regulares </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">Baixe o programa de pesquisa de endereço IP global ASP</a></td>
<td>ASP+ACCESS tamanho 401K formato 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>Se o seu IP for desconhecido, envie sua localização se desejar:</td>
<td>
<form name="form1" method="post" action="postip.asp">
<table width="100%" border="1" cellpacing="0" cellpadding="0">
<tr>
<td width="21%"> Província: </td>
<td largura="44%">
<input type="text" name="country_state">
</td>
<td width="35%"> </td>
</tr>
<tr>
<td width="21%">Local específico ou usuário da rede:</td>
<td largura="44%">
<input type="text" name="areauser">
</td>
<td width="35%">Por exemplo: usuários da Beijing Tsinghua University ou da Beijing Netcom</td>
</tr>
<tr>
<td width="21%"> </td>
<td largura="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 largura="44%">
<input type="submit" name="Enviar" value="Enviar">
</td>
<td width="35%"> </td>
</tr>
</tabela>
</form>
</td>
<td> </td>
<td> </td>
</tr>
</tabela>
<%
terminar se
%>
</body>
</html>
Endereço de demonstração: http://www.knowsky.com/ip