Mi Dirección IP
Uso de la terminal y del entorno del sistema
Habla solo de cómo usar la terminal: para cada “variante común” proporciona el comando + explica qué problema resuelve (pila de protocolos, formato de salida, tiempos de espera, reintentos, significado de las rutas).
macOS / Linux / Raspberry Pi / BSD
Las necesidades más comunes en la terminal son: la salida debe ser limpia (una línea que se pueda copiar/escribir/comparar) y los scripts no deben quedarse colgados. Por eso, las recomendaciones aquí incluyen por defecto: modo silencioso (sin “ensuciar” la salida) + HTTPS (evitar el protocolo equivocado) + tiempos de espera según sea necesario (evitar bloqueos).
Uso básico (el más recomendado)
curl -4 my.ipin.io
C:\Users\admin>curl -4 my.ipin.io
171.83.40.149
-s: Desactiva la barra de progreso/avisos para que la salida sea más “pura” (evita ruido en scripts).https://: Muy recomendable escribir el esquema completo para evitar que algunos entornos usen http por defecto y provoquen redirecciones/intercepción/problemas de política de puertos.- Ruta raíz
/: Devuelve estrictamente IPv4; si no se puede obtener IPv4, falla (evita confundir IPv6 con IPv4).
Variantes comunes (el conjunto más usado en ingeniería real)
# A1) Solo IPv6 (para validar/depurar IPv6)
curl -s https://my.ipin.io/v6
# A2) Resumen de ubicación (salida de texto más legible en terminal)
curl -s https://my.ipin.io/info
# A3) Forzar JSON en terminal (cambiar el UA a no-curl)
curl -s -A "Mozilla/5.0" https://my.ipin.io/info
# A4) Forzar IPv4 / forzar IPv6 (diagnosticar qué pila usa realmente el sistema al conectar)
curl -s -4 https://my.ipin.io
curl -s -6 https://my.ipin.io/v6
# A5) Añadir tiempos de espera (imprescindible en scripts: evita que el jitter de red bloquee)
curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io
# A6) Añadir reintentos (red débil / jitter ocasional: se recomienda 1–2)
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info
Explicación de variantes (lo que realmente necesitas saber)
/v6: A nivel de endpoint devuelve solo IPv6; se usa para “verificar explícitamente si IPv6 está disponible”./info: A nivel de endpoint devuelve IP + campos de ubicación; es una salida más legible en terminal, adecuada para “confirmar a simple vista el egress”.-A "Mozilla/5.0": Control del formato de salida. Por defecto, el UA de curl contiene curl → el servicio devuelve texto; al cambiar el UA → el servicio devuelve JSON.-4/-6: Fuerza la pila de protocolos a nivel de conexión (el cliente solo conecta por v4/v6), se usa a menudo para localizar “por qué siempre termino usando v6”.--connect-timeout: Solo controla la fase de “establecimiento de conexión”; si el handshake/conexión va lento, se corta aquí.--max-time: Límite superior del tiempo total de la petición; lo más importante en automatización (evita bloqueos).--retry: Aumenta la tasa de éxito, pero se recomienda pocos reintentos (1–2). Demasiados reintentos ralentizan la tarea y amplifican fallos.
Android (Termux)
Problemas comunes en Termux: la red móvil tiene más jitter, el enlace es más complejo y la selección de pila de protocolos es menos estable. Por eso se recomienda por defecto: pila fija + tiempos de espera + reintentos cuando haga falta.
Uso básico (recomendado)
curl -s -4 --connect-timeout 5 --max-time 10 https://my.ipin.io
Variantes comunes
# B1) Resumen de ubicación (confirmar rápidamente la ubicación de salida)
curl -s https://my.ipin.io/info
# B2) Verificación de IPv6 (solo cuando quieras probar IPv6 explícitamente)
curl -s -6 https://my.ipin.io/v6
# B3) Red débil: pocos reintentos
curl -s --retry 2 --connect-timeout 5 --max-time 10 https://my.ipin.io
Explicación de variantes
-4: Si quieres IPv4 de forma explícita, fíjalo para evitar que el entorno priorice IPv6 y el resultado “derive”./info: Es habitual que la red móvil cambie el egress; usarlo para confirmar la ubicación esperada es lo más directo.- Estrategia de reintentos: Los timeouts ocasionales son comunes en redes móviles; pocos reintentos mejoran notablemente la tasa de éxito.
Windows (CMD / PowerShell)
En Windows conviene separar los casos de uso: CMD/batch se orienta a “obtener una línea de texto”; PowerShell se orienta a “obtener JSON y parsear campos directamente”.
Uso básico (texto: una línea con la IP)
curl.exe -s https://my.ipin.io
Variantes comunes
# C1) Resumen de ubicación (legible en terminal)
curl.exe -s https://my.ipin.io/info
# C2) PowerShell obtiene JSON (ideal para scripts que parsean campos)
Invoke-RestMethod -Uri "https://my.ipin.io/info"
# C3) Verificación de IPv6
curl.exe -s https://my.ipin.io/v6
# C4) Diagnóstico de conexión (DNS, handshake, motivo de timeouts; salida larga)
curl.exe -v https://my.ipin.io/info
Explicación de variantes
Invoke-RestMethod: Ideal para escenarios JSON; te ahorra parseo manual.-v: Solo para diagnóstico. Imprime mucha información de depuración; no lo habilites por defecto en scripts.- Fuentes comunes de problemas: proxy del sistema, gateway corporativo, reescritura de DNS o reglas de hosts pueden hacer que “el mismo comando” se comporte distinto según la máquina.
iOS (iSH / Terminales ligeros)
Los terminales ligeros a menudo solo tienen wget. Nota: el UA por defecto de wget normalmente no incluye curl, así que muchas veces obtendrás JSON.
Si quieres “una línea de texto”, debes establecer el UA explícitamente para activar la salida de texto de terminal.
Uso básico
wget -qO- https://my.ipin.io
Variantes comunes
# D1) Resumen de ubicación
wget -qO- https://my.ipin.io/info
# D2) Forzar texto plano (una línea con la IP)
wget -qO- -U "curl/8" https://my.ipin.io
# D3) Forzar JSON (integración estable)
wget -qO- -U "Mozilla/5.0" https://my.ipin.io/info
Explicación de variantes
-qO-: Silencioso + salida a stdout, fácil de procesar en scripts.-U: El interruptor clave para controlar el formato de salida (UA contiene curl → texto; UA no-curl → JSON).
OpenWRT / Dispositivos embebidos
El objetivo central en dispositivos embebidos es: no quedarse colgado. Así que hay que establecer tiempos de espera. Al hacer “detección de cambios de IP pública”, también evita falsos positivos: un fallo de petición no significa que la IP haya cambiado.
Uso básico (con timeout)
wget -qO- --timeout=10 https://my.ipin.io
Variantes comunes
# E1) Resumen de ubicación (autocomprobación del egress)
wget -qO- --timeout=10 https://my.ipin.io/info
# E2) Forzar texto plano (una línea con la IP)
wget -qO- --timeout=10 -U "curl/8" https://my.ipin.io
Explicación de variantes
--timeout: Muy recomendable por defecto en embebidos para evitar que tareas programadas se queden colgadas.- Modo de salida estable: wget puede devolver JSON por defecto; si tu script solo quiere una línea con la IP, disparar la salida de texto vía UA es más estable.
Docker / CI / Tareas automatizadas
En automatización hay más incertidumbre: fluctuaciones de DNS, timeouts breves y cambios de política de egress son más comunes. Recomendación por defecto: timeouts + pocos reintentos + formato de salida fijo (evita que el parseo falle en distintos runners).
Uso básico (con timeouts)
curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io
Variantes comunes (las más útiles en CI)
# F1) Obtener ubicación de forma estable (con reintentos)
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info
# F2) CI quiere JSON estable: fija el UA a no-curl
curl -s -A "Mozilla/5.0" --connect-timeout 3 --max-time 8 https://my.ipin.io/info
# F3) Diagnóstico: forzar pila de protocolos
curl -s -4 https://my.ipin.io
curl -s -6 https://my.ipin.io/v6
Explicación de variantes
- Fijar el UA: En CI, distintos contenedores/herramientas pueden tener UAs distintos; al fijarlo, el formato no “deriva”.
- Pocos reintentos: Mejora la tasa de éxito, pero los fallos deben seguir saliendo rápido (para diagnosticar mejor).
Preguntas frecuentes (FAQ)
Q1: Uso curl -s https://my.ipin.io — ¿por qué a veces falla o devuelve un error?
La ruta raíz es “IPv4 estricto”: si el enlace actual no puede obtener IPv4, falla de forma explícita (en lugar de “hacer como que” funciona con un IPv6). Esto suele ocurrir en: redes solo IPv6, ciertos entornos de proxy/gateway, o cuando tu cliente está forzado a usar IPv6 y no hay IPv4 utilizable en la ruta.
Cómo diagnosticar: usa curl -s -4 para forzar IPv4; o usa /info para ver cuál es la IP de salida actual y decidir el siguiente paso.
Q2: Solicito /info con curl — ¿por qué no es JSON?
Porque las herramientas de terminal usan por defecto el “modo de salida de terminal”, y /info en ese modo devuelve un cuadro de texto más legible.
Si quieres JSON (para jq/parseo por programa), cambia el UA a uno que no sea curl.
curl -s -A "Mozilla/5.0" https://my.ipin.io/info
Q3: ¿Por qué el mismo comando da formatos distintos en distintas máquinas?
El formato de salida depende del User-Agent de la solicitud. Distintas herramientas (curl / wget / herramientas incluidas por la distro) pueden tener UAs por defecto distintos,
lo que provoca diferencias entre respuestas de texto y JSON.
Solución: fija el UA. Si quieres texto, haz que el UA contenga curl; si quieres JSON, haz que el UA no contenga curl. Para automatización/CI, fijar el UA es clave para un “parseo estable”.
Q4: ¿Por qué quiero solo IPv4, pero siento que “salí por IPv6”?
Hay que distinguir dos cosas:
la pila usada al conectar (el cliente elige v4/v6 para conectar),
y el tipo de IP devuelto por el endpoint (determinado por la ruta / o /v6).
Recomendación de diagnóstico: usa -4/-6 para forzar la pila de conexión y confirmar qué ruta prefiere realmente tu red.
Si solo quieres IPv4, usa la ruta raíz y fuerza -4 cuando sea necesario.
Q5: ¿Cómo debería escribirlo en scripts para evitar falsos positivos y que no se quede colgado?
Combinación recomendada: silencioso (evitar ruido), timeouts (evitar bloqueos), pocos reintentos (resistir jitter), y no sobrescribir el valor anterior si falla (no confundir fallo con cambio).
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io
Q6: ¿Debería usar antes curl o wget?
Si puedes, usa curl: más parámetros y mejor para diagnóstico. Pero en entornos ligeros/embebidos es común tener solo wget; wget está bien. Lo clave es: establecer timeouts, sacar por stdout y, si hace falta, fijar el UA para bloquear el formato de salida.