Existe uma maneira, na linha de comando, dado um endereço MAC de uma interface de rede local na máquina atual (por exemplo 01:23:45:67:89:ab
), para determinar se essa interface é WiFi ou com fio?
Estou tentando fazer isso em um script de shell.
Existe uma maneira, na linha de comando, dado um endereço MAC de uma interface de rede local na máquina atual (por exemplo 01:23:45:67:89:ab
), para determinar se essa interface é WiFi ou com fio?
Estou tentando fazer isso em um script de shell.
Além da peculiaridade de que o método deles ( eu acho ) também poderia relatar interfaces sem fio virtuais como interfaces sem fio reais (o que, novamente, acho que deveria ser facilmente resolvido apenas inspecionando
/sys/class/net/*/
um pouco mais) @PhilippWendler tem uma maneira ainda mais simples abaixo, que envolve simplesmente inspecionar/sys/class/net
, que acredito ser o mais simples possível, então verifique também a resposta deles.Outra maneira de usar
lshw
+jq
; deve ser bastante robusto, pois dependelshw
de detecção ejq
análise.Isso pressupõe
bash
(por causa do&>/dev/null
redirecionamento;&>/dev/null
pode ser alterado para>/dev/null 2>&1
uso combash
shells não compatíveis e conformidade com POSIX):Isto será
echo
"sim" apenas caso um dispositivo de "rede" seja classificado como "Interface sem fio" e seu endereço MAC seja "01:23:45:67:89:ab"; naturalmente, seria melhor refatorar isso em uma função para facilitar o uso:Uso:
Você também pode remover o
echos
para que a função retorne um código de status e para poder executar alguma lógica diferente nela:Parece muito fácil extrair essas informações
/sys
sem ferramentas especiais:A resposta de Kos é uma maneira melhor, use-a. Estou confiando na análise de texto ingênua aqui, então se, por algum estranho acaso, a string do endereço MAC aparecer em alguma outra parte das saídas que analiso, afirmarei incorretamente que é um dispositivo sem fio. Por exemplo, se você procurar
ff:ff:ff:ff:ff:ff
na saída deip addr
, você o encontrará, mas esse não é um MAC válido de um dispositivo sem fio existente. A resposta de Kos pode lidar com isso com elegância.Aqui está uma maneira, mas não tenho certeza de quão robusta ela é:
O
iwconfig
comando mostra apenas informações para placas wireless, portanto, se o seu MAC não estiver na saída, não deverá ser de um dispositivo wireless.Como alternativa, você pode fazer algo mais indireto, como obter o nome do dispositivo
/proc/net/wireless
e verificar o MAC na saída deip
. Assim:No meu sistema,
/proc/net/wireless
fica assim:Portanto, o
awk
comando está sendo usado:
como separador de campo, para que o primeiro campo,$1
, sejawlp9s0
e!/\|/
garanta que imprimiremos apenas nas linhas que não contêm|
, para obtermos apenas linhas de dispositivo e não cabeçalhos. A seguir, a saída deip addr
fica assim:Portanto, se essa saída contém o seu MAC, você pode presumir que é realmente de um dispositivo sem fio. Tipo. Se você configurar seu MAC para ser
ff:ff:ff:ff:ff:ff
Claro, você pode ter mais de um dispositivo sem fio, então esta pode ser uma opção melhor para cobrir essa possibilidade:
Em sistemas que usam NetworkManager, você pode considerar usar
nmcli
para obter o MAC do dispositivo (conhecido como HWADDR) e o TYPE:Parece não permitir a pesquisa direta de dispositivos pelo MAC, portanto o pós-processamento ainda é necessário - por exemplo, com
awk
Se você quiser transformar isso em algum tipo de função de indicador, você pode fazer algo assim:
Então
(MAC BC:AE:C5:7D:A0:AA encontrado e IS wifi)
(MAC 08:00:27:8E:46:AB encontrado, mas NÃO é wifi)
(MAC FF:FF:FF:FF:FF:FF não encontrado).