Mostrar la dirección IP en la interfaz eth0

17

¿Cómo puedo mostrar la dirección IP que se muestra en eth0 usando un script?

    
pregunta user43389 11.12.2014 - 22:56

15 respuestas

24

guárdalo en un archivo y luego ejecuta bash <filename>

#!/bin/bash
ifconfig eth0 | grep "inet addr"

siendo más preciso obtener solo el número que muestra la dirección IP:

#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
    
respondido por el edward torvalds 11.12.2014 - 23:00
17

Con el objetivo de proporcionar otra opción, podría usar el comando ip addr de esta manera para obtener la dirección IP:

ip addr show eth0 | grep "inet\b" | awk '{print }' | cut -d/ -f1
  • ip addr show eth0 muestra información sobre eth0
  • grep "inet\b" solo muestra la línea que tiene la dirección IPv4 (si desea la dirección IPv6, cámbiela a "inet6\b" )
  • awk '{print }' imprime en el segundo campo, que tiene el ipaddress / mask, ejemplo 172.20.20.15/25
  • cut -d/ -f1 solo toma la parte de la dirección IP.

En un script:

#!/bin/bash
theIPaddress=$(ip addr show eth0 | grep "inet\b" | awk '{print }' | cut -d/ -f1)
    
respondido por el Alaa Ali 12.12.2014 - 02:16
14

Tomado de enlace

hostname -i

Sin embargo, puede devolver una dirección IP local (127.0.0.1), por lo que es posible que tenga que usar y filtrar:

hostname -I

Desde las páginas de manual del nombre de host:

  

-i, --ip-address

     

Muestra las direcciones de red del nombre de host. Tenga en cuenta que esto solo funciona si el nombre de host puede resolverse. Evita usar esta opción; use hostname --all-ip-addresses en su lugar.

     

-I, --all-ip-addresses

     

Muestra 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 han omitido. A diferencia de la opción -i, esta opción no depende de la resolución del nombre. No haga suposiciones sobre el orden de la salida.

    
respondido por el ThorSummoner 09.03.2016 - 20:01
4

Aquí hay algunos vendedores ...

Awk

ifconfig eth0 | awk '/inet addr/{split(,a,":"); print a[2]}'

función dividida en el comando awk anterior divide la segunda columna en función del delimitador : y almacena el valor dividido en una matriz asociativa a . Entonces a[2] contiene el valor de la segunda parte.

sed

ifconfig eth0 | sed -n '/inet addr/s/.*inet addr: *\([^[:space:]]\+\).*//p'

En basic sed, \(...\) llamado grupo de captura que se utiliza para capturar los caracteres. Podríamos referir esos personajes capturados a través de retro-referencias. \([^[:space:]]\+\) captura cualquier carácter pero no espacio una o más veces.

grep

ifconfig eth0 | grep -oP 'inet addr:\K\S+'

\K descarta que los caracteres coincidentes previamente se impriman en la final y \S+ coincide con uno o más caracteres que no sean espacios.

Perl

ifconfig eth0 | perl -lane 'print  if /inet addr:(\S+)/'

Se capturan uno o más caracteres no espaciales que están al lado de la cadena inet addr: y finalmente imprimimos esos caracteres capturados solamente.

    
respondido por el Avinash Raj 12.12.2014 - 07:28
4

La respuesta de @ markus-lindberg es mi favorita. Si agrega -o -4 a los indicadores de ip, obtendrá un resultado mucho más fácil de analizar (y consistente):

ip -o -4 a | awk ' == "eth0" { gsub(/\/.*/, "", ); print  }'

-o significa --oneline , que está destinado a ayudar en exactamente este tipo de situaciones. El -4 se agrega para limitar a la dirección IPv4, que es lo que todas las otras respuestas implican.

    
respondido por el Amos Shapira 14.06.2016 - 01:43
1

Sugiero usar una biblioteca de Python como netifaces que esté específicamente diseñada para este propósito.

sudo pip install netifaces
python -c "import netifaces; print netifaces.ifaddresses('eth0')[netifaces.AF_INET][0]['addr']"

Para obtener la interfaz de red predeterminada que está en uso.

default_inf = netifaces.gateways()['default'][netifaces.AF_INET][1]
    
respondido por el Sandeep 09.04.2016 - 00:34
1
ip addr|awk '/eth0/ && /inet/ {gsub(/\/[0-9][0-9]/,""); print }'

Esto solo usa ip addr que es un reemplazo para ifconfig y awk combinado con sustitución (gsub).

Deje de usar demasiados procesos para tareas simples

    
respondido por el Markus Lindberg 23.10.2015 - 08:42
1

Solo una opción más que puede ser útil si no tiene awk (como es el caso en algunos dispositivos integrados):

ip addr show dev eth0 scope global | grep "inet\b" | cut -d/ -f 1 | egrep -o "([[:digit:]]{1,3}[.]{1}){3}[[:digit:]]{1,3}"
    
respondido por el Fulvio Flaco 02.08.2016 - 12:43
1

Aquí hay uno bueno, solo usa grep como comando secundario:

ip addr muestra eth0 | grep -oP 'inet \ K \ S [0-9.] +'

No veo por qué debería usar más comandos de los necesarios

    
respondido por el Rick 18.07.2017 - 19:10
1

ifconfig eth0|grep 'inet '|awk '{print }'

    
respondido por el Maksim Kostromin 10.11.2017 - 20:58
1

aquí está para IPv4 :

ip -f inet a|grep -oP "(?<=inet ).+(?=\/)"

aquí está para IPv4 y amp; particular dev (eth0):

ip -f inet a show eth0|grep -oP "(?<=inet ).+(?=\/)"

para IPv6 :

ip -6 -o a|grep -oP "(?<=inet6 ).+(?=\/)"

    
respondido por el XXL 13.02.2018 - 12:04
0

esto se puede usar también con un usuario normal.

ip addr show eth0 | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
    
respondido por el Matheus Baldasso 24.03.2017 - 19:34
0

Esta es la forma más corta que pude encontrar:

ip -f inet addr show | grep -Po 'inet \K[\d.]+'

Reemplaza con tu interfaz de red.

ip -f inet le dice a ip que solo devuelva valores para la familia inet (ipv4).

grep -Po le dice a grep que integre el siguiente valor como perl-regex, y que solo imprima los valores coincidentes.

La expresión regular \K[\d.]+ dice "desechar todo hasta este punto (\ K), y unir tantos valores numéricos seguidos por un punto en una fila como sea posible". Por lo tanto, esto solo coincidirá con la dirección IP e ignorará todo después de ella, incluida la máscara de subred de forma corta \ XX.

    
respondido por el Ryan 19.07.2017 - 06:27
0

en estos días con interfaces múltiples (por ejemplo, si usa una ventana acoplable) y la interfaz de nombres de ETH ya no son las normas

Utilizo este comando para extraer la IP / Máscara:

IPMASK=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6)

Así que cualquiera sea la cantidad de interfaces que tenga y cualquiera que sea su nombre, GREP solo obtendrá la primera que tenga la opción MULTICAST.

Utilizo este comando para extraer solo la IP sin la máscara:

IP=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6|cut -d'/' -f1)

Utilizo estos comandos en diferentes BDS y amp; NIX nunca falla;)

    
respondido por el JOduMonT 26.10.2017 - 07:28
0

En mi script estoy usando algo así:

 
re="inet[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"
if [[ $(ip addr show eth0) =~ $re ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Cannot determin IP" 1>&2
fi

No genera ningún proceso.

    
respondido por el Maciej Wawrzyńczuk 29.10.2017 - 18:43

Lea otras preguntas en las etiquetas