web-dev-qa-db-fra.com

Script simple pour surveiller l'état sans fil

Je veux créer un script qui surveille l'état du réseau (je ne sais pas s'il existe des programmes qui font déjà ce que je veux faire encore mieux).

Je suis uniquement intéressé par la surveillance de la force du signal et du débit binaire d'un périphérique connecté à un point d'accès, et j'essaie de créer un script .sh pour le faire, par exemple pendant une minute, et pour créer un fichier de sortie, par exemple, avec ce format:

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

00                   -53                 54

05                   -50                300

10                   -55                 54

15                   -60                 36

Ces données peuvent être obtenues à partir de la commande:

$ 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 la commande:

$ 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

Je ne sais pas si je l'ai bien expliqué, je veux obtenir ces données de quelque manière que ce soit et les enregistrer dans un fichier (par exemple .txt). Je veux écrire périodiquement les données dont j'ai besoin (débit binaire Tx et signal) dans un fichier, donc le fichier s'agrandira avec le temps.

La façon d'obtenir les données je ne sais pas ce que serait, je sais que ces données apparaissent dans les commandes que j'ai mises ci-dessus.

Je voudrais que le script enregistre l'heure de début (ou demande un nom) sans écraser les anciennes données.

Quelqu'un pourrait-il m'aider à créer un script pour obtenir ce que je veux? Et une autre chose, comment pourrais-je créer la minuterie? Ou à défaut, quelqu'un pourrait-il me dire un outil pour faire quelque chose? Est-ce que quelqu'un connaît un outil pour faire ce que je veux faire?

2
AntonioG

Cela devrait faire:

#!/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 '$1=="signal:"{s=$2} $2=="bitrate:"{b=$3} END {printf "%d\t%d\t%.1f\n", t, s, b}' >>log
    sleep 5
done

Il ajoutera l'heure actuelle au format ISO 8601 suivie de cet en-tête à un fichier nommé log dans le répertoire de travail actuel et ajoutera la sortie appropriée de iw dev wlan1 station dump dans ce format toutes les 5 secondes, pendant 60 secondes.

Exemple d'exécution sur ma machine:

% 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

Pour imprimer également le débit 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 '$1=="signal:"{s=$2} $1="tx"&&$2=="bitrate:"{tb=$3} $1="rx"&&$2=="bitrate:"{rb=$3} END {printf "%d\t%d\t%.1f\t%.1f\n", t, s, tb, rb}' >>log
    sleep 5
done
0
kos