Como Criar Sua Própria API para Obter o IP Público da Operadora com PHP

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.
Rolar para cima