Comando para determinar mi IP pública?

Si verifico con Google Puedo ver mi IP pública. ¿Hay algo en la línea de comandos de Ubuntu que me dé la misma respuesta?

Si no está detrás de un enrutador, puede averiguarlo usando ifconfig.

Si está detrás de un enrutador, su computadora no sabrá acerca de la dirección IP pública, ya que el enrutador realiza una traducción de direcciones de red. Puede preguntar en algún sitio web qué está utilizando su dirección IP pública curl o wget y extraiga la información que necesita de ella:

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

o más corto

curl https://ipinfo.io/ip

Para encontrar la IP externa, puede utilizar servicios externos basados en la web o utilizar métodos basados en el sistema. La más fácil es utilizar el servicio externo, también el ifconfig las soluciones basadas en la nube funcionarán en su sistema solo si no está detrás de un NAT. los dos métodos se han discutido a continuación en detalle.

Búsqueda de IP externa mediante servicios externos

La forma más sencilla es utilizar un servicio externo a través de un navegador de línea de comandos o una herramienta de descarga. Ya wget está disponible por defecto en Ubuntu, podemos usarlo.
Para encontrar su IP, use-

$ wget -qO- https://ipecho.net/plain ; echo

Cortesía:

También puedes usar lynx(navegador) o curl en lugar de wget con pequeñas variaciones al comando anterior, para encontrar su IP externa.

Utilizar curl para encontrar la ip:

$ curl https://ipecho.net/plain

Para un mejor uso de salida formateada:

$ curl https://ipecho.net/plain ; echo

Un método más rápido (posiblemente el más rápido) que utiliza dig con OpenDNS como solucionador:

Las otras respuestas aquí van a través de HTTP a un servidor remoto. Algunos de ellos requieren el análisis de la salida, o se basan en el encabezado de agente de usuario para que el servidor responda en texto sin formato. También cambian con bastante frecuencia (bajan, cambian de nombre, colocan anuncios, pueden cambiar el formato de salida, etc.).

  1. El protocolo de respuesta DNS está estandarizado (el formato seguirá siendo compatible).
  2. Históricamente los servicios DNS (OpenDNS, Google Public DNS,..) tienden a sobrevivir mucho más tiempo y son más estables, escalables y, en general, se cuidan mejor que cualquier nueva cadera whatismyip.com El servicio HTTP está de moda hoy en día.
  3. (para aquellos geeks que se preocupan por la microoptimización), este método debería ser inherentemente más rápido (aunque solo sea por unos pocos microsegundos).

Uso de dig con OpenDNS como solucionador:

$ dig +short myip.opendns.com @resolver1.opendns.com111.222.333.444

Copiado de: https://unix.stackexchange.com/a/81699/14497

Encontrar una IP externa sin depender de servicios externos

  • Si conoce el nombre de la interfaz de red

Escribe lo siguiente en tu terminal:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

En lo anterior, reemplace <interface_name> con el nombre de su interfaz real, por ejemplo: eth0, eth1, pp0, sucesivamente...

Ejemplo de Uso:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'111.222.333.444
  • Si no conoce el nombre de la interfaz de red

Escriba lo siguiente en su terminal (esto obtiene el nombre y la dirección IP de cada interfaz de red en su sistema):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

Ejemplo de Uso:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'lo: 127.0.0.1ppp0: 111.222.333.444

N.B.: Los resultados son indicativos y no reales.

Cortesía: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

ACTUALIZAR

  1. LANG=c se ha añadido ifconfig se basa en los usos, de modo que siempre da la salida en inglés, independientemente de la configuración regional.

Mi favorito siempre ha sido :

curl ifconfig.me

simple, fácil de escribir.

Primero tendrás que instalar curl ;)

Si ifconfig.me está abajo intentar icanhazip.com y o ipecho.net

curl icanhazip.com

o

curl ipecho.net

icanhazip.com es mi favorita.

curl icanhazip.com

Puede solicitar IPv4 explícitamente:

curl ipv4.icanhazip.com

Si no tienes curl puedes usar wget en su lugar:

wget -qO- icanhazip.com

He encontrado que todo es molesto y lento, así que escribí el mío. Es simple y rápido.

Su API está activada http://api.ident.me/

Ejemplos:

curl ident.mecurl v4.ident.mecurl v6.ident.me

Diseño técnico: en DNS, ident.me tiene registros A y AAAA, v4.ident.me solo tiene un registro A, y v6.ident.me solo tiene un registro AAAA. Los puertos 443 y 80 en esas IP son atendidos por nginx, con SSL utilizando certificados proporcionados por letsencrypt.org a través de certbot, y con la siguiente configuración (extracto):

server {  […]  server_name .ident.me;  location / {    default_type text/plain;    return 200 $remote_addr;    add_header Access-Control-Allow-Origin "*";    add_header Cache-Control "no-cache, no-store, must-revalidate";  }}

Puede usar una solicitud DNS en lugar de una solicitud HTTP para averiguar su IP pública:

$ dig +short myip.opendns.com @resolver1.opendns.com

Utiliza resolver1.opendns.com servidor DNS para resolver el problema myip.opendns.com nombre de host para su dirección IP.

Servicios de Amazon AWS

curl https://checkip.amazonaws.com

Salida de muestra:

123.123.123.123

También funciona en el navegador: http://checkip.amazonaws.com

Me gusta porque:

  • devuelve solo la IP de texto sin formato en el cuerpo de la respuesta, nada más
  • es de un proveedor conocido que es poco probable que se desconecte pronto

El que estoy usando es :

wget -O - -q icanhazip.com

Sí, puedes tener IP : -)

Escriba esto exactamente, presione Enter donde se indique:

telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
HOST: ipecho.net Enter
BROWSER: web-kitEnter
Enter

Esto envía manualmente una solicitud HTTP, que devolverá su IP en la parte inferior de un HTTP/1.1 200 OK reply

Salida de ejemplo:

$ telnet ipecho.net 80Trying 146.255.36.1...Connected to ipecho.net.Escape character is '^]'.GET /plain HTTP/1.1HOST: ipecho.netBROWSER: web-kitHTTP/1.1 200 OKDate: Tue, 02 Jul 2013 07:11:42 GMTServer: ApacheExpires: Mon, 26 Jul 1997 05:00:00 GMTCache-Control: no-cachePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/htmlf111.222.333.4440

Para esto, ATURDIMIENTO fue inventado. Como cliente, puede enviar una solicitud a un servidor STUN disponible públicamente y hacer que devuelva la dirección IP que ve. Tipo de nivel bajo whatismyip.com ya que no utiliza HTTP ni servidores DNS inteligentemente diseñados, sino el protocolo STUN increíblemente rápido.

Utilizar stunclient

Si usted tiene stunclient instalar (apt-get install stuntman-client en debian / ubuntu) simplemente puede hacer:

$stunclient stun.services.mozilla.comBinding test: successLocal address: A.B.C.D:42541Mapped address: W.X.Y.Z:42541

donde A.B.C.D es la dirección IP de su máquina en la red local y W.X.Y.Z es la dirección IP que los servidores como los sitios web ven desde el exterior (y la que está buscando). Utilizar sed puede reducir la salida anterior a solo una dirección IP:

stunclient stun.services.mozilla.com |    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

Sin embargo, su pregunta era cómo encontrarlo usando la línea de comandos, lo que podría excluir el uso de un cliente STUN. Así que me pregunto...

Utilizar bash

Una solicitud de aturdimiento puede ser artesanal, enviada a un servidor de ATURDIMIENTO externo usando netcat y ser post-procesado usando dd, hexdump y sed así:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |    nc -u -w 2 stun.services.mozilla.com 3478 |    dd bs=1 count=4 skip=28 2>/dev/null |    hexdump -e '1/1 "%u."' |    sed 's/\.$/\n/'

El eco define una solicitud de ATURDIMIENTO binaria (0x0001 indica una Solicitud de enlace) que tiene una longitud de 8 (0x0008) con la cookie 0xc00cee y algunas cosas pegadas de wireshark. Solo los cuatro bytes que representan la IP externa se toman de la respuesta, se limpian y se imprimen.

En funcionamiento, pero no recomendado para uso en producción: -)

PD: Hay muchos servidores STUN disponibles, ya que es una tecnología central para SIP y WebRTC. Usar uno de Mozilla debería ser seguro en cuanto a privacidad, pero también podría usar otro: Lista de servidores de ATURDIMIENTO

“tener IP dinámica”, “SSH usando algún otro sistema a través de Internet”, “el comando que mostrará la IP PÚBLICA actual”. ¿Ves el problema del huevo y la gallina aquí? ¿Cómo podría ejecutar comandos en un servidor remoto sin conocer su dirección? Es posible que le interesen más servicios como no-ip.com / DynDNS.org.

PS ip at DuckDuckGo (sin línea de comandos, pero sin Big Brother G tampoco)

Tal vez esta debería ser una pregunta aparte, pero me gustaría ver una alerta cuando cambie mi dirección IP pública. Por ahora, solo estoy usando las siguientes respuestas en un crontab con notificar-enviar.

no se puede SSH sin conocer la IP pública, amigo mío… DynDNS cuesta mucho y no-ip tough funciona, pero la situación no lo permite… de todos modos, la pregunta ya ha sido respondida… gracias por su sugerencia

excelentes soluciones a continuación. Para Centos use: ‘ifconfig eth1 / sed-nre’ / ^ [ ^ ] + / {N; s / ^ ([^]+).inet * ([ ^ ]+). /\2 / p}" donde eth1 es el dispositivo de red de interés, puede omitir la cadena ’ et1 ’ para mostrar todas las direcciones IP de todos los adaptadores. En lugar de \2, puede escribir \1 \2 para mostrar los nombres de cada adaptador también.

Ninguna de las respuestas muestra el enfoque correcto. Como no tengo la reputación suficiente para publicar una respuesta, publicaré un comentario sobre cómo obtenerla sin depender de servicios externos. Simplemente ejecute en la terminal $ hostname --ip-address