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

C Discussion :

Ecriture d'une boucle ping dans un fichier text


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Ecriture d'une boucle ping dans un fichier text
    Bonjour à tous,

    Dans le but d'un stage en réseau, j'ai une multitude d'adresses IPs à pinguer. A là base je voulais lire un fichier avec une liste d'adresses, faire un ping sur chacune d'elles et réécrire le résultat dans un fichier texte...Mais cela me prendrais beaucoup de temps. Donc, j'ai choisi de faire une boucle ping en incrémentant chaque adresse, jusque là tout va bien, mais il me faudrais écrire le résultat dans un fichier comment puis-je faire?

    Merci d'avance pour votre aide...

    Voici mon code "boucle":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h> 
    #include <stdlib.h>
     
    int main() {
        int x;
        char tmp[512];
      for(x=1 ; x<=255 ; x++)
      {
      sprintf(tmp,"ping -a 10.21.1.%d",x);
      system(tmp);
       }
      return 0;
    }

    Voici mon code "tentative":

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include <stdio.h> 
    #include <stdlib.h>
     
    int main() 
    {
     
        FILE *fichier; 
        FILE *fichier2; 
        int x;
        char tmp[512];
        int ret;
     
    fichier = fopen ("file.txt","r"); 
    fichier2 = fopen ("fichier2.txt", "w"); 
     
    fscanf(fichier2, "%s\n",tmp); 
     
      for(x=1 ; x<=255 ; x++)
      {
      sprintf(tmp,"ping 10.21.1.%d",x);
      system(tmp);
    }
      ret=system(tmp);
     
      if (ret==1) 
    { 
    fprintf (fichier2, "%s\n", tmp); 
    } 
    system ("pause"); 
     
     
    }

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il te faut mettre ton traitement d'analyse du résultat dans la boucle des ping.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       for(x=1 ; x<=255 ; x++)
       {
          sprintf(tmp,"ping 10.21.1.%d",x);
          ret=system(tmp);
          if (ret==1) 
          { 
             fprintf (fichier2, "%s\n", tmp); 
          } 
       }

    Et au passage, travaille aussi la présentation de ton code, cela sera plus agréable, facile et rapide à lire pour les autres

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Salut,
    Merci pour l'intérêt que tu portes à mon poste...Donc j'ai corriger mon code mais dans le fichier2.txt toujours rien, capendant les pings sont bien effectués. Que dois-je rajouter?

    Mon code:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <stdio.h> 
    #include <stdlib.h>
     
    int main() 
    { 
      FILE *fichier2;
      int x;
      char tmp [512];
      int ret;
     
     
      fichier2 = fopen ("fichier2.txt", "w"); 
     
      fscanf(fichier2, "%s\n",tmp); 
     
      for(x=1 ; x<=255 ; x++)
       {
          sprintf(tmp,"ping 10.21.1.%d",x);
          ret=system(tmp);
          if (ret==1) 
          { 
             fprintf (fichier2, "%s\n", tmp); 
          } 
       }
      return EXIT_SUCCESS;
    }
    P.S.: Concernant la mise en forme du code via la balise QUOTE je n'y peux rien ou du moins je ne sais pas comment mieux faire, ça aligne tout le texte malgré ma mise en forme.

    ping 10.21.1.1 est inscrite dans fichier2.txt mais ça s'arrête là...problème de mise en mémoire..? Tableau trop petit (tmp [512])..?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je pense surtout que 10.21.1.1 est la seule adresse pour laquelle system("ping 10.21.1.x"); retourne 1.

    Tous les autres appels doivent retourner autre chose que 1.

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    ou l'appel à system ne retourne pas. ping sous M$ par défaut fait 4 tests mais sous unixoïde et sans argument la commande ping ne s'arrête pas...

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut RE:
    J'ai rajouté des copier-coller de la fonction "printf" et ça ne marque (ping 10.21.1.1 - ping 10.21.1.3) dans fichier2.txt que les adresses qui ne répondent pas...et moi je veux le contenu du ping, je voudrais avoir tout ce qui s'affiche dans ma fenêtre DOS..? Comment faire?

    Merci encore.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par jowo Voir le message
    ou l'appel à system ne retourne pas.
    Dans ce cas, la 1ere ligne ne serait pas écrite non plus.

    Citation Envoyé par jowo Voir le message
    ping sous M$ par défaut fait 4 tests mais sous unixoïde et sans argument la commande ping ne s'arrête pas...
    C'est vrai, donc je pense que notre ami est sous Microsoft

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut RE:
    Oui, pardon je suis sous Windows XP (en mode Administrateur), c'est le PC du boulot.

  9. #9
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par bwabwa97 Voir le message
    moi je veux le contenu du ping, je voudrais avoir tout ce qui s'affiche dans ma fenêtre DOS..? Comment faire?
    Pour récupérer le contenu de ce qui s'affiche, on passe par la fonction popen.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut RE:
    Et donc..? J'ai remplacer "fopen" par "_popen" et euh le fichier s'ouvre mais rien ne s'écrit dans mon fichier..

  11. #11
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par bwabwa97 Voir le message
    Et donc..? J'ai remplacer "fopen" par "_popen" et euh le fichier s'ouvre mais rien ne s'écrit dans mon fichier..
    Perdu, il fallait remplacer system par popen.

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut RE:
    Euh non...rien y fait.
    G cependant rajouté la fonction write() et fwrite() au pifomètre:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include <stdio.h> 
    #include <stdlib.h>
     
    int main() { 
    FILE *fichier2;
    int x;
    char tmp [2048];
    int ret;
     
     
    fichier2 = fopen ("fichier2.txt", "w"); 
     
    fscanf(fichier2, "%s\n",tmp); 
     
      for(x=2 ; x<=3 ; x++)
       {
          sprintf(tmp,"ping -a 10.21.1.%d",x);
          ret= system(tmp);
     
          if (ret!=0) 
          { 
     
             //fprintf (fichier2, "%s\n", tmp); 
             fwrite ((char*) tmp,sizeof(char),1024,fichier2);
          } 
       }
      return EXIT_SUCCESS;
    }

  13. #13
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    Le pifomètre en informatique, on le laisse dans un tiroir fermé à double tour. A la place du pifomètre, on ouvre la documentation à la page de la description de popen.

Discussions similaires

  1. Ecriture d'une macro-variable dans un fichier XML
    Par mathieu.le-corre dans le forum Macro
    Réponses: 2
    Dernier message: 28/02/2014, 14h05
  2. Sauver valeur d'une boucle for dans un fichier texte
    Par nikob88 dans le forum MATLAB
    Réponses: 8
    Dernier message: 25/05/2012, 15h18
  3. aller à une position précise dans un fichier texte
    Par bassidi meryeme dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2005, 14h57
  4. copier le contenu d'une page web dans un fichier texte
    Par wassila dans le forum C++Builder
    Réponses: 30
    Dernier message: 28/08/2005, 22h27
  5. Réponses: 2
    Dernier message: 16/07/2004, 09h30

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