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 ping toujours vrai


Sujet :

Shell et commandes GNU

  1. #1
    Invité
    Invité(e)
    Par défaut Script ping toujours vrai
    Bonjour, je souhaite faire un ping de toutes les @ip d'un reseau
    dans l'exemple
    val= 192.168.1.X

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    i=0
    b=255
     
     while [ $i -lt $b ];do
        i=$((i+1));
        val="${S1}"."${S2}"."${S3}"."${i}"
        ping -c 1 "${val}" > /dev/null
        Echo "{val}"
        if [[ $? -eq 0 ]];then 
            echo "ping reussi"
        else
            echo "ping HS"
        fi;
    done
    Mon probleme est $? est toujours egale a zero meme quand le ping ne reussi pas ...

    Merci de votre aide

    Arnaud
    Dernière modification par N_BaH ; 05/07/2022 à 12h53.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >/tmp/resultat.txt; for i in 192.168.1.{0..255};do ping -c 1 $i | sed -nz '/rtt/p' >>/tmp/resultat.txt & done; wait;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat /tmp/resultat.txt
    PING 192.168.1.54 (192.168.1.54) 56(84) bytes of data.
    64 bytes from 192.168.1.54: icmp_seq=1 ttl=64 time=0.023 ms
     
    --- 192.168.1.54 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.023/0.023/0.023/0.000 ms
    PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
    64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.559 ms
     
    --- 192.168.1.254 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.559/0.559/0.559/0.000 ms
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Merci, mais je ne souhaite pas que le résultat soit dans un fichier texte mais bien dans le terminal
    Si le ping réussi je vérifie quels ports sont ouverts
    Dernière modification par al1_24 ; 09/07/2022 à 14h22. Motif: Citation superflue

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Si j'ai mis le résultat dans un fichier, c'est uniquement pour débarrasser la sortie de messages d'erreur et les messages système. C'est plus clair. Mais si tu ne veux pas de redirection dans un fichier, libre à toi.

    Libre à toi, également, de retraiter la sortie pour extraire les IP à port ouvert. Ici 54 et 254.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ for i in 192.168.1.{0..255};do ping -c 1 $i 2>/dev/null| sed -nz '/rtt/p' & done | sed -n '/statistics/s/.*[^0-9]\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p'
    192.168.1.54
    192.168.1.254
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci

    Grâce à ton aide j'ai pu comprendre d'où venait le problème

    Pour me rassurer je fais des échos de mes variables
    Du coup le If récupère la valeur de mon écho et non de mon ping

    C'est corrigé le code fonctionne très bien
    Dernière modification par al1_24 ; 09/07/2022 à 14h23. Motif: Citation superflue

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par nonobike Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ping -c 1 "${val}" > /dev/null
        Echo "{val}"
        if [[ $? -eq 0 ]];then 
            echo "ping reussi"
        else
            echo "ping HS"
        fi;
    Mon probleme est $? est toujours egale a zero meme quand le ping ne reussi pas ...
    Ben, normal: le "$?" est la valeur de retour de la dernière instruction.
    Or ici la dernière instruction est Echo "{val}" ... qui réussit toujours !

    Après être tombé un nombre incalculable de fois dans ce piège, j'ai décidé de ne plus utiliser "$?", ou alors juste en affectation et sur la même ligne (comme ça il n'y a pas la place d'ajouter des traces):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ping -c 1 "${val}" > /dev/null; res=$?
        Echo "{val}"
        if [[ $res -eq 0 ]];then 
            echo "ping reussi"
        else
            echo "ping HS"
        fi;
    ou mieux, sans variable intermédiaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Echo "{val}"
        if ping -c 1 "${val}" > /dev/null; then 
            echo "ping reussi"
        else
            echo "ping HS"
        fi;

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/05/2007, 20h27
  2. script ping réseau
    Par tbechir76 dans le forum Réseau
    Réponses: 2
    Dernier message: 15/12/2006, 15h15
  3. script ping toutes les 5 minutes
    Par suya95 dans le forum Programmation et administration système
    Réponses: 13
    Dernier message: 03/10/2006, 13h45
  4. isset() toujours vrai avec $_POST
    Par mrttlemonde dans le forum Langage
    Réponses: 6
    Dernier message: 16/03/2006, 10h33
  5. WHERE toujours vrai
    Par Original Prankster dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/09/2005, 09h46

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