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:
- https://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html
- https://ipecho.net/plain
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.).
- El protocolo de respuesta DNS está estandarizado (el formato seguirá siendo compatible).
- 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.
- (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
-
LANG=c
se ha añadidoifconfig
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 80
EnterGET /plain HTTP/1.1
EnterHOST: ipecho.net
EnterBROWSER: web-kit
Enter
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.
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