É possível ver meu endereço IP externo sem fazer uma solicitação da web de saída?

21

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.

Axel Persinger
fonte
7
Você está apenas tentando evitar o HTTP ou está tentando evitar o envio de qualquer tráfego de saída? As únicas soluções universais envolvem o envio de algum tipo de tráfego de saída, mas não precisa ser HTTP.
Spiff
Isso foi mais do que apenas hipotético, eu não queria fazer nenhum tráfego de saída.
Axel Persinger
2
Você está dizendo que sua rede / roteador está atrás de uma configuração NAT de nível corporativo (ou seja, está obtendo um endereço IP privado do seu ISP)? Nesse caso, não tenho como pensar que você pode encontrar o endereço IP público sem que algo chegue à rede pública e essencialmente "olhando para trás", como whatsmyip.com ou serviços semelhantes.
Acejavelin 1/11
o truque que eu costumava fazer era verificar com o meu roteador - eu realmente tinha um script muito sujo para raspar que, por alguma razão, a maioria dos serviços baseados na Web não detectava meu IP corretamente. Meu ISP é realmente divertido assim.
Journeyman Geek
2
Você pode tentar ligar para o seu ISP com os detalhes do seu cliente. Não requer conexão com a internet e nenhum computador.
Thomas Thomas

Respostas:

24

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).

harrymc
fonte
A hipérbole do @NicHartley certamente pode fazer parte do sarcasmo, mas o sarcasmo é mais sobre um tom ou intenção de zombar, os quais são transmitidos de maneira diferente em forma de texto do que em pessoa. Dito isto, enquanto qualquer protocolo deve usar o IP para determinar um endereço IP é um requisito óbvio e sim tautológico (já que você não pode determinar o que não está usando), mas um protocolo construído sobre o IP ainda é um protocolo diferente e existem teoricamente múltiplo alguém poderia usar o que realiza esse fim. O objetivo do Lightness era contestar a reivindicação sobre o requisito de uma solicitação da Web.
eques
2
"Qualquer outra forma será necessário fazer uma solicitação da Web externo" Web (ou seja, HTTP) não é necessária, mas mais fácil talvez para agarrar
eques
11
Como mencionado na outra resposta, uPnP, NAT-PMP e PCP são maneiras diferentes de obter as informações do roteador, além de acessar sua página de configuração. Do jeito que você expressou, parece "além de acessar a página de configuração, qualquer outra maneira exigirá fazer uma solicitação na web". Correto é "além de obter as informações do roteador, qualquer outra maneira exigirá uma tentativa de conexão de saída" (não precisa ser uma solicitação da Web).
dirkt 3/11
@dirkt: Para UPnP, não estou convencido; NAT-PMP, acho que só funciona com IPv4; O PCP na rede IPv6 retornará o prefixo IPv6 e pode fazer muito mais, mas isso geralmente não é implementado em roteadores comerciais.
harrymc
11
@harrymc: O ponto final do serviço UPnP para o meu Fritzbox é WANIPConn1/GetExternalIPAddresse ele retornou com êxito o endereço correto.
dirkt 3/11
12

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 sshdvem a sua sessão SSH.

Spiff
fonte
8
Além disso, o UPnP, etc., poderia dar um resultado falso se o sistema estivesse atrás de NAT duplo (ou mais).
precisa saber é o seguinte
@ user71659 Gostaria de saber se existe um endereço anycast que será roteado automaticamente para o NAT mais externo, de modo que possa ser usado para esse tipo de solicitação.
kasperd
11
@kasperd Todo NAT pensa que é o NAT mais externo. Certamente existem IPs que são roteados automaticamente fora de todos os NATs. Esses são chamados IPs públicos.
precisa saber é o seguinte
11
@ user20574 Não, os NATs não pensam assim, a maioria simplesmente não se importa. Se esse endereço anycast fosse definido, o padrão também precisaria definir quando um NAT atribui esse IP a si próprio e quando não. A resposta é se o IP externo estiver na RFC 1918 ou na RFC 6598, o NAT não atribuirá o endereço anycast a si próprio.
kasperd
8

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
Mehrdad
fonte
11
Você também pode usar 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/…
kasperd
Seu nsslookupcomando falha para mim. Eu recebo Server: resolver1.opendns.com Address: 2620:119:35::35#53 ** server can't find myip.opendns.com: NXDOMAIN
kasperd
11
@kasperd: Funciona apenas para IPv4, desculpe. Eu evitei, digpois não está no Windows. Bom ponto myaddrpara o Google, porém, eu não estava ciente disso! Eu acho que o nslookupequivalente do Windows serianslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
Mehrdad
Eu executei esse comando em uma máquina que possui IPv4 e IPv6; portanto, se realmente suportasse o IPv4, ele deveria ter funcionado. Aparentemente, o problema é que você não pode instruir nslookupsobre 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 nslookupusará para transporte e solicitar A ou AAAA de acordo. Se você está preso, nslookuppode 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.
kasperd
Eu testei nslookup -type=txt o-o.myaddr.l.google.com ns3.google.come 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.
kasperd
7

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 #2poderia 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 Ae o host host2.example.comsempre roteie via Uplink B. Portanto, seus endereços IP externos, como vistos por esses hosts, serão diferentes, desde que Uplink Ae Uplink Bsejam 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.

VL-80
fonte
4

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 -6e -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.

Kasperd
fonte
2

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.

user1532080
fonte