Como usar o ifconfig para mostrar apenas a interface ativa

13

Por padrão, ifconfig mostrará todas as interfaces disponíveis, mas e se eu quiser exibir apenas active ? Como en0 apenas abaixo.

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 14:10:9f:e0:eb:c9 
    inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4 
    inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    **status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 32:00:14:e7:4f:80 
    media: autoselect <full-duplex>
    **status: inactive**

Aviso ifconfig en0 não satisfaz, en0 nem sempre é o ativo;)

Estou executando o Mac OS X.

    
por qweruiop 01.12.2013 / 06:15

8 respostas

20

Para obter uma descrição completa de todos os serviços ativos, tente:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'

Esse regex simples deve filtrar apenas as interfaces ativas e todas as suas informações. Sugiro colocar um apelido para isso no seu arquivo ~ / .profile ou ~ / .bash_profile (talvez ifconfiga?)

Para obter apenas o nome da interface (útil para scripts), use:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' | egrep -o -m 1 '^[^\t:]+'

Você precisa instalar o pcregrep para que isso funcione. Está em macports no pacote pcre. Alternativamente, isso deve funcionar com o GNU grep usando grep -Pzo em vez de pcregrep -M -o , mas com o resto o mesmo, mas eu não testei isso.

    
por 06.01.2014 / 11:22
2

Se você quiser apenas imprimir a “entrada” se ela contiver status: active , então você poderia usar algo como este awk como um filtro para a saída ifconfig :

#!/usr/bin/awk -f
BEGIN            { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/     { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/            { buffer = buffer "\n" $0 }
END              { if(print_it) print buffer }

Quando cada “entrada” é iniciada (uma linha está vazia ou não inicia com uma guia), comece a salvar a entrada em um buffer. Anexe a esse buffer quaisquer linhas subsequentes que iniciem com uma guia. Preste atenção para a string mágica status: active ; se uma linha como essa foi vista, imprima o buffer (a "entrada" anterior) quando uma nova "entrada" for iniciada (ou a entrada terminar).

Salve o texto do programa acima em um arquivo e use-o da seguinte forma:

ifconfig -a | awk -f /path/to/file

Ou, se você chmod +x do arquivo, você pode simplificá-lo um pouco:

ifconfig -a | /path/to/file
    
por 03.12.2013 / 08:24
1

Lendo seus comentários e perguntas, parece que você realmente deseja apenas obter as interfaces que têm um endereço IP atribuído a elas.

Você pode fazer isso rapidamente com ifconfig e grep .

Executando o comando:

ifconfig | grep 'Link\|inet'

Deve produzir algo semelhante a:

eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
eth1      Link encap:Ethernet  HWaddr 00:11:22:33:44:66  
          inet addr:192.168.0.8  Bcast:192.168.0.255  Mask:255.255.255.0
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

Isso mostraria cada linha com um nome de interface e IP, se eles tivessem um.

Algumas mágicas REGEX mais específicas podem te dar exatamente o que você precisa.

    
por 01.12.2013 / 10:32
0

A seguir, imprimiremos apenas as interfaces que estão configuradas para ter um IP

ifconfig | grep "inet.*broadcast"
    
por 29.11.2016 / 17:27
0

Se você não for prejudicial a algum script do bash, poderá fazer isso:

for i in $(ifconfig -lu); do if ifconfig $i | grep -q "status: active" ; then echo $i; fi; done

Isso listará as interfaces de rede ativas. Testado no Mac OS X 10.13.

O bom é que você não precisa instalar nada. Basta executar o acima em um terminal.

    
por 16.09.2018 / 21:14
0

Obtenha apenas a interface ACTIVE MAC:

cat /sys/class/net/$(ip addr | awk '/state UP/ {print $2}' | sed 's/.$//')/address
    
por 04.12.2018 / 19:33
-1
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2

Como funciona:

  • ifconfig
  • Grep para linhas contendo "inet addr"
    • Essas linhas contêm os IPs.
  • Grep para linhas que não contêm "127.0.0.1"
    • Geralmente não nos importamos com o host local.
    • -v é invertido grep
  • Das linhas restantes, remova o "Bcast"
  • Corte o campo 2 usando ":" como delimitador
    • Imprime a resposta.
por 02.12.2013 / 19:47
-1
ifconfig en0 | grep status

Isto mostrará o status da conexão ethernet en0

    
por 20.04.2018 / 04:18