Voglio ottenere la mia maschera di rete su Linux. Viene emesso ifconfig
ma voglio estrarre la stringa.
Voglio ottenere la mia maschera di rete su Linux. Viene emesso ifconfig
ma voglio estrarre la stringa.
Risposte:
Dovrei chiarire che il codice qui funziona per Linux (nota commenti e post su altri Unices). OP ha chiesto una soluzione Linux, ma sarebbe bene cambiare la domanda in "come ottenere la maschera di rete" in generale, e avere la risposta che combini il modo migliore per più sapori Unix.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
Insieme ad altri comandi di rete tradizionali come netstat, arp, rarp e route, ifconfig fa parte del pacchetto net-tools . Net-tools non è stato sviluppato attivamente da molto tempo e ci sono sforzi per deprecarlo a favore del nuovo pacchetto iproute2 . Per brevità, se vuoi maggiori dettagli su questa transizione fondamentale, ecco alcuni link rilevanti:
Pagina man per net-tools ifconfig (vedere la sezione BUGS)
Analisi e confronto dei framework dal punto di vista degli utenti
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
Mi chiedo se vuoi davvero solo la maschera. Forse vuoi davvero che la rete (o IP) con maschera, da utilizzare nei file di configurazione, con nmap
o altro.
In tal caso, su Linux, puoi anche analizzare l'output del ip ...
comando.
Per elencare tutte le interfacce con il loro indirizzo e maschera nella notazione CIDR:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
O per limitarlo all'interfaccia predefinita:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
che mi dà "192.168.1.61/24" sulla mia macchina.
ip -o -f inet addr show scope global
e ip route list default
.
se stai usando un sistema operativo che genera la maschera in esadecimale, puoi fare qualcosa del tipo:
#!/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
cui non è il caso nella vita reale ifconfig
. Vorrei suggerire alcuni cambiamenti però: ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
. In questo -o
modo grep
restituisce solo parte della linea anziché l'intero lotto (più efficiente). Abbina caratteri non bianchi ( [^\s]*
) per trovare la fine del token maschera di rete. Virgolette singole intorno al delimitatore di campo per sicurezza.
/sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
a visualizzare la maschera in esadecimale.
Se stai cercando la maschera di rete per il dispositivo di rete predefinito, questo comando restituisce il dispositivo predefinito poiché il dispositivo predefinito potrebbe non essere eth0
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
E questo comando recupera la maschera:
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
Grazie a Eliah Kagan e Paulo Tome che mi hanno aiutato a semplificare e chiarire la risposta. Sulla mia macchina personale, il dispositivo Ethernet predefinito era "wlx504654c1a91", che era troppo complicato per ricordare e digitare con precisione, da cui il processo in due fasi.
grep 'pattern' | awk '{ action }'
di solito può essere ridotto aawk '/pattern/ { action }'
ifconfig
linea di maschera di rete di FreeBSD è:,inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
quindi mentre le risposte possono essere facilmente regolate, probabilmente non c'è una soluzione unica (usando solo Bash / ifconfig) .