¿Cómo puedo obtener mi dirección IP externa en un script de shell?

252

Necesito encontrar mi dirección IP externa desde un script de shell. En este momento utilizo esta función:

myip () { 
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}

Pero depende de perl-libwww , perl-html-format , perl-html-tree instalado. ¿De qué otras maneras puedo obtener mi IP externa?

    
pregunta Eugene Yarmash 14.10.2011 - 16:40

23 respuestas

399

Recomiendo obtenerlo directamente desde un servidor DNS.

La mayoría de las respuestas aquí van de HTTP a un servidor remoto. Algunos de ellos requieren el análisis de la salida, o confían en el encabezado User-Agent para que el servidor responda en texto sin formato. También cambian con bastante frecuencia (ir hacia abajo, cambiar su nombre, publicar 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 de DNS ( OpenDNS , Google Public DNS , ...) sobreviven por mucho más tiempo y son más estables, más escalables y generalmente más atendidos que cualquier nuevo servicio HTTP de whatismyip.com hoy en día.
  3. Este método es intrínsecamente más rápido (ya sea solo por unos pocos milisegundos!).

Usando dig con OpenDNS como solucionador:

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

Tal vez tenga un alias en tu bashrc para que sea fácil de recordar

alias wanip='dig @resolver1.opendns.com ANY myip.opendns.com +short'

Responde con una dirección IP simple:

$ wanip
80.100.192.168 # or, 2606:4700:4700::1111

Sintaxis

Abreviado de enlace :

usage:  dig [@global-server] [q-type] host {local-d-opt}

    q-type   one of (A, ANY, AAAA, TXT, MX, ...). Default: A.

    q-opt    one of:
             -4                  (use IPv4 query transport only)
             -6                  (use IPv6 query transport only)
             ...

    d-opt    ...
             +[no]short          (Display nothing except short form of answer)
             ...

El tipo de consulta ANY devuelve un registro AAAA o A. Para preferir la conexión IPv4 o IPv6 específicamente, use las opciones -4 o -6 en consecuencia.

Para requerir que la respuesta sea una dirección IPv4, reemplaza ANY con A ; para IPv6, reemplácelo con AAAA . Tenga en cuenta que solo puede devolver la dirección utilizada para la conexión. Por ejemplo, cuando se conecta a través de IPv6, no puede devolver la dirección A.

Servidores alternativos y ejemplos

Además de OpenDNS, Akamai y Google ofrecen una capacidad similar a través de sus servicios DNS:

$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

Alias de ejemplo que solicita específicamente una dirección IPv4:

alias wanip4='dig @resolver1.opendns.com A myip.opendns.com +short -4'

$ wanip4
80.100.192.168

Y IPv6:

alias wanip6='dig @resolver1.opendns.com AAAA myip.opendns.com +short -6'

$ wanip6
2606:4700:4700::1111

Solución de problemas

Si el comando no funciona por algún motivo, es posible que haya un problema con el proveedor ascendente, la herramienta de línea de comandos o algo más. Para ayudar a comprender por qué no funciona, ejecute el comando sin la opción +short para revelar los detalles de la consulta de DNS. Por ejemplo:

$ dig @resolver1.opendns.com ANY myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  ANY

;; ANSWER SECTION:
myip.opendns.com.   0   IN  AAAA    2606:4700:4700::1111

;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011
    
respondido por el Krinkle 04.07.2013 - 04:53
134

NOTA: se trata de una dirección IP externa (la que ven los servidores en Internet cuando se conecta a ellos): si desea una IP interna dirección (la que usa su propia computadora para las conexiones, que puede ser diferente) vea esta respuesta .

TL; DR: los métodos más rápidos en 2015

El método más rápido usando DNS:

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

o utilizando externalip :

externalip dns

El más rápido usando HTTP:

curl -s http://whatismyip.akamai.com/

o usando externalip:

externalip http

El más rápido usando HTTPS con un certificado válido:

curl -s https://4.ifcfg.me/

o usando externalip:

externalip https

Usando telnet:

Con el comando nc :

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

o usando externalip:

externalip telnet

Con el comando telnet :

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

Usando FTP:

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

o usando externalip:

externalip ftp

Todo lo anterior se puede ejecutar usando mi script externalip como:

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

Ahora una larga historia ...

Hay muchas opciones de diferentes servidores que proporcionan la IP externa, especialmente a través de HTTP publicado aquí o en otro lugar.

Hice un punto de referencia para ver si alguno de ellos es mejor que los demás y me sorprendieron los resultados. P.ej. Uno de los ifconfig.me más recomendados fue casi siempre el más lento para mí, a veces me tomó muchos segundos responder. Muchos no funcionan a través de HTTPS, o funcionan pero tienen certificados inválidos. Algunos tienen tiempos de respuesta muy inconsistentes.

Puntos de referencia

HTTP y HTTPS

Esta es la fuente de mi script externalip-benchmark que utilicé:

Puede ejecutarlo usted mismo para ver qué servicios mencionados aquí vale la pena usar:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

Los resultados que obtuve el 2015-04-03 de Varsovia - las direcciones se han cambiado para proteger a los inocentes:

Mejores tiempos de respuesta de http:

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

Mejores tiempos de respuesta https:

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(Nota: hay algunas respuestas rápidas con contenido vacío, no son válidas).

Mejores tiempos promedio de ping:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

Aquí están los resultados que obtuve el 2015-04-03 de Ámsterdam:

Mejores tiempos de respuesta de http:

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

Mejores tiempos de respuesta https:

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

Mejores tiempos promedio de ping:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(Los pings 999999 significan un 100% de pérdida de paquetes.)

DNS

A modo de comparación, aquí se presentan los tiempos en que se toman otros métodos, que se probaron el 2015-06-16 en Varsovia y Ámsterdam.

Utilizando:

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

usualmente toma (hora real del reloj de pared) alrededor de:

  • 0.035s desde Varsovia
  • 0.015s desde Amsterdam

En realidad hay cuatro solucionadores que pueden usarse de esta manera:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

Todos ofrecen los mismos tiempos de respuesta en Varsovia y Ámsterdam, pero puede que este no sea el caso en otros lugares.

Utilizando 208.67.222.222, la IP de resolver1.opendns.com en lugar de su nombre de dominio es más rápida:

  • 0.023s desde Warsaw
  • 0.009s desde Amsterdam

pero es posible que no funcione en el futuro si la IP cambia alguna vez (aunque puede que sea poco probable que tenga una resolución de DNS muy conocida; tal vez debería usar la IP en mi externalip script: comente).

Telnet

Telnet con el comando nc o telnet (ver arriba) generalmente toma:

  • 0.103s desde Varsovia
  • 0.035s desde Amsterdam

(No hay una diferencia notable entre los comandos nc y telnet .)

FTP

  • 0.104s desde Varsovia
  • 0.036s desde Amsterdam

Nombres de dominio

Todos los métodos serán más rápidos (especialmente cuando se ejecutan por primera vez) cuando se usarán direcciones IP en lugar de los nombres de dominio de los servicios dados (excepto con HTTP que puede usar servidores virtuales basados en host y no funciona con IP descubierta (no probada), pero dejará de funcionar cuando los servicios cambien la dirección IP, por lo que puede ser más rápida pero menos segura para el futuro.

Comentarios

Si ve algunos resultados interesantes de su ubicación, o si cree que deberían recomendarse otros hosts en lugar de los que he elegido, publique un comentario. Si falta algún servicio importante, comente o publique un problema en GitHub. Me gustaría mantener esta publicación actualizada con una selección actual de servicios con el mejor rendimiento.

    
respondido por el rsp 03.04.2015 - 03:37
77
 curl -s http://whatismijnip.nl |cut -d " " -f 5

Sitio reemplazado por uno de trabajo holandés.

    
respondido por el Maciek Sawicki 14.10.2011 - 16:49
51

Desde whatsmyip.org y ifconfig.me ya han sido mencionado:

curl -s icanhazip.com
    
respondido por el joschi 06.11.2011 - 11:52
18

Puede usar ifconfig.me como alternativa a whatismyip.org.

curl -s http://ifconfig.me

También ifconfig.me tiene algunas funcionalidades adicionales. Para averiguar qué otra información puede recibir, visite el sitio web.

    
respondido por el Mr. Deathless 28.10.2011 - 23:10
15
wget -O - -q http://whatismyip.org/
    
respondido por el ztank1013 14.10.2011 - 17:34
10

Amazon AWS

curl https://checkip.amazonaws.com

Salida de muestra:

123.123.123.123

Me gusta porque:

  • devuelve solo la IP de texto simple, nada más
  • es de un proveedor bien conocido y es poco probable que se desconecte pronto
9

Prefiero usar curlmyip.com Es tan simple como:

curl curlmyip.com

Es corto y fácil de recordar.

    
respondido por el Garrett Fogerlie 15.05.2013 - 03:32
8
curl ident.me

O

curl ifconfig.me

O

curl tnx.nl/ip

O

curl ipecho.net/plain

O

curl ip.appspot.com

O

curl whatismyip.akamai.com

O

curl icanhazip.com

O

curl wgetip.com

O

curl ip.tyk.nu

O

curl curlmyip.com

O

curl corz.org/ip

O

curl bot.whatismyipaddress.com

Reference

    
respondido por el Mandar Shinde 06.05.2014 - 12:45
6
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
    
respondido por el Eugene Yarmash 21.10.2011 - 11:11
4

Si después de leer todas estas sugerencias desea leer aún más, aquí hay una secuencia de comandos de Bash, posiblemente, demasiado diseñada.

Contiene una lista de servidores DNS y HTTP que parecen funcionar bien en febrero de 2017.

Si tiene dig , primero intenta DNS, que es casi un orden de magnitud más rápido que los diversos servicios HTTP.

Sale en la primera respuesta que recibe.

Si no tiene dig o si todos los servidores DNS fallaron, entonces intentará con los servicios HTTP hasta que reciba una respuesta.

Los servidores están listados alfabéticamente, pero se barajan antes de usarlos para evitar usar siempre el mismo.

#!/bin/bash

## Get my external IP

timeout=2   # seconds to wait for a reply before trying next server
verbose=1   # prints which server was used to STDERR

dnslist=(
    "dig +short            myip.opendns.com        @resolver1.opendns.com"
    "dig +short            myip.opendns.com        @resolver2.opendns.com"
    "dig +short            myip.opendns.com        @resolver3.opendns.com"
    "dig +short            myip.opendns.com        @resolver4.opendns.com"
    "dig +short    -t txt  o-o.myaddr.l.google.com @ns1.google.com"
    "dig +short -4 -t a    whoami.akamai.net       @ns1-1.akamaitech.net"
    "dig +short            whoami.akamai.net       @ns1-1.akamaitech.net"
)

httplist=(
    4.ifcfg.me
    alma.ch/myip.cgi
    api.infoip.io/ip
    api.ipify.org
    bot.whatismyipaddress.com
    canhazip.com
    checkip.amazonaws.com
    eth0.me
    icanhazip.com
    ident.me
    ipecho.net/plain
    ipinfo.io/ip
    ipof.in/txt
    ip.tyk.nu
    l2.io/ip
    smart-ip.net/myip
    tnx.nl/ip
    wgetip.com
    whatismyip.akamai.com
)



# function to shuffle the global array "array"
shuffle() {
   local i tmp size max rand
   size=${#array[*]}
   max=$(( 32768 / size * size ))
   for ((i=size-1; i>0; i--)); do
      while (( (rand=$RANDOM) >= max )); do :; done
      rand=$(( rand % (i+1) ))
      tmp=${array[i]} array[i]=${array[rand]} array[rand]=$tmp
   done
}


## if we have dig and a list of dns methods, try that first
if hash dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
    eval array=( \"\${dnslist[@]}\" )
    shuffle

    for cmd in "${array[@]}"; do
        [ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
        ip=$(timeout $timeout $cmd)
        if [ -n "$ip" ]; then
            echo $ip
            exit
        fi
    done
fi


# if we haven't succeeded with DNS, try HTTP

if [ ${#httplist[*]} == 0 ]; then
    echo "No hosts in httplist array!" >&2
    exit 1
fi

# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);

if [ -z "$curl_or_wget" ]; then
    echo "Neither curl nor wget found. Cannot use http method." >&2
    exit 1
fi

eval array=( \"\${httplist[@]}\" )
shuffle

for url in "${array[@]}"; do
    [ "$verbose" == 1 ] && echo Trying: $curl_or_wget  "$url" 1>&2
    ip=$(timeout $timeout $curl_or_wget "$url")
    if [ -n "$ip" ]; then
        echo $ip
        exit
    fi
done

Uso de muestra (llamé al script myip ):

$ myip
Trying: dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"

$ ip=$(myip); echo "IP = '$ip'"
Trying: dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'

Comente la variable verbose en la parte superior de la secuencia de comandos para evitar imprimir el servidor utilizado.

Actualización: este script ahora también está en Github, donde podría actualizarlo cuando sea necesario:
enlace

    
respondido por el mivk 14.02.2017 - 20:02
3

Si desea utilizar HTTPS para evitar algunos errores potenciales:

_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"
    
respondido por el Chris Down 06.11.2011 - 13:27
3

Aquí hay otra alternativa que depende de los hosts cuya empresa se resuelva en torno a la administración de IP dinámica en lugar de los sitios de "servicio público" que pueden desaparecer o cambiar de formato.

  1. Registre su servidor en uno de los muchos servicios dinámicos gratuitos de DNS (por ejemplo, no-ip.com) Esto le dará una entrada de DNS como xxx.no-ip.org.
  2. Instale la herramienta de actualización dinámica del servicio (informa los cambios de IP al servicio).

Para obtener la dirección IP en un script, simplemente haz lo siguiente:

external_ip='dig +short xxx.no-ip.org'

Excelente para uso en el trabajo cron para verificar si la IP dinámica ha cambiado y algunas entradas de configuración necesitan ser cambiadas.

    
respondido por el cgmonroe 20.03.2013 - 19:24
3

Esto siempre funciona para mí, lo uso en mi cuenta para obtener mi dirección IP.

wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
    
respondido por el Dai_Trying 04.07.2013 - 21:42
3

Ya que no confío en la conexión o en el servicio, utilizo el siguiente código, que intenta obtener la IP utilizando diferentes servicios (siéntase libre de agregar más):

# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)

while [ -z "$IP" ] # If no IP found yet, keep trying!
do
    sleep 30
    IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$((  RANDOM % ${#arr[@]}  ))]})  
done

echo -n "$IP" >  /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP" 

Para agregar más robustez (por ejemplo, si uno de los servicios cambia su formato), puede verificar que $IP es una IP válida usando lo siguiente function :

# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ 'echo $1 | grep -o '\.' | wc -l' -ne 3 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 3 dots).";
        exit 1;
elif [ 'echo $1 | tr '.' ' ' | wc -w' -ne 4 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 4 octets).";
        exit 1;
else
        for OCTET in 'echo $1 | tr '.' ' ''; do
                if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' is not numeric).";
                        exit 1;
                elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
                        exit 1;
                fi
        done
fi

return 0;
}
    
respondido por el Franck Dernoncourt 29.07.2014 - 03:04
3

ifcfg.me admite:

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

IPv4 e IPv6, incluso más cosas con curl: ifcfg.me/?

    
respondido por el Eun 17.12.2014 - 15:06
2

Ejecuto un servicio en la nube para mi familia e hice este script rápido que ejecuto en cron cada mañana a las 5 porque soy barato y no compraré una IP estática.

Agarra la IP pública y la envía por correo electrónico a mis usuarios. Lo hice por correo electrónico en formato de hipervínculo para que mi mamá no tenga que escribir los puertos ni nada. Tal vez alguien más pueda usarlo para.

#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);

echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s   "From your friendly cloud service provider" user1@someemail.com, user2@ect.com
    
respondido por el Will 22.10.2014 - 09:30
1

Esto mostrará la dirección IP actual en una ventana emergente:

zenity --info --text "$(curl -s icanhazip.com)"
    
respondido por el basic6 10.01.2015 - 19:54
1

He configurado un servicio que devuelve la dirección IP como JSON / XML o texto sin formato. Puedes encontrarlos aquí

enlace

La misma URL con / json y / xml también le dará otros formatos

Si desea HTTPS, puede usar las mismas URL con el prefijo https. La ventaja es que, incluso si está utilizando un Wifi, obtendrá la dirección pública.

Por lo tanto, un alias simple myip="curl enlace " obtendrá su IP

    
respondido por el vivekv 06.01.2015 - 15:21
1

Alternativamente, puedes usar STUN que se inventó para responder a esto pregunta de forma automatizada y se utiliza ampliamente en las comunicaciones de Internet, por ejemplo, por SIP y WebRTC .

Usando un stunclient (en debian / ubuntu do apt-get install stuntman-client ) simplemente haga:

$ stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped 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 son los servidores de direcciones IP que los sitios web ven desde el exterior (y el que está buscando). Usando sed puede reducir la salida de arriba a solo una dirección IP:

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

Para una búsqueda alternativa de STUN que usa solo herramientas básicas de línea de comandos, vea (pensada como un ejercicio divertido, no para uso de producción) .

    
0

El w3m Plaintext-Browser es ideal para el bash. Puede usar grep y tail para acortar la respuesta de la siguiente manera:

w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1
    
respondido por el McPeppr 03.12.2014 - 14:44
0

Usa Curl para golpear el servicio ip de shtuff.it

curl -s https://shtuff.it/myip/short
    
respondido por el Chris Montanaro 02.07.2013 - 16:23
0

Al usar una solicitud de DNS incluso detrás de un enrutador NAT que traduce direcciones DNS, esto puede funcionar:

$ dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t

o, puede utilizar el método de solicitud HTTP en su lugar:

$ curl -s ipinfo.io/ip
x.y.z.t
    
respondido por el SebMa 17.04.2018 - 15:31

Lea otras preguntas en las etiquetas