Gostaria de descobrir quais dos serviços de rede disponíveis (por exemplo, Ethernet ou Wi-Fi ) estão ativos no momento. Nesta captura de tela das Preferências de rede, você pode ver que o Wi-Fi está ativo no momento (o ponto verde):
Como posso obter essas informações na linha de comando?
O networksetup
comando permite listar os serviços de rede disponíveis:
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi
Também pode mostrar alguns detalhes sobre o serviço, como o nome do dispositivo:
$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)
(2) FireWire
(Hardware Port: FireWire, Device: fw0)
(3) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)
Infelizmente, as informações sobre o serviço ativo (o ponto verde da captura de tela) não estão disponíveis nessas informações. Existe outro comando que eu poderia usar para obter essas informações?
status
campo que possuiactive
ouinactive
como valor.ifconfig | grep $(networksetup -listnetworkserviceorder | grep 'Ethernet, Device' | sed -E "s/.*(en[0-9]).*/\1/")
. Então eu posso mudar de local com base no que foi dito acima.Juntando tudo, escrevi um script para realizar esta tarefa:
O script primeiro obtém uma lista de serviços do
networksetup
comando e, em seguida, verifique se cada serviço está no status ativoifconfig
.Nomeie o script,
networkservice.sh
por exemplo, e execute-o para obter o serviço de rede atual em que você está.fonte
tac
iterar pelas interfaces na ordem inversa, porque geralmente tenho WiFi conectado e um adaptador Ethernet USB (que é o dispositivo preferido na rede). Nesse caso, quero que o legado ativo mais preferido seja impresso:services=$(networksetup -listnetworkserviceorder | grep 'Hardware Port' | tac)
networksetup -listnetworkserviceorder
já produz "o dispositivo preferido mais" em primeiro lugar ...tac
que os serviços posteriores (não preferenciais) não sobrescrevessem$currentservice
. Deveria ter sido mais claro nesse comentário original.O
scutil --dns
comando fornece todas as informações de roteamento de rede necessárias para mapear etiquetas da interface de hardware para rotas de rede.Um pouco
awk
egrep
pode melhorar, se você precisar escrever as informações ou reduzi-las. Comece com a busca de "if_index" se você estiver curioso.fonte
Caso alguém tropeça nisso, como eu fiz, o código abaixo pode ser mais do que você está procurando.
Isso é para expandir a resposta de PeterVP
Também visível em https://www.kittell.net/code/mac-os-x-get-network-information/
fonte
set public (dig +short myip.opendns.com @resolver1.opendns.com)
Meu raciocínio é que um servidor dns (como opendns) tem menos probabilidade de ficar inativo do que um site e é mais rápido. E eu removi a declaração de sono. Não é necessário aguardar a resposta do servidor DNS. Tempo de execução para o meu script 177 ms. O seu leva 5,237 segundos, mas faz mais, é claro. Ainda é uma grande diferença.Não pretendo ter a resposta para esta pergunta classificada, mas talvez isso seja útil.
Você pode perguntar como atualmente roteará pacotes para algo:
E então você pode perguntar qual "Serviço de Rede" está gerenciando essa interface:
Mas, honestamente, duvido que um "Serviços de Rede" seja um para um com uma porta de hardware. E algumas interfaces, tun0, por exemplo, não possuem um "Serviço de Rede". Bem, pelo menos às vezes eles não.
fonte
Extraído de Localizar histórico detalhado de conexões Wi-Fi na linha de comando do Mac OS X | OSXDaily :
Você obtém muitas informações sobre o histórico de conexões, incluindo os detalhes da atual.
Não é perfeito, mas você obtém as informações que procura - e muitas informações extras mais!
fonte
Aqui está um script de casca de peixe que escrevi:
Ele mostra todas as interfaces de rede ativas e dados relevantes.
Comente o que você não quer / precisa
fonte
echo_italic
função shell em vez de agrupar todos essesecho
s emset_color
chamadas.set_color
comandos podem ser removidos. Eles são apenas 'decorativos'.set_color
comandos e variáveis colocar dentro declarações de ecoNão tenho certeza se isso é útil para alguém, mas como eu estava mexendo na mesma pergunta, cheguei a esta solução:
ifconfig | grep flags=8863 | grep -v bridge
A saída será semelhante a esta e lista apenas as portas Ethernet e Wi-Fi que estão em uso ativo:
Se você também quiser ver o endereço IPv4 atribuído:
ifconfig | grep 'flags=8863\|inet ' | grep -v 'bridge\|127.0.0.1'
O que produz algo parecido com isto;
Outra alternativa:
scutil --nwi
O que mostra aos dispositivos de rede online a última linha, na verdade, mostra as interfaces de rede atualmente ativas:
O processamento adicional, se necessário, depende de você. :-)
Nota:
Lembre-se de que não sou especialista nas bandeiras (8863). Você pode encontrar os detalhes da bandeira no arquivo de cabeçalho if.h - o Spotlight é seu amigo ao encontrar "if.h". Eu encontrei o meu, por exemplo, aqui:
que mostrará o que as bandeiras significam (lembre-se: hexadecimal);
fonte