Posso determinar o IP externo de uma máquina com PHP sem depender de serviços externos?

2

Estou trabalhando com uma API que requer o IP externo da máquina. Tanto quanto eu sei, o ambiente PHP que estou usando só pode obter o nosso IP interno.

A opção na tabela está usando um serviço externo, como whatismyip.com, para nos informar:

wget -q -O - http://whatismyip.com/automation/n09230945.asp

Minha preocupação é o que acontece se isso falhar. Existe uma maneira à prova de balas de determinar o IP de uma máquina sem depender de serviços externos?

    
por editor 13.01.2011 / 18:44

5 respostas

3

Não. Porque o NAT é supostamente transparente, o que impede que qualquer coisa seja feita no próprio computador. Você pode apostar (verificar endereços IP em áreas privadas definidas), mas isso também não é à prova de balas.

    
por 13.01.2011 / 18:57
1

Isso seria mais uma pergunta para o StackOverflow, mas eu vou morder de qualquer maneira! Presumindo que não haja Port Forwarding ou balanceamento de carga envolvido, você pode usar a variável $_SERVER['SERVER_ADDR'] para obter o ip em que o script está sendo executado.

Outra pegadinha é que pode não ser o ip do qual as conexões do script estão saindo. Tomemos, por exemplo, se você tiver um servidor com um ip primário de 192.0.2.1 e um ip secundário de 192.0.2.2 para um site SSL no qual o script está sendo executado. Quando você usa a variável acima, o ip retornado será 192.0.2.2, mas quando você cria uma conexão de saída no sciprt, ela será de 192.0.2.1, a menos que você se vincule especificamente ao 192.0.2.2.

    
por 13.01.2011 / 18:52
1

porque você diz interno e externo eu assumo que você usa algum tipo de firewall que faz nat para você. Se este for o caso, é impossível dizer a partir do seu script local que ip você tem, isto porque, uma vez que os pacotes de rede saem da sua caixa, você não pode dizer o que acontecerá.

uma solução simples é usar alguns servidores que são externos (alguns de hospedagem gratuita) ou ter um servidor externo que você chama de php e retorna o endereço ip, como apontou o array SERVER contém essa informação. se você tiver mais de um servidor, pode ligar para o próximo e assim por diante.

    
por 13.01.2011 / 18:58
1

Você poderia configurar outro servidor com um ISP diferente e escrever sua própria versão do whatismyip.com, rodando em hardware que você controla.

    
por 13.01.2011 / 19:33
1

Sua melhor aposta é usar mais de uma fonte externa para suas informações de IP. Além do whatismip, a maioria, se não todos, os provedores de DDNS (por exemplo, DynDNS) têm um serviço similar. Se você não conseguir obter as informações de um site, tente o próximo na lista.

    
por 13.01.2011 / 22:19