Script simples para monitorar o status sem fio

3

Eu quero criar um script que monitore o status da rede (não sei se existem programas que já fazem o que eu quero fazer ainda melhor).

Estou interessado apenas em monitorar a intensidade do sinal e a taxa de bits de um dispositivo conectado a um ponto de acesso, e estou tentando criar um script .sh para fazer isso, por exemplo, por um minuto, e criar um arquivo de saída, por exemplo, com este formato:

TIME (s)    SIGNAL STRENGTH (dBm)   BITRATE (Mbit/s)

00                   -53                 54

05                   -50                300

10                   -55                 54

15                   -60                 36

Estes dados podem ser obtidos a partir do comando:

$ iw dev wlan1 station dump
Station 12:34:56:78:9a:bc (on wlan0)
        inactive time:  304 ms
        rx bytes:       18816
        rx packets:     75
        tx bytes:       5386
        tx packets:     21
        signal:         -29 dBm
        tx bitrate:     54.0 MBit/s

Ou o comando:

$ iw dev wlan0 link
Connected to 04:21:b0:e8:c8:8b (on wlan0)
        SSID: attwifi
        freq: 2437
        RX: 2272 bytes (18 packets)
        TX: 232 bytes (3 packets)
        signal: -57 dBm
        tx bitrate: 36.0 MBit/s

Não sei se expliquei isso bem, quero obter esses dados de qualquer maneira e salvá-los em um arquivo (por exemplo, .txt). Eu quero escrever periodicamente os dados que eu preciso (taxa de bits Tx e sinal) para um arquivo, portanto, o arquivo ficará maior ao longo do tempo.

A maneira de obter os dados eu não sei o que seria, eu sei que esses dados aparecem nos comandos que eu coloquei acima.

Eu gostaria que o script registrasse o horário de início (ou solicitasse um nome) sem sobrescrever os dados antigos.

Alguém poderia me ajudar na criação de um script para conseguir o que eu quero? E outra coisa, como eu poderia criar o temporizador? Ou, na falta disso, alguém poderia me dizer alguma ferramenta para fazer alguma coisa? Alguém conhece uma ferramenta para fazer o que eu quero fazer?

    
por AntonioG 29.03.2016 / 18:17

1 resposta

0

Isso deve ser feito:

#!/bin/bash
printf '%s\nTIME (s)\tSIGNAL STRENGTH (dBm)\tBITRATE (MBit/s)\n' "$(date --iso-8601=seconds)" >>log
for ((i=0; i<=60; i=i+5)); do
    iw dev wlp3s0f0 station dump | awk -vt=$i '=="signal:"{s=} =="bitrate:"{b=} END {printf "%d\t%d\t%.1f\n", t, s, b}' >>log
    sleep 5
done

Ele anexará o horário atual no formato ISO 8601 seguido por esse cabeçalho em um arquivo denominado log no diretório de trabalho atual e anexará a saída relevante de iw dev wlan1 station dump nesse formato a ele a cada 5 segundos, por 60 segundos .

Exemplo de execução na minha máquina:

% bash script.sh 
^C
% cat log 
2016-03-29T20:00:22+0200
TIME (s)    SIGNAL STRENGTH (dBm)   BITRATE (MBit/s)
0   63  54.0
5   40  54.0
10  63  54.0

Para imprimir também a taxa de bits RX:

#!/bin/bash
printf '%s\nTIME (s)\tSIGNAL STRENGTH (dBm)\tTX BITRATE (MBit/s)\tRX BITRATE (MBit/s)\n' "$(date --iso-8601=seconds)" >>log
for ((i=0; i<=60; i=i+5)); do
    iw dev wlp3s0f0 station dump | awk -vt=$i '=="signal:"{s=} ="tx"&&=="bitrate:"{tb=} ="rx"&&=="bitrate:"{rb=} END {printf "%d\t%d\t%.1f\t%.1f\n", t, s, tb, rb}' >>log
    sleep 5
done
    
por kos 29.03.2016 / 19:28