Aller au contenu

Module Lua ping

Le module ping permet d'effectuer des tests de connectivité réseau en envoyant des paquets ICMP (Internet Control Message Protocol) à une adresse IP ou un nom de domaine. Il est utile pour vérifier si un hôte est accessible sur le réseau.

Import

local ping = require("ping1")

Configuration YAML

Le module ping nécessite une configuration spécifique pour fonctionner. Cette configuration est définie dans le fichier de configuration de l'agent.

iot:
  modules:
    ping:
      - name: ping1           # nom unique du module
        count: 3              # nombre de paquets à envoyer (défaut : 3)
        timeout: 1000         # timeout total en millisecondes (défaut : 1000)
        privileged: true      # mode socket raw (défaut : true, nécessite root/cap_net_raw)

Détails de la configuration

  • name (string, requis) : Nom du module. Il doit être unique et ne pas contenir d'espaces ou de caractères spéciaux.
  • count (integer) : Nombre de paquets ICMP à envoyer. Par défaut 3.
  • timeout (integer) : Timeout total en millisecondes pour l'ensemble des paquets. Par défaut 1000.
  • privileged (boolean) : Si true, utilise des sockets raw (nécessite root ou cap_net_raw). Par défaut true.

API Lua

Liste des fonctions

Fonction Signature Lua Rôle Retour (succès) Retour (échec)
ping stats, err = ping.ping(target[, count[, timeout_ms]]) Test de connectivité ICMP. table, nil nil, "msg"
Champs ping.name, ping.type Métadonnées du module.

ping.ping(target[, count[, timeout_ms]])

Effectue un test de connectivité en envoyant des paquets ICMP à l'adresse cible spécifiée.

  • Paramètres :
  • target (string) : L'adresse IP ou le nom de domaine à tester.
  • count (integer, optionnel) : Nombre de paquets ICMP à envoyer. Par défaut, utilise la valeur de configuration.
  • timeout_ms (integer, optionnel) : Timeout total en millisecondes. Par défaut, utilise la valeur de configuration.

  • Retour :

  • En cas de succès : tableau de résultats, nil.
  • En cas d'erreur : nil, message d'erreur.

Le tableau de résultats contient : * target : L'adresse IP résolue de la cible. * sent : Le nombre de paquets envoyés. * received : Le nombre de paquets reçus. * packet_loss : Le pourcentage de perte de paquets (0-100). * min_rtt_us : Le temps de réponse minimum en microsecondes. * avg_rtt_us : Le temps de réponse moyen en microsecondes. * max_rtt_us : Le temps de réponse maximum en microsecondes. * stddev_us : L'écart type du temps de réponse en microsecondes.

local ping = require("ping1")

local result, err = ping.ping("example.com", 4, 2000)
if result then
    print("Ping réussi :")
    print("Cible : " .. result.target)
    print("Paquets envoyés : " .. result.sent)
    print("Paquets reçus : " .. result.received)
    print("Perte de paquets : " .. result.packet_loss .. "%")
    print("RTT min : " .. result.min_rtt_us .. " us")
    print("RTT moyen : " .. result.avg_rtt_us .. " us")
    print("RTT max : " .. result.max_rtt_us .. " us")
    print("RTT écart type : " .. result.stddev_us .. " us")
else
    print("Erreur lors du ping : " .. err)
end

Exemple complet

local ping = require("ping1")

-- Liste des hôtes à surveiller
local hosts = {
    "google.com",
    "192.168.1.1",
    "8.8.8.8"
}

for _, host in ipairs(hosts) do
    local result, err = ping.ping(host, 3, 1000)
    if result then
        if result.received > 0 then
            print(string.format("%s : OK (%.2f ms)", host, result.avg_rtt_us / 1000))
        else
            print(string.format("%s : UNREACHABLE (100%% loss)", host))
        end
    else
        print(string.format("%s : ERROR (%s)", host, err))
    end
end

Champs Lua associés

  • ping.name : Retourne le nom de l'instance du module.
  • ping.type : Retourne le type du module ("ping").