IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script pour effectuer des pings suivant une liste


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Par défaut Script pour effectuer des pings suivant une liste
    Bonjour,

    Pourriez-vous m'aider à faire un script afin de pinger des IP (environ 150) à partir d'une liste.
    J'enregistrerai les résultats dans un fichier csv ou attaquerai directement une base mysql distante.

    exemple :
    192.168.0.1 OK
    192.168.0.2 KO

    Merci d'avance à vous
    Nicolas

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut,

    y a pas beaucoup de précisions, du coup je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read adresse
    do
      ping -c 3 ${adresse} && echo "${adresse} ok" || echo "${adresse} ko"
    done < ListeIP.txt >> AdressesPingées.txt

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Par défaut
    Bonjour hizoka, merci beaucoup pour le script.

    J'ai oublié de préciser que j'étais débutant en script shell :/

    J'ai ce message d'erreur , en root :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chmod +x ping.sh
    ./ping.sh
    -bash: ./ping.sh: /bin/bash^M: bad interpreter: No such file or directory
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #! /bin/bash
    while read adresse
    do
      ping -c 3 ${adresse} && echo "${adresse} ok" || echo "${adresse} ko"
    done < ListeIP.txt >> AdressesPingees.txt
    echo "ok"
    exit 0
    J'ai bien créé les 2 fichiers txt.

    Merci pour votre aide

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    sans espace normalement.

    le fichier ListeIP.txt doit contenir une liste d'ip (et uniquement ça) 1 par ligne.

    inutile de creer AdressesPingees.txt qui est créé automatiquement si besoin.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -bash: ./ping.sh: /bin/bash^M: bad interpreter: No such file or directory
    ça, ça a été écrit sur W$.

    il faut le convertir au format UNIX.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Par défaut
    Ca ne fonctionnait toujours pas.
    J'ai refais le script sous linux directement et c'est passé.

    Voici le résultat pour 2 IP :
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
    64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.018 ms

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 ms
    127.0.0.1 ok
    PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

    --- 192.168.0.1 ping statistics ---
    1 packets transmitted, 0 received, 100% packet loss, time 0ms

    192.168.0.1 ko
    Merci hizoka ! C'est bien ce que je recherchais.

    Du coup ma recherche va se préciser ;-)
    Je n'ai pas besoin du rapport du ping, juste comme cela (avec des points virgules, ça me permettra de le mettre en bdd) :
    192.168.0.1;KO
    127.0.0.1;OK
    Merci infiniment.
    Par contre le fait de faire 2 ping prend un petit peu de temps, j'ai peur pour mes 150 pings...

    Bonne soirée

    NB : N_BaH, j'ai vu ton message trop tard, j'ai vite trouvé le souci sur google avec le message d'erreur. Oui effectivement , le problème venait bien de ça ! Merci.

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    C'est ça que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #! /bin/bash
    NbTest=3
    while read adresse
    do
      ping -c ${NbTest} ${adresse} &>/dev/null && echo "${adresse};ok" || echo "${adresse};ko"
    done < ListeIP.txt >> AdressesPingees.txt
    echo "ok"
    exit 0
    j'ai ajouté une variable pour choisir le nombre de ping à réaliser par IP.
    j'ai remplacé l'espace avant ok/ko par un ;
    les retours de pings ne sont plus visibles.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par nicoreims Voir le message
    J'ai refais le script sous linux directement et c'est passé.

    NB : N_BaH, j'ai vu ton message trop tard, j'ai vite trouvé le souci sur google avec le message d'erreur. Oui effectivement , le problème venait bien de ça ! Merci.
    Juste pour information, tu peux soit:
    • écrire le script sous linux
    • écrire le script sous W$ puis utiliser la commande dos2unix (ou un bon tr ou sed)
    • si tu utilises NotePad++ sous W$, le configurer pour qu'il mette des fins de ligne pour linux/unix

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Pour régler le problème de vitesse, pourrait-on les lancer en parallèle?

    Genre (d'après la proposition d'hizoka):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #! /bin/bash
    NbTest=3
    while read adresse
    do
      { ping -c ${NbTest} ${adresse} &>/dev/null && echo "${adresse};ok" || echo "${adresse};ko" >> AdressesPingees.txt; } &
    done < ListeIP.txt 
     
    exit 0
    Je ne sais pas si ça peut marcher et n'ai pas trop les moyens de tester...

    Évidemment, l'ordre ne serait plus respecté...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Par défaut
    Merci beaucoup à tous pour votre aide, jack-ft et hizoka !

    Je testerai ce soir, mais oui c'est bien ce que je cherchais, merci hizoka .

  11. #11
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Ravi de pouvoir aidé

    @jack-ft
    Avec ta proposition, ne risque-t-on pas finalement de se retrouver avec pratiquement tous les tests simultanément ?
    Ca ne risque pas de poser de problème ?
    J'ai pas de recul là dessus, les seuls fois que j'ai utilisé du multithreads c'était en python et plutôt bien contrôlé...

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    Bonjour,
    Citation Envoyé par jack-ft Voir le message
    Pour régler le problème de vitesse, pourrait-on les lancer en parallèle?

    Genre (d'après la proposition d'hizoka):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #! /bin/bash
    NbTest=3
    while read adresse
    do
      { ping -c ${NbTest} ${adresse} &>/dev/null && echo "${adresse};ok" || echo "${adresse};ko" >> AdressesPingees.txt; } &
    done < ListeIP.txt 
     
    exit 0
    Je ne sais pas si ça peut marcher et n'ai pas trop les moyens de tester...

    Évidemment, l'ordre ne serait plus respecté...
    Je ne suis pas sur que ceci fonctionne correctement, la boucle peut se terminer avant que tous les ping soient finis et donc mourront avant la fin ,qu'il y ait le exit 0 ou non. Pour remédier à ce potentiel problème de synchro, il suffit de rajouter la commande wait, sans options, juste après la boucle.

  13. #13
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    pour la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < listeIP.txt xargs -P30 -IIP bash -c "ping -q -c1 -W1 IP > /dev/null && echo IP OK || echo IP KO"
    les pings partent par lots de 30, 1 seul paquet par ping, 1s de timeout, sur un range C privé sur mon archi le tout prend moins de 10s

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Par défaut
    Je viens de tester, ça marche très bien.
    Juste le format du fichier de résultat dont l'affichage est variable si je l'ouvre avec vi, nano, ou notepad.

    Exemple :

    wordpad
    127.0.0.1
    ;ok
    192.168.0.1
    ;ko
    notepad
    127.0.0.1;ok192.168.0.1;ko
    vi
    127.0.0.1^M;ok
    192.168.0.1^M;ko

    nano
    127.0.0.1
    ;ok
    192.168.0.1
    ;ko
    J'ai bien passé le script avec dos2unix.

    Merci à vous

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    dans quel environnement exécutes-tu le script ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Script pour mettre des données sur une même ligne
    Par initial32 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/12/2014, 13h45
  2. Script pour trouver des blocs dans un listing
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 06/01/2012, 08h43
  3. Script pour créer des utilisateurs virtuels à une application J2EE
    Par abdimen dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 27/04/2011, 13h52
  4. [BATCH]script pour encoder des fichiers dans une arborescence
    Par ashgan44 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 11/05/2009, 15h04
  5. script pour effectuer un ping sur unr ip
    Par justaf dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/02/2007, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo