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?
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