No ambiente de desenvolvimento, principalmente quando estamos lidando com proxies, NATs ou servidores internos, obter o IP público da operadora pode ser um desafio. Em vez de depender de serviços externos como ipify
ou ipinfo.io
, você pode facilmente criar sua própria API para responder com o IP da operadora de qualquer cliente que acesse seu servidor.
1. Como Funciona o IP Público da Operadora?
Quando você faz uma requisição HTTP para um servidor externo, o IP visível do cliente é o IP público da sua conexão, fornecido pela sua operadora (via NAT ou roteador). Esse IP pode ser diferente do IP privado (como 192.168.x.x
) usado em redes internas.
2. Criando Sua API para Obter o IP Público
A ideia é criar um arquivo PHP simples que será capaz de capturar e exibir o IP público da operadora. Quando um cliente faz uma requisição para essa API, o servidor mostra o IP que foi registrado na requisição, ou seja, o IP de origem.
<?php
// Função para capturar o IP público da requisição
function getPublicIP() {
$services = [
'https://ifconfig.me/ip',
'https://api.ipify.org',
'https://icanhazip.com',
];
// Tentando obter o IP de serviços externos
foreach ($services as $url) {
$ip = @file_get_contents($url);
if ($ip !== false && filter_var(trim($ip), FILTER_VALIDATE_IP)) {
return trim($ip);
}
}
return 'Não foi possível obter o IP público';
}
// Exibe o IP público
echo 'IP público da operadora: ' . getPublicIP();
Explicação do Código:
- A função
getPublicIP
faz uma requisição para três serviços externos (caso um não funcione, tenta o próximo). - Se um IP válido for retornado, ele é exibido. Caso contrário, retorna uma mensagem de erro.
3. Criando Sua Própria API para Exibir o IP Público
Caso prefira hospedar a API em seu próprio servidor, basta criar um arquivo PHP simples, como mostrado abaixo, e acessar o servidor de outro lugar para pegar o IP público.
<?php
header('Content-Type: text/plain');
echo $_SERVER['REMOTE_ADDR'];
Explicação do Código:
- O
$_SERVER['REMOTE_ADDR']
captura o IP da requisição, ou seja, o IP público da operadora.
Você pode então acessar essa API através de uma requisição HTTP de outro servidor, e obter o IP público diretamente:
// Exemplo de chamada para pegar o IP
$ip = file_get_contents('https://seuservidor.com/ip.php');
echo 'O IP público da operadora é: ' . $ip;
4. Adicionando Segurança e Autenticação (Opcional)
Se você quiser adicionar uma camada extra de segurança à sua API, é possível incluir autenticação por token, para garantir que apenas servidores autorizados acessem o serviço.
Exemplo básico de validação por token:
<?php
$token = $_GET['token'] ?? null;
$validToken = 'seu-token-secreto-aqui';
if ($token !== $validToken) {
header('HTTP/1.1 403 Forbidden');
echo 'Acesso negado!';
exit;
}
header('Content-Type: text/plain');
echo $_SERVER['REMOTE_ADDR'];
Para acessar esse endpoint, o cliente precisa passar o token como parâmetro da URL:
https://seuservidor.com/ip.php?token=seu-token-secreto-aqui
5. Logando os IPs Públicos
Se você quiser manter um registro dos IPs que estão acessando sua API, você pode armazená-los em um banco de dados ou arquivo de log.
Exemplo de log simples para salvar em um arquivo:
<?php
$logFile = 'ips.log';
$ip = $_SERVER['REMOTE_ADDR'];
$timestamp = date('Y-m-d H:i:s');
$logMessage = "$timestamp - $ip\n";
// Salva o IP no arquivo de log
file_put_contents($logFile, $logMessage, FILE_APPEND);
echo 'IP público da operadora: ' . $ip;
6. Conclusão
Com esses exemplos, você tem a flexibilidade de criar uma solução própria para capturar o IP público da operadora. Seja para um servidor interno ou externo, você pode controlar totalmente os dados de acesso, integrando a solução ao seu sistema ou plataforma de forma simples e eficiente.
Esse tipo de implementação oferece vantagens:
- Privacidade e controle: você mantém o controle sobre os dados sem depender de terceiros.
- Escalabilidade: você pode customizar o processo para logar, filtrar e analisar os IPs.