Saber se acesso a aplicação web é feito pela rede interna ou externa

Publicado por Marcos Vinicius Campez (última atualização em 02/09/2010)

[ Hits: 9.301 ]

Homepage: http://bytelivre.net

Download confere_ip.php




Script que contém uma função que retorna se o usuário acessa a sua aplicação web de modo interno ou externo a rede.

  



Esconder código-fonte

<?php

function ConfereIPExtInt(){
   
   $ip_server = $_SERVER['SERVER_ADDR'];
   $ip_remoto = $_SERVER['REMOTE_ADDR'];
   
   $array_ip_server = explode(".",$ip_server);
   $array_ip_remoto = explode(".",$ip_remoto);
   
   if (($array_ip_server[0] == $array_ip_remoto[0]) || ($array_ip_server[1] == $array_ip_remoto[1])){
   
      return 0; //ip interno
   
   }else{
   
      return 1; //ip externo
   
   }

   
}

//exemplo de uso da função

$var = ConfereIPExtInt();

   if ($var == 0){
   
      echo "Acesso Interno!";
   
   }else{
   
      echo "Acesso Externo!";
   
   }
   
?>

Scripts recomendados

Mega Sena Fake - PHP-GTK

Classe comboBox

Classe para gerar logs

Formulários automáticos

Trasnmitir arrays pelo link


  

Comentários
[1] Comentário enviado por elgio em 07/09/2010 - 20:32h

Amigo. Este script não faz isto que dizes. O que estás "tentando fazer" (mas não fazes) é ver se o primeiro octeto do teu servidor é igual ao primeiro octeto do teu cliente e se o segundo octeto também o é. Ele considerá como sendo local se teu servidor for 10.10.7.6 e o cliente 10.10.200.1.

Para fazer isto o if teria que ser um && (AND) e não um || (OR). Como está ele irá dizer que 10.20.30.4 é da mesma rede que 200.20.3.4!!!!

Ainda teria tantas outras coisas a considerar, pois compara o primeiro e o segundo octeto não é garantia de ser da mesma rede! Sem falar que não testas o HTTP_X_FORWARDED_FOR que tem o IP privado em caso de proxy.

O script está errado (devia ser um &&) e mesmo se estiver certo, não faz o que se propõe. Para ver se é da rede interna teria que se ter a máscara de rede do servidor.

[2] Comentário enviado por markintux em 07/09/2010 - 22:53h

elgio...

realmente a parte do OR e AND tem um erro sim, tanto que corrigi no sistema que eu o utilizo e esqueci de arrumar aqui. Me desculpe... quanto a parte do octeto e tudo mais, eu sei que não é garantia de ser da mesma rede, a mesma coisa me refiro ao HTTP_X_FORWARDED_FOR. Mas foi uma solução que eu encontrei para resolver meus problemas e por enquanto está "quebrando o galho". Caso tenha o jeito correto de se fazer acho que seria muito util então posta-lo aqui para que toda a comunidade possa experimenta-lo.

Obrigado pelo comentário.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts