Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leanderson

Bloquear acesso internacional

Recommended Posts

Eu gostaria de saber se alguém poderia me ajudar com um script para bloquear o acesso de visitantes de outros paises no meu site, quero que so visitantes do brasil possam ter acesso, alguém ajuda ae?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Checa se os ips são brasileiros ou não!

Pra isso,pega o ip com getenv remote addr,da explode nos . e checa o primeiro indice do array (0).

Se for tal,é brasileiro,tem acesso,se não,não é e não tem.

Não sei bem distinguir ips brasileiros,mas os mais comuns começam com 200,201,192,189, sei lá.

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando ERs fica bem mais fácil.

basta um preg_match() na string do IP. Nem precisa de explode(). Faz a verificação com um único if.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim ^^...

Só lembro das ERs quando num precisa...salkpslaksoa

Boa beraldo!

Pode usar também,strstr ou substrcount.

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...verdade...

Com ERs...é o melhor jeito mesmo...só to dizendo que existem otros modos saca?

Dá pra percorrer os 3 primeiros caracteres da string,checar se batem...entre outros modos.

Mas o mais recomendado,creio que seja usando ERs mesmo.

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fico um poco porca minha ER...os entendidos,dêem uma melhorada.Mais eis:

<?php
$ip = getenv('remote_addr');
if(preg_match('((([127])|([192])|([200-201])|([189]))(\.([0-255])\.([0-255])\.[0-255]))',$ip)){
	echo "brasileiro";
} else {
	echo "internacional";
}
?>

Abraço!

 

Ps:coloquei o 127 pra você poder testar de local.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado, o estranho é que todo mundo que acessa aparece internacional, e vi que meu ip esta dentro da faixa que você colocou, começa com 189, o que será que ta dando errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tinha feito com poca atenção...=/

Minha ER tava errada então...eis uma mais porca mais provavelmente funcional:

<?php
$ip = getenv('remote_addr');
if(preg_match('(([192]\.([0-255])\.([0-255])\.[0-255])|([200-201]\.([0-255])\.([0-255])\.[0-255])|([189]\.([0-255])\.([0-255])\.[0-255])|([127]\.([0-255])\.([0-255])\.[0-255]))',$ip)){
	echo "brasileiro";
} else {
	echo "internacional";
}
?>

Ta mega porca!Se quiser,depois ajeito...

Testai!

Abraço!

 

Edit:ajeitada:

<?php
$ip = getenv('remote_addr');
if(preg_match('(([189]|[200-201]|[192]|[127])\.[0-255]\.[0-255]\.[0-255])',$ip)){
	echo "brasileiro";
} else {
	echo "internacional";
}
?>

Testa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Argr...to lixao...me desculpa...falta de atenção extrema...eis:

<?php
//$ip = "189.251.212.123"; - deu certo
$ip = getenv('remote_addr');
if(preg_match('(189|200|201|192|127\.[0-255]\.[0-255]\.[0-255])',$ip)){
	echo "brasileiro";
} else {
	echo "internacional";
}
?>

Ou:

//$ip = "189.251.212.123"; - deu certo
$ip = getenv('remote_addr');
if(preg_match('([189]|[200-201]|[192]|[127]\.[0-255]\.[0-255]\.[0-255])',$ip)){
	echo "brasileiro";
} else {
	echo "internacional";
}
?>

Teste deu certo...na real também vai dar...

Todo mundo erra!Sorry!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mto obrigado, deu certinho, agora uma pergunta, se eu por isso na index.php não vai ser suficiente não é? porque se o cara descobrir outro link ele abrirá normal, tem como contornar isso para que nada abra para internacional? ou vou ter q colocar isso em todas as paginas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correto!

Acho que tem como impedir pelo htacess,com o deny,mas ai é com outro!

Tenta colocar isso em um htaccess,ou modificar no proprio httpd:

#Alterar se desejar
	Order allow,deny
	Allow from 127
	Allow from 189
	Allow from 192
	Allow from 200
	Allow from 201

Testei aqui e deu certo!

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para constar, as listas (colchetes) em expressão regular casam caracteres, ou seja, [0-255] irá casar tudo de 0 a 2, 5 ou 5. A mesma coisa para [189], [200-201].

 

Pelo IP Address Location dá pra ver a faixa de IPs brasileiros.

 

[]'s http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo...desculpe mais você está incorreto.

Colocar [189] é o mesmo que colocar 189,não vai casar de 0 a 189,e sim o que bater com 189.

Testai:

<?php
$ip = 10;
if(preg_match('[12]',$ip)){
	//Não entra
	echo "ER retornando:0-12";
} else {
	//Entra
	echo "ER retornando numeral 12 apenas";
   if(preg_match('[10]',$ip)){
	   echo nl2br("\n")."Retorna numeral 10";
   } else {
	   //Nunca entra aqui
   }
}
?>

Abraço!

 

Ps:acho que fazer pelo htacess vai lhe dar certa facilidade...

Ps²:paulo,coloquei de 0 a 255,pode ser exagero...mas vai

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Paulo está certo.

Pode testar:

 

$ip1 = "200.255";
$ip2 = "201.155";

if ( preg_match("[200-201]", $ip1) )
{
	echo "casou IP1";
}
else
{
	echo "não casou IP1";
}


if ( preg_match("[200-201]", $ip2) )
{
	echo "casou IP2";
}
else
{
	echo "não casou IP2";
}

A ER não casa nenhum dos IPs.

Tem que usar grupos, com o OU (|) -> (200|201)

 

 

Eu faria assim:

if ( preg_match("/^(189|200|201|192|127)(\.[0-9]{1,3}){3}$/", $ip) )
{
	echo "casou";
}
else
{
	echo "Não casou";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sim...ai sim ^^

Beraldo...minha ER fico horrivel...

leanderson...testa a do beraldo ^^

 

Ps:pelo htacces...mais prático

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.