Dovrei chiarire che il codice qui funziona per Linux, (notare commenti e post su altri Unix). OP ha chiesto una soluzione Linux, ma sarebbe utile cambiare la domanda in "come ottenere la maschera di rete" in generale e fare in modo che la risposta combini il modo migliore per più gusti Unix.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
Informazioni su ifconfig in Linux
Insieme ad altri comandi di rete tradizionali come netstat, arp, rarp e route, ifconfig fa parte dei net-tools pacchetto. Net-tools non è stato sviluppato attivamente da molto tempo e ci sono sforzi per deprecarlo a favore del nuovo iproute2 pacchetto. Per brevità, se desideri maggiori dettagli su questa transizione fondamentale, ecco alcuni link pertinenti:
Esempio di caso:Debian Linux
Caso di esempio:Arch Linux
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;} '
?
Mi chiedo se tu voglia davvero solo la maschera. Forse vuoi davvero la rete (o l'IP) con la maschera, da usare nei file di configurazione, con nmap
, o qualsiasi altra cosa.
In tal caso, su Linux, puoi anche analizzare l'output di ip ...
comando.
Per elencare tutte le interfacce con il relativo 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.