¿Es posible ver mi dirección IP externa sin hacer una solicitud web saliente?

21

Si su conexión es NAT'ed, ¿es posible ver su dirección IP externa sin hacer una solicitud web saliente?

Cualquier sistema operativo (Windows, Linux, etc.) está bien.

Axel Persinger
fuente
77
¿Solo está tratando de evitar HTTP, o está tratando de evitar el envío de tráfico saliente? Las únicas soluciones universales implican enviar algún tipo de tráfico saliente, pero no tiene que ser HTTP.
Spiff
Esto fue más que hipotético, no quería hacer ningún tráfico de salida.
Axel Persinger el
2
¿Está diciendo que su red / enrutador está detrás de una configuración NAT de grado empresarial (es decir, está obteniendo una dirección IP privada de su ISP)? Si es así, no hay forma de que piense que pueda encontrar la dirección IP pública sin que algo llegue a la red pública y esencialmente "mirando hacia atrás" como whatsmyip.com o servicios similares.
acejavelin
El truco que solía hacer era verificar con mi enrutador: en realidad tenía un script realmente sucio para eliminarlo, ya que por alguna razón la mayoría de los servicios basados ​​en la web no detectarían mi IP correctamente. Mi ISP es muy divertido de esa manera.
Journeyman Geek
2
Puede intentar llamar a su ISP con los detalles de su cliente. No requiere conexión a internet ni computadora.
Thomas

Respuestas:

24

Si su computadora está detrás de NAT, es posible que vea la dirección IP externa de su enrutador, pero necesita acceso administrativo al enrutador.

El enrutador conoce su dirección IP externa, por lo que al acceder a su página de configuración puede encontrar esa dirección IP. De esta manera no se requiere ninguna herramienta especializada, excepto un navegador web.

Otros protocolos que requieren una herramienta para obtener la información:

Según lo probado por el usuario @dirkt, todos los métodos solo funcionan con IPv4 (excepto posiblemente para PCP).

harrymc
fuente
La hipérbole de @NicHartley ciertamente puede ser parte del sarcasmo, pero el sarcasmo se trata más de un tono o intento de burla, los cuales se transmiten de manera diferente en forma de texto que en persona. Dicho esto, si bien cualquier protocolo debe usar IP para determinar una dirección IP es un requisito tautológico obvio y sí (ya que no puede determinar lo que no está usando), pero un protocolo construido sobre IP sigue siendo un protocolo diferente y hay teóricamente, se podría usar uno múltiple que logre ese fin. El objetivo de Lightness era contrarrestar la afirmación sobre el requisito de una solicitud web.
Eques
2
"Cualquier otra forma requerirá hacer una solicitud web externa" La web (es decir, HTTP) no es necesaria, pero quizás sea más fácil de entender
eques
1
Como se menciona en la otra respuesta, uPnP, NAT-PMP y PCP son diferentes formas de obtener la información del enrutador además de acceder a su página de configuración. La forma en que lo expresó, parece "además de acceder a la página de configuración, cualquier otra forma requerirá realizar una solicitud web". Correcto es "además de obtener la información del enrutador, cualquier otra forma requerirá un intento de conexión saliente" (no es necesario que sea una solicitud web).
dirkt
@dirkt: para UPnP no estoy convencido; NAT-PMP Creo que solo funciona con IPv4; PCP en la red IPv6 devolverá el prefijo IPv6 y puede hacer mucho más, pero esto generalmente no se implementa en enrutadores comerciales.
harrymc
1
@harrymc: el punto final del servicio UPnP para mi Fritzbox es WANIPConn1/GetExternalIPAddress, y acaba de devolver con éxito la dirección correcta.
dirkt
12

Hay algunas formas en que funcionan con algunos NAT, pero nada garantiza que funcione en todas partes.

Creo que uPnP, NAT-PMP y PCP (Universal Plug And Play, Protocolo de asignación de puertos NAT y Protocolo de control de puertos) tienen formas de preguntarle a una puerta de enlace NAT compatible cuál es la dirección pública, pero no todos los NAT admiten estos protocolos. El soporte es más común en enrutadores de puerta de enlace doméstica que en soluciones NAT corporativas o de nivel de operador.

Cuando te encuentras detrás de un NAT, la única forma segura de ver en qué dirección IP pública está traduciendo tu tráfico es enviar algo de tráfico saliente a algún host público que informará, de una manera que el NAT no traducirá, qué dirección de su tráfico parecía venir. El uso de un servicio basado en la web es una forma, pero también podría hacerlo, por ejemplo, ingresando SSH en una instancia de servidor en la nube y viendo de dónde sshdproviene su sesión SSH.

Spiff
fuente
8
También UPnP, etc. podría dar un resultado falso si el sistema estuviera detrás de NAT doble (o más).
user71659
@ user71659 Me he estado preguntando si existe una dirección de difusión directa que se enrutará automáticamente al NAT más externo de modo que pueda usarse para ese tipo de solicitud.
kasperd el
1
@kasperd Cada NAT piensa que es el NAT más externo. Ciertamente, hay IP que se enrutan automáticamente fuera de todos los NAT. Esos se llaman IP públicas.
user253751
1
@ user20574 No, los NAT no piensan de esa manera, a la mayoría simplemente no les importa. Si se definiera dicha dirección de difusión ilimitada, el estándar también debería definir cuándo un NAT se asigna esa IP a sí mismo y cuándo no. La respuesta a eso es que si la IP externa está en RFC 1918 o RFC 6598, el NAT no se asignará la dirección de difusión individual.
kasperd el
8

Puede usar una solicitud de DNS, que creo que no entraría en la categoría de "solicitud web":

nslookup myip.opendns.com resolver1.opendns.com
Mehrdad
fuente
1
También puedes usar dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns. Encontré el comando aquí: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
kasperd
Tu nsslookupcomando falla por mí. Obtengo Server: resolver1.opendns.com Address: 2620:119:35::35#53 ** server can't find myip.opendns.com: NXDOMAIN
kasperd el
1
@kasperd: Solo funciona para IPv4, lo siento. Lo evité digya que no está en Windows. Sin myaddrembargo, un buen punto con respecto a Google, ¡no estaba al tanto de eso! Supongo que el nslookupequivalente de Windows seríanslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
Mehrdad el
Ejecuté ese comando en una máquina que tiene IPv4 e IPv6, por lo que si realmente fuera compatible con IPv4, debería haber funcionado. Aparentemente, el problema es que no puede indicar nslookupqué versión de IP usar para el transporte, pero la forma en que OpenDNS lo hace significa que debe hacerlo. Sin eso, tendría que predecir qué versión de IP nslookuputilizará para el transporte y solicitar A o AAAA en consecuencia. Si está atascado nslookup, puede usar otro proveedor como Google. Sin embargo, todavía obtienes solo una versión de protocolo en la respuesta y no puedes elegir cuál.
kasperd el
Lo probé nslookup -type=txt o-o.myaddr.l.google.com ns3.google.comy eso sí funciona. Pero si tengo tanto IPv4 como IPv6, eso no me permitirá elegir cuál de ellos puedo ver. Lo más probable es que me muestre la dirección IPv6, y lo más probable es que la esté usando porque quiero saber la dirección IPv4 de un NAT. Para evitarlo, sería necesario utilizar un servicio que tenga un nombre solo IPv4 y un nombre solo IPv6, que también abordaría el problema de NAT64.
kasperd el
7

Me gustaría agregar un punto a las respuestas ya existentes.

También depende de la complejidad de la red. Es posible que su computadora esté ubicada dentro de una red que tiene múltiples direcciones IP externas y el enrutador en algún lugar de la línea envía el tráfico a Internet según algunos criterios: por ejemplo, la dirección IP de destino o la hora del día (puede ser un canal de enlace ascendente es más barato por la noche o por otras razones).

Por lo tanto, para completar, una noción de "dirección IP externa" puede requerir definir un punto de destino al que su dirección sea externa.

En el ejemplo a continuación Router #2podría realizar NAT y enviar tráfico a cualquiera de los enlaces ascendentes y el host receptor podría ver diferentes direcciones IP externas para el Host.

O podría ser que cierto destino (por ejemplo host1.example.com) siempre enruta a través de Uplink A, y el host host2.example.comsiempre enruta a través de Uplink B. Por lo tanto, sus direcciones IP externas, tal como las ven esos hosts, serán diferentes, siempre Uplink Ay cuando Uplink Bsean ISP 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  |
                      -----------

Por lo tanto, el envío de tráfico permitirá obtener resultados más confiables.

VL-80
fuente
4

Puede usar DNS en lugar de HTTP. Por ejemplo, puedes usar:

dig +short TXT o-o.myaddr.l.google.com

Esto mostrará la dirección de unidifusión del servidor DNS que está utilizando, y si es compatible con EDNS, también mostrará su dirección IP, aunque posiblemente truncada.

Para obtener su dirección IP completa, puede omitir su servidor DNS local y enviar la solicitud anterior directamente a ns {1,2,3,4} .google.com

dig +short TXT o-o.myaddr.l.google.com @ns3.google.com

Si desea ver su dirección IP en una versión de protocolo específica, puede usar -6y -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

También puede usar OpenDNS si así lo prefiere. OpenDNS no utiliza registros TXT para esto, sino registros A y AAAA, por lo que debe especificar qué versión de protocolo está buscando:

dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com

Tenga en cuenta que si su tráfico pasa por la traducción del protocolo, puede obtener resultados diferentes o ninguno. Probar desde una máquina detrás de NAT64 Pude ver mi dirección IPv6 con los comandos anteriores pero no la dirección IPv4 de NAT64.

Esta respuesta se basa en estas fuentes 1 2 3 y un poco de investigación propia.

Kasperd
fuente
2

Web generalmente se refiere a HTTP, si ese es el significado de su pregunta, entonces, por ejemplo, podría usar STUN ( Artículo de Wikipedia ) que significa "Utilidades de recorrido de sesión para NAT".

Ahora, como se ha resaltado en un comentario, es posible que tenga varias direcciones IP externas. Además, como las conexiones inalámbricas se están volviendo más comunes (cosa 4G), no es imposible que la dirección IP informada por su enrutador no sea pública. Incluso conocí ese escenario en las conexiones de fibra óptica en algunos países, donde el ISP le daría al enrutador local una IP privada, que luego se traduciría 1: 1 a una IP pública al salir de su red.

Entonces, si su pregunta es "¿puedo encontrar mi IP pública sin enviar paquetes fuera de mi red", PUEDE EN su contexto, pero no hay una solución 100% de prueba.

user1532080
fuente