Existe uma maneira melhor de obter programaticamente os parâmetros de rede do sistema operacional Linux?

1

Estou escrevendo alguns scripts que precisam programaticamente obter muitos parâmetros de rede do sistema operacional Linux.

Por exemplo, o names of all network interfaces, ip address, netmask, MAC address . Para a interface sem fio, talvez eu também precise obter o bit rate, frequency, operating mode, transmit power, signal level, noise level , etc.

Atualmente, estou usando texto normal em progresso e expressão regular para analisar a saída de ferramentas de linha de comando do Linux como ifconfig, ip, route, iw and iwconfig . Um dos problemas deste método é que às vezes a saída será diferente do que esperávamos. É difícil prever todo o formato de saída possível para todos os cenários possíveis.

Existe uma maneira melhor de obter programaticamente os parâmetros de rede do sistema operacional Linux?

    
por userpal 23.08.2014 / 08:33

2 respostas

2

Para os nomes de todas as interfaces de rede definidas, basta olhar o conteúdo do diretório /sys/class/net .

Para o resto, depende do que você entende por "Linux OS". Se você está se referindo às versões atuais de desktop do Ubuntu, então o utilitário de linha de comando nmcli parece fornecer muitas das funcionalidades que você está procurando, por exemplo.

$ nmcli --terse --fields FREQ,RATE,SIGNAL dev wifi list bssid XX:XX:XX:XX:XX:XX
5220 MHz:54 MB/s:70

$ nmcli --terse --fields IP4 dev list iface wlan0
IP4.ADDRESS[1]:ip = 192.168.1.16/24, gw = 192.168.1.1
IP4.DNS[1]:192.168.1.1

Se isso não fornecer o controle preciso necessário, você poderá fazer o seu próprio interface com o DBUS usando as ferramentas de linha de comando dbus-send e / ou dbus-monitor ou as APIs DBUS da C ou python - a documentação é um pouco magro, mas há um ou dois tutoriais úteis, por exemplo, Tutorial Dbus - Diversão com o Network Manager

    
por steeldriver 23.08.2014 / 15:55
1

isso pode ajudar (desde que você não se importe com python):

link

página 66 (79)

como esta receita depende do c sys-call, talvez seja melhor escrever um módulo em C.

    
por user309383 23.08.2014 / 09:54