web-dev-qa-db-fra.com

ping plusieurs adresses IP de mysql en utilisant bash?

Comment puis-je envoyer une requête ping à une liste d'adresses IP trouvées dans une base de données mysql depuis bash?

J'ai une table appelée nics contenant ces champs:

  • identifiant
  • identifiant d'utilisateur
  • iD de la machine
  • mac
  • ipv4
  • ipv6
  • dns
  • icmp => utilisé comme un binaire (0 = désactiver, 1 = activer). Cela dira au script s'il doit cingler l'ip
  • établi
  • modifié
1
Louis Ouellet

Voici comment j'ai construit mon application de surveillance (la partie qui utilise les messages ICMP pour récupérer un hôte actif). Dans mon cas, le serveur mysql (MariaDB) s'exécute sur le même ordinateur que l'application.

Dans ce cron, je n'utilise que 2 champs (ipv4 et icmp). Le champ icmp est utilisé pour déterminer si ces informations doivent être surveillées ou non.

voici le script:

#!/bin/bash

#variables

SQL_U=username
SQL_P=password
SQL_D=database

mysql -u ${SQL_U} -p${SQL_P} -D ${SQL_D} -e "SELECT ipv4 FROM nics WHERE icmp=1;" | while IFS=$'\t' read ipv4; 
do 
    if [ "$ipv4" != "ipv4" ]; then
        PING_IP=$ipv4
        PING_LOSS=0
        PING_TEST=$(fping -c 1 -p 20 ${PING_IP} | awk '{ print $1 }')
        if [ "$PING_TEST" = "$PING_IP" ]; then
            PING_LOSS=1
        fi
        PING_C=$(date +"%Y-%m-%d %H:%M:%S")

        mysql -u ${SQL_U} -p${SQL_P} -D ${SQL_D} -e "INSERT INTO ping (ipv4, loss, created, modified) VALUES ('${PING_IP}', '${PING_LOSS}', '${PING_C}', '${PING_C}');"
    fi
done

Tous les résultats sont insérés dans une table appelée ping. Dans lequel j'insère l'ip, le résultat ping en binaire (0 = perte, 1 = reçu), date de création et de modification. Avec ce script, je peux surveiller environ 100 ips (pour l’instant) toutes les 5 minutes et collecter des statistiques.Assurez-vous que j’utilise fping au lieu de faire un ping sur une machine stretch Debian. En raison de ses nombreuses fonctionnalités.

1
Louis Ouellet