Como o networkmanager (nmcli) consegue obter a força do meu sinal wifi sem privilégios de root?

0

No meu sistema, para descobrir a qualidade do sinal wifi conectado, eu teria que executar sudo iwconfig wlp6s0 onde wlp6s0 é o nome da interface do dispositivo que estou usando para conectar ao wifi. A saída não mostra a qualidade do link ou o nível do sinal se eu não executar o comando com sudo . No entanto, posso obter a força do sinal do Wi-Fi usando nmcli sem usar sudo , por exemplo. nmcli dev wifi .

Executando sudo strace iwconfig wlp6s0 , descobri que ele usa ioctl chamada do sistema, conforme indicado na linha strace output:

ioctl(3, SIOCGIWSTATS, 0x7ffd1bd7e960) = 0

Mas acontece que strace nmcli dev wifi não usa a mesma chamada de sistema para obter a força do sinal wifi ou informações relevantes.

Eu quero saber como nmcli obtém as informações necessárias para exibir a intensidade do sinal de Wi-Fi sem usar sudo .

EDIT: Saída de ambos os strace s:

  1. Saída completa de strace nmcli dev wifi : link

  2. Saída completa de sudo strace iwconfig wlp6s0 : link

por amenji 16.12.2017 / 02:42

2 respostas

0

É provável que entre em contato com o serviço do Network Manager usando o D-Bus, e o serviço Network Manager seja executado como root.

~ ps -o pid,user,cmd -C NetworkManager
  PID USER     CMD
  894 root     /usr/sbin/NetworkManager --no-daemon
    
por 16.12.2017 / 02:45
0

Eu sou não executando o gerenciador de rede, e /sbin/iw wlan0 station dump pode mostrar a intensidade do sinal muito bem sem ser raiz.

Se eu fizer um strace , vejo que ele cria um soquete NETLINK e parece obter os dados desse soquete. Para mais detalhes, suponho que se deve ler a fonte de iw .

    
por 16.12.2017 / 08:05