Pular para o conteúdo

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

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.
Marcos Vinicius Campez markintux
Hits: 9.761 Categoria: PHP Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download confere_ip.php Enviar nova versão

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!";
   
   }
   
?>

Entendendo os operadores de atribuição

Simulado semelhante ao do vol em PHP!

Mostrar Status do ICQ na Web

Micro-script confirmar exclusão

Converter String para Minúsculo

#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

Entre na sua conta para comentar.