Comando de Shell para obtener la dirección IP?

Respuestas:

32

/sbin/ifconfig -a

mpbloch
fuente
Sí, y si planea administrar el servidor de forma remota, vi /etc/network/interfacesy configure la interfaz para static(consulte help.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface
Ejecutar este comando revela una lista completa de números. ¿Cuál deberíamos usar? El inet addr?
ComputerScientist
25

Puedes usar:

/bin/ip addr
Robert Swisher
fuente
3
@opierce Has marcado la respuesta de mpbloch como correcta, pero como FYI, deberías usar esta respuesta, ya que es parte de la suite iproute2. ifconfigestá siendo eliminado por etapas ahora.
jwbensley
3
Puedes hacerlo más corto con solo correr ip a.
gak
19

Si tiene una dirección interna en uso, verifique

curl http://myip.dnsomatic.com

podría ser una buena idea en unix shells.
O simplemente coloque esa URL en su navegador.


Si se obtiene una respuesta diferente de la " ifconfig -a" En consecuencia,
el ifconfigdio su dirección interna - la cual probablemente no funcionará desde el exterior.


Incluso si todo parece estar bien, podría tener un firewall instalado que no permita las conexiones ssh entrantes .
En ese momento, debe probar el puerto de interés desde un navegador en la máquina en,

http://www.canyouseeme.org/

Eso confirmará la conectividad a través de,

  • dirección IP externa (se la muestra en esa página)
  • NAT, puerto hacia adelante
  • Cortafuegos
nik
fuente
Es cierto, pero si ese es el caso, probablemente no existan reglas NAT / reenvío de puertos para hacer coincidir ssh con la IP interna.
Kyle Brandt
@Kyle, que se puede agregar ...
nik
3
+1 paracurl http://myip.dnsomatic.com
JatSing
Similar a esto, también haycurl ifconfig.me
jwbensley
19

/bin/hostname -i

James
fuente
3
En este caso sugeriría usar hostname --all-ip-addresses. Mostrar todas las direcciones de red del host. Esta opción enumera todas las direcciones configuradas en todas las interfaces de red. La interfaz de bucle invertido y las direcciones locales de enlace IPv6 se omiten. Contrariamente a la opción -i, esta opción no depende de la resolución del nombre. No haga suposiciones sobre el orden de la salida.
lrkwz
55
Alternativa más corta al comentario de @ lrkwz/bin/hostname -I
hanxue
Gracias @hanxue, esta debería ser una respuesta propia, el comando más corto con la salida más limpia, ¡justo lo que estaba buscando! En mi experiencia (Ubuntu), /bin/hostname -isolo da 127.0.1.1, lo que es inútil.
Roger Dueck
9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Si necesita su dirección interna, agregue su interfaz después de ifconfig, p. Ej.

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'
Johan
fuente
+1, esto es exactamente lo que necesitaba para resolver un problema. ¡Hurra por una frase!
J. Polfer
+1 Sin la cabeza -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice
Gracias, funciona en Debian pero en OS X no funciona, devolviendo algo de basura. Sería genial si pudiéramos encontrar una línea que funcione en ambos. Aquí está la salida de ifconfig en OS X: gist.github.com/ssbarnea/5814657
Sorin
3

Si necesita averiguar cuál es la dirección IP de su enrutador, puede ejecutar este comando.

dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Si está utilizando OpenDNS para su servidor dns, puede acortarlo a:

dig + short myip.opendns.com

También puedes usar este comando.

curl http://myip.dnsomatic.com
Brad Gilbert
fuente
3

Si tiene varias interfaces, podría ser útil especificar cuál desea IP. si desea la dirección IPV4 de la interfaz 'eth0':

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

si desea la dirección IPV6 de la interfaz 'eth0':

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

si desea buscar una IP entre dos interfaces comunes de una computadora portátil, wlan0 y eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done
LoreLLo
fuente
3

Solo riza esta página :

$ curl wtfismyip.com/text

Mansi
fuente
¿Y cómo es exactamente esto superior a los servicios similares ya mencionados durante estos años?
Esa Jokinen
2

Aquí hay una línea que también funciona en Linux y OS X, y devolverá la primera dirección que no sea local:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Enviar créditos a /programming//a/13322549/99834

Sorin
fuente
2
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`
Mohammed Saqib Rajput
fuente
1

La forma más sencilla de hacerlo es probablemente

ifconfig eth0

suponiendo que la máquina tenga una sola dirección IP en la interfaz cableada predeterminada, es posible que necesite

ifconfig wlan0

si está en WiFi

David North
fuente
1
ip address show scope link

Le mostrará la dirección IP de living - tiene enlaces - interfaces. Pero no es un comando bash. Bash no tiene la capacidad de saber sobre IP y red en absoluto.

Saabi
fuente
1

Lo que entiendo es que desea conectar una máquina remota de ubuntu que tiene ip dinámica. Vaya al sitio dyndns.org y abra una cuenta gratuita. Luego, en la máquina remota, debe instalar una herramienta de IP dinámica.

sudo aptitude install dyndns-client

para que pueda ssh máquina remota a través de

ssh username@yourdynamicnamealias.dyndns.org

Entonces, después de la configuración, nunca necesitará la dirección IP de la máquina remota.

hombre de la lluvia
fuente
Este es mi método preferido para tratar con IP dinámicas. dyndns.org es un servicio fantástico y gratuito.
John Barrett
1

Esto es lo que estoy usando:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'
jlliagre
fuente
1

si necesita una sola IP de una interfaz dada, puede hacer:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 
DmitrySemenov
fuente
0

Si está buscando una dirección IP pública del cuadro , puede usar lo siguiente:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Puede usar dig(1)opciones como -4o -6para buscar específicamente una dirección IPv4 o IPv6; Google proporcionará una respuesta en un registro de TXTtipo, que tendrá citas a su alrededor cuando sea presentado por dig; si desea usar posteriormente la variable con utilidades como traceroute, debe usar algo como tr (1) para eliminar dichas comillas.

Otras opciones incluyen whoami.akamai.nety myip.opendns.com, que responden con Ay AAAAregistros (en lugar de TXTcomo en el ejemplo anterior de Google), por lo que no requieren que se eliminen las comillas:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Aquí hay un script de muestra que utiliza todas las opciones anteriores para establecer las variables:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Si está buscando una dirección IP privada, o un conjunto de todas las direcciones IP asignadas a la caja, puede usar alguna combinación de ifconfig(en BSD y GNU / Linux), ip addr(en GNU / Linux), hostname(opciones -iy -Ien GNU / Linux) y netstatpara ver qué está pasando.

cnst
fuente