Como obter netmask do bash?

9

Eu quero ter minha netmask no Linux. É produzido com ifconfig , mas eu quero extrair a string.

    
por michelemarcon 08.11.2011 / 15:05

5 respostas

9

Devo esclarecer que o código aqui funciona para o Linux, (note comentários e post sobre outros Unices). OP pediu por uma solução Linux, mas seria bom mudar a questão para "como obter a máscara de rede" em geral, e ter a resposta combinando a melhor maneira de obter mais sabores Unix.

#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$//p'

./script eth0

Sobre o ifconfig no Linux

Juntamente com outros comandos tradicionais de rede, como netstat, arp, rarp e route, o ifconfig faz parte do pacote net-tools . O Net-tools não foi desenvolvido ativamente desde muito tempo e há esforços para desaprová-lo em favor do novo pacote iproute2 . Por uma questão de brevidade, se você quiser mais detalhes sobre esta transição fundamental, aqui estão alguns links relevantes:

Exemplo de caso: Debian Linux

Exemplo de caso: Arch Linux

Página man do ifconfig net-tools (veja a seção BUGS)

Análise e comparação dos frameworks da perspectiva do usuário

    
por 08.11.2011 / 15:25
7
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '

?

    
por 08.11.2011 / 15:22
4

Eu me pergunto se você realmente quer apenas a máscara. Talvez você realmente queira que a rede (ou IP) com máscara, use em arquivos de configuração, com nmap , ou o que for.

Nesse caso, no Linux, você também pode analisar a saída do comando ip ... .

Para listar todas as interfaces com seu endereço e máscara na notação CIDR:

ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'

Ou para restringi-lo à interface padrão:

default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'

que me dá "192.168.1.61/24" na minha máquina.

    
por 05.02.2014 / 12:43
3

se você estiver usando um sistema operacional que produza a máscara em hexadecimal, faça 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"
    
por 08.11.2011 / 21:16
1
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
    
por 08.11.2011 / 16:36