En ocasiones necesitamos detectar en nuestros scripts bash, qué interfaces de red hay en el sistema y si están conectadas o no. Hay unas cuantas maneras de hacerlo, pero habitualmente suelo usar el comando ip.
El comando ip nos permite gestionar rutas, dispositivos, reglas de enrutamiento y túneles. Para detectar las interfaces de red sólo necesito utilizar:
- ip link show muestra todas las interfaces.
- ip link show up muestra las interfaces que tienen el cable conectado.
# ip link show|grep ^[0-9]| grep -v lo|cut -f2 -d":"|sed 's/^[ \t]*//'
Y si tan sólo quiero obtener los nombres de las interfaces de red que tienen el cable conectado:
# ip link show up|grep ^[0-9]| grep -v lo|cut -f2 -d":"|sed 's/^[ \t]*//'
Cuando utilizamos ip link, podemos obtener las direcciones mac de las interfaces de red. Ahora bien, si en lugar de usar ip link, usamos ip addr, podremos obtener también las direcciones IP:
- ip addr show muestra todas las interfaces.
- ip addr show up muestra las interfaces que tienen el cable conectado.
# ip link show eth0| grep 'link/ether' | sed 's/^[ \t]*//' | cut -f2 -d" "
o# ip addr show eth0 | grep 'link/ether' | sed 's/^[ \t]*//' | cut -f2 -d" "
Y si quiero obtener la dirección IP de la interfaz de red eth0, ejecuto:
# ip addr show eth0 | grep -v inet6 | grep 'inet' | sed 's/^[ \t]*//' | cut -f2 -d" " | cut -f1 -d"/"
Y ya puestos, podemos obtener la máscara de red de la interfaz eth0:# ip addr show eth0 | grep -v inet6 | grep 'inet' | sed 's/^[ \t]*//' | cut -f2 -d" " | cut -f2 -d"/"
Y de paso, la dirección de broadcast de la interfaz de red eth0:# ip addr show eth0 | grep -v inet6 | grep 'inet' | sed 's/^[ \t]*//' | cut -f4 -d" "
Si quisiera obtener los nombres de las interfaces de red activas, ejecutaría:
# ip addr show | grep "state UP" | awk '{print $2}' | cut -f1 -d":"
Y si quisiera obtener la ip del gateway por defecto:
# ip route show 0.0.0.0/0 | awk '{print $3}'
0 comentarios:
Publicar un comentario