Quero obter minha máscara de rede no Linux. É gerado com, ifconfig
mas quero extrair a string.
linux
text-processing
ip
michelemarcon
fonte
fonte
ifconfig
a linha de máscara de rede do FreeBSD é :,inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
portanto, embora as respostas possam ser facilmente ajustadas, provavelmente não há um tamanho único (usando apenas Bash / ifconfig) .Respostas:
Devo esclarecer que o código aqui funciona para Linux (observe os comentários e poste sobre outros Unices). A OP pediu uma solução Linux, mas seria bom alterar a pergunta para "como obter a máscara de rede" em geral, e ter a resposta combinando a melhor maneira de obter mais sabores do Unix.
Sobre o ifconfig no Linux
Juntamente com outros comandos de rede tradicionais como netstat, arp, rarp e route, o ifconfig faz parte do pacote net-tools . O Net-tools não foi desenvolvido ativamente há muito tempo e há esforços para substituí-lo em favor do novo pacote iproute2 . Por uma questão de brevidade, se você quiser mais detalhes sobre essa transição fundamental, aqui estão alguns links relevantes:
Exemplo de caso: Debian Linux
Exemplo de caso: Arch Linux
Página de manual do net-tools ifconfig (consulte a seção BUGS)
Análise e comparação das estruturas da perspectiva dos usuários
fonte
?
fonte
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
Gostaria de saber se você realmente quer apenas a máscara. Talvez você realmente queira que a rede (ou IP) com máscara seja usada em arquivos de configuração, com
nmap
ou qualquer outra coisa.Nesse caso, no Linux, você também pode analisar a saída do
ip ...
comando.Para listar todas as interfaces com seus endereços e máscaras na notação CIDR:
Ou para restringi-lo à interface padrão:
o que me dá "192.168.1.61/24" na minha máquina.
fonte
ip -o -f inet addr show scope global
eip route list default
.se você estiver usando um sistema operacional que gera a máscara em hexadecimal, pode fazer algo como:
fonte
fonte
awk
que não é o caso na vida realifconfig
. Gostaria de sugerir algumas mudanças no entanto:ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
. O-o
modo quegrep
retorna apenas parte da linha e não o lote inteiro (mais eficiente). Faça a correspondência de caracteres que não sejam espaços em branco ([^\s]*
) para encontrar o final do token de máscara de rede. Aspas simples ao redor do delimitador de campo para segurança./sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
a máscara em hexadecimal.Se você estiver procurando a máscara de rede para o dispositivo de rede padrão, este comando retornará o dispositivo padrão, pois o dispositivo padrão pode não ser eth0
E este comando recupera a máscara:
Agradeço a Eliah Kagan e Paulo Tomé que me ajudaram a simplificar e esclarecer a resposta. Na minha máquina pessoal, o dispositivo Ethernet padrão era "wlx504654c1a91", o que era muito complicado para lembrar e digitar com precisão, daí o processo de duas etapas.
fonte
grep 'pattern' | awk '{ action }'
geralmente pode ser reduzido paraawk '/pattern/ { action }'