Quiero obtener mi máscara de red en Linux. Se emite con ifconfig
pero quiero extraer la cadena.
Quiero obtener mi máscara de red en Linux. Se emite con ifconfig
pero quiero extraer la cadena.
Respuestas:
Debo aclarar que el código aquí funciona para Linux, (tenga en cuenta los comentarios y publicaciones sobre otros Unices). OP solicitó una solución de Linux, pero sería bueno cambiar la pregunta a "cómo obtener máscara de red" en general, y hacer que la respuesta combine la mejor manera para obtener más sabores de Unix.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
Junto con otros comandos de red tradicionales como netstat, arp, rarp y route, ifconfig es parte del paquete net-tools . Net-tools no se ha desarrollado activamente desde hace mucho tiempo y hay esfuerzos para desaprobarlo a favor del nuevo paquete iproute2 . En aras de la brevedad, si desea más detalles sobre esta transición fundamental, aquí hay algunos enlaces relevantes:
Página de manual para ifconfig de net-tools (consulte la sección ERRORES)
Análisis y comparación de los marcos desde la perspectiva de los usuarios.
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
Me pregunto si realmente solo quieres la máscara. Tal vez realmente desee que la red (o IP) con máscara, se use en archivos de configuración, con nmap
o lo que sea.
En ese caso, en Linux, también puede analizar la salida del ip ...
comando.
Para enumerar todas las interfaces con su dirección y máscara en notación CIDR:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
O para restringirlo a la interfaz predeterminada:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
que me da "192.168.1.61/24" en mi máquina.
ip -o -f inet addr show scope global
y ip route list default
.
Si está utilizando un sistema operativo que genera la máscara en hexadecimal, puede hacer algo como:
#!/usr/bin/bash
# read the mask, and strip leading 0x if it's there
hexmask=$( echo $1 | sed -e 's/^0x//' )
# loop through $hexmask in pairs
#
for (( i=0; i<${#hexmask}; i+=2 )); do
if (( $i > 1 )); then
# use a . to separate octets
# but don't print a leading .
printf "%s" "."
fi
printf "%d" "0x${1:$i:2}"
done
printf "\n"
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
awk
que no es el caso en la vida real ifconfig
. Yo sugeriría algunos cambios sin embargo: ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
. El -o
modo que grep
solo devuelve parte de la línea en lugar de todo el lote (más eficiente). Une caracteres que no sean espacios en blanco ( [^\s]*
) para encontrar el final del token de máscara de red. Comillas simples alrededor del delimitador de campo por seguridad.
/sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
generar la máscara en hexadecimal.
Si está buscando la máscara de red para el dispositivo de red predeterminado, este comando devuelve el dispositivo predeterminado ya que el dispositivo predeterminado podría no ser eth0
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
Y este comando recupera la máscara:
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
Gracias a Eliah Kagan y Paulo Tome que me ayudaron a simplificar y aclarar la respuesta. En mi máquina personal, el dispositivo de Ethernet predeterminado era "wlx504654c1a91", que era demasiado complicado para recordar y escribir con precisión, de ahí el proceso de dos pasos.
grep 'pattern' | awk '{ action }'
generalmente se puede reducir aawk '/pattern/ { action }'
ifconfig
la línea de máscara de red de FreeBSD es:inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
así que si bien las respuestas se pueden ajustar fácilmente, probablemente no haya una talla única para todos (usando solo Bash / ifconfig) .