Se sua conexão for NAT, é possível ver seu endereço IP externo sem fazer uma solicitação da web de saída?
Qualquer sistema operacional (Windows, Linux etc.) está bem.
Se sua conexão for NAT, é possível ver seu endereço IP externo sem fazer uma solicitação da web de saída?
Qualquer sistema operacional (Windows, Linux etc.) está bem.
Respostas:
Se o seu computador estiver atrás do NAT, é possível ver o endereço IP externo do seu roteador, mas você precisa de acesso administrativo ao roteador.
O roteador conhece seu endereço IP externo; portanto, acessando sua página de configuração, você pode encontrar esse endereço IP. Dessa forma, não é necessária nenhuma ferramenta especializada, exceto um navegador da Web.
Outros protocolos que requerem uma ferramenta para obter as informações:
Conforme testado pelo usuário @dirkt, todos os métodos funcionam apenas com IPv4 (exceto possivelmente para PCP).
WANIPConn1/GetExternalIPAddress
e ele retornou com êxito o endereço correto.
Existem algumas maneiras de trabalhar com alguns NATs, mas nada que funcione em todos os lugares.
Acredito que uPnP, NAT-PMP e PCP (Universal Plug And Play, NAT Port Mapping Protocol e Port Control Protocol) todos têm maneiras de perguntar a um gateway NAT compatível qual é o endereço público, mas nem todos os NATs suportam esses protocolos. O suporte é mais comum em roteadores de gateway doméstico do que em soluções NAT corporativas ou de nível de operadora.
Quando você se encontra atrás de um NAT, a única maneira certa de ver em qual endereço IP público está traduzindo o tráfego é enviar algum tráfego de saída para algum host público que reportará, de uma maneira que o NAT não traduza, o que endereço de onde seu tráfego parecia vir. O uso de um serviço baseado na Web é uma maneira, mas você também pode fazê-lo, digitando, SSHing em uma instância de servidor em nuvem e vendo de onde sshd
vem a sua sessão SSH.
Você pode usar uma solicitação DNS, que eu acredito que não se enquadra na categoria "solicitação da web":
nslookup myip.opendns.com resolver1.opendns.com
dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns
. Encontrei o comando aqui: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
nsslookup
comando falha para mim. Eu recebo Server: resolver1.opendns.com
Address: 2620:119:35::35#53
** server can't find myip.opendns.com: NXDOMAIN
dig
pois não está no Windows. Bom ponto myaddr
para o Google, porém, eu não estava ciente disso! Eu acho que o nslookup
equivalente do Windows serianslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
nslookup
sobre qual versão de IP usar no transporte, mas a maneira como o OpenDNS faz isso significa que você precisa. Sem isso, você teria que prever qual versão IP nslookup
usará para transporte e solicitar A ou AAAA de acordo. Se você está preso, nslookup
pode usar outro provedor como o Google. No entanto, você ainda recebe apenas uma versão do protocolo na resposta e não pode escolher qual.
nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
e isso realmente funciona. Mas se eu tiver o IPv4 e o IPv6, isso não me permitirá escolher qual deles eu vejo. Muito provavelmente ele me mostrará o endereço IPv6 e provavelmente o estou usando porque quero saber o endereço IPv4 de um NAT. Para contornar esse problema, seria necessário usar um serviço que tenha um nome somente IPv4 e um nome somente IPv6, que também resolvesse o problema do NAT64.
Gostaria de acrescentar um ponto às respostas já existentes.
Também depende da complexidade da rede. É possível que o seu computador esteja localizado em uma rede que possua vários endereços IP externos e o roteador em algum ponto da linha envie o tráfego para a Internet com base em alguns critérios: por exemplo, endereço IP de destino ou hora do dia (pode ser um canal de ligação ascendente é mais barato à noite ou por outros motivos).
Portanto, para ser completo, uma noção de "endereço IP externo" pode exigir a definição de um ponto de destino para o qual seu endereço está sendo externo.
No exemplo abaixo, Router #2
poderia executar o NAT e enviar tráfego para os uplinks e o host receptor poderia ver um endereço IP externo diferente para o Host
.
Ou pode ser que um determinado destino (por exemplo host1.example.com
) sempre roteie através do Uplink A
e o host host2.example.com
sempre roteie via Uplink B
. Portanto, seus endereços IP externos, como vistos por esses hosts, serão diferentes, desde que Uplink A
e Uplink B
sejam ISPs diferentes.
Uplink A Uplink B
------------- -------------
| |
| |
| 192.168.1.1 192.168.50.50 |
| ----------- |
|---------------|Router #2|---------------|
-----------
| 192.168.100.1
|
| 192.168.100.2
-----------
|Router #1|
-----------
| 192.168.200.1
|
| 192.168.200.2
-----------
| Host |
-----------
Portanto, o envio de tráfego permitirá obter resultados mais confiáveis.
Você pode usar o DNS em vez do HTTP. Por exemplo, você pode usar:
dig +short TXT o-o.myaddr.l.google.com
Isso mostrará o endereço unicast do servidor DNS que você está usando e, se ele suportar EDNS, também mostrará seu endereço IP, embora possivelmente truncado.
Para obter seu endereço IP completo, você pode ignorar o servidor DNS local e enviar a solicitação acima diretamente para ns {1,2,3,4} .google.com
dig +short TXT o-o.myaddr.l.google.com @ns3.google.com
Se você deseja ver seu endereço IP em uma versão de protocolo específica, pode usar -6
e -4
:
dig -6 +short TXT o-o.myaddr.l.google.com @ns3.google.com
dig -4 +short TXT o-o.myaddr.l.google.com @ns3.google.com
Você também pode usar o OpenDNS, se preferir. O OpenDNS não usa registros TXT para isso, mas sim registros A e AAAA, então você deve especificar qual versão de protocolo está procurando:
dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com
Observe que, se seu tráfego passar pela conversão de protocolo, você poderá obter resultados diferentes ou nenhum. Testando a partir de uma máquina atrás do NAT64, pude ver meu endereço IPv6 com os comandos acima, mas não o endereço IPv4 do NAT64.
Esta resposta é baseada nessas fontes 1 2 3 e em algumas pesquisas minhas.
A Web geralmente se refere ao HTTP, se esse é o significado da sua pergunta, por exemplo, você pode usar STUN ( artigo da Wikipedia ), que significa "Utilitários de transferência de sessão para NAT".
Agora, como foi destacado em um comentário, você pode ter vários IPs externos. Além disso, como as conexões sem fio estão se tornando mais comuns (coisa 4G), não é impossível que o endereço IP relatado pelo seu roteador não seja público. Até conheci esse cenário em conexões de fibra óptica em alguns países, onde o ISP daria ao roteador local um IP privado, que seria traduzido 1: 1 para um IP público mais tarde ao sair da rede.
Portanto, se sua pergunta for "posso encontrar meu IP público sem enviar pacotes para fora da minha rede", você PODE no seu contexto, mas não há uma solução 100% à prova.