Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXECUTER COMMANDE PING [DEV-CPP]


Information sur la source

Catégorie :Réseaux & Internet Niveau : Débutant Date de création : 28/12/2002 Date de mise à jour : 28/12/2002 10:28:16 Vu : 16 463

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

Voilà un moyen, peut être un peu barbare, d'executer une commande ping sur un reseau local et d'en recevoir le resultat ...
 

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <string.h>
  • int ping (char ip[50]);
  • void main (void)
  • {
  • int result;
  • char ip[50];
  • strcpy (ip,"129.46.0.2");
  • result = ping (ip);
  • printf ("0 pour offline, 1 pour online : %d",result);
  • getchar();
  • }
  • int ping (char ip[50])
  • {
  • int result = 0;
  • char commande[100];
  • strcpy (commande,"ping ");
  • strcat (commande,ip);
  • strcat (commande, " -n 1 > temp");
  • system(commande);
  • FILE * temp;
  • temp = fopen ("temp","r");
  • char test[50];
  • while (!feof (temp))
  • {
  • fscanf (temp,"%s",test);
  • if (strcmp (test,"TTL=128") == 0)
  • {
  • result = 1;
  • }
  • }
  • fclose(temp);
  • return result;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int ping (char ip[50]);

void main (void)
{
int result;
char ip[50];
strcpy (ip,"129.46.0.2");
result = ping (ip);
printf ("0 pour offline, 1 pour online : %d",result);
getchar();
}

int ping (char ip[50])
{
int result = 0;
char commande[100];
strcpy (commande,"ping ");
strcat (commande,ip);
strcat (commande, " -n 1 > temp");
system(commande);
FILE * temp;
temp = fopen ("temp","r");
char test[50];
while (!feof (temp))
{
      fscanf (temp,"%s",test);
      if (strcmp (test,"TTL=128") == 0)
      {
           result = 1;
      }
}
fclose(temp);
return result;
}

Conclusion

Si quelqu'un a une autre methode simple, je suis preneur, surtout si elle est plus rapide ...
 

Commentaires et avis

signaler à un administrateur
Commentaire de Kaid le 28/12/2002 10:58:49

Deux liens qui vont certainement d'intéresser (il faut s'enregistrer sur le site pour télécharger les fichiers) :

http://www.codeproject.com/internet/winping.asp
http://www.codeproject.com/internet/cping.asp

signaler à un administrateur
Commentaire de Funcky le 28/12/2002 11:08:59

Merci, jevais regarder ca ...

signaler à un administrateur
Commentaire de zzzzzz le 21/02/2003 11:48:37

arf elle est bien ta sources mais ya aucunes explications :(

signaler à un administrateur
Commentaire de HotSpot le 03/05/2003 16:05:46

Fo dire qu'elle est pas si compliqué que ca ... les explications ne sont pas requise...

signaler à un administrateur
Commentaire de JCpp le 27/10/2003 18:50:40

Comme c'est mon 1er programme PING, je ne comprends pas bien tout DSL.

Donc, STP pourrais tu me donner quelle que explications.
Pourquoi tu ouvres ce fichier, tu ne l'envois pas pour savoir combien de temps cela a pris ?
J'obtiens result = 1, pourquoi ?

Merci Bcp

signaler à un administrateur
Commentaire de Funcky le 27/10/2003 20:00:12

Je ne m'occupe pas du temps, je regarde juste si l'ordi distant répond .. Si il répond, result vaut 1, si il ne répond pas, il vaut 0 ...

signaler à un administrateur
Commentaire de JCpp le 27/10/2003 23:20:47

Ton programme me plaît vraiment beaucoup, sauf que ça ouvre une fenêtre MS-DOS, il y a-t-il un moyen, une autre façon pour qu'elle n'apparaisse pas, ou une autre fonction que « system » ?
Car ma source est en WiIN32
Merci

signaler à un administrateur
Commentaire de Funcky le 28/10/2003 09:01:49

A mon avis en utilisant les thread avec la fonction fork() il doit y avoir moyen, mais je ne serais aps t'aider beaucoup plus que ca ...

signaler à un administrateur
Commentaire de JCpp le 28/10/2003 19:21:33

Bon, j'ai un peux galéré pour amélioré ton prog.

Remplace :
system(commande);
par :
ShellExecute(0,"open",commande,0,0,SW_NORMAL);

Une autre question, ci on tape sur la fenêtre MS-DOS :
C:ping XXX.XXX.XXX.XXX -n 1

Durée approximative des boucles en millisecondes :
Minimum = 0ms, maximum =0ms, Moyenne = 0ms

C'est tu récupérer ces informations, on obtiendrai la valeur du PING

Merci

signaler à un administrateur
Commentaire de 5h33ck0n le 20/04/2004 18:22:27

voila, jai utilisé la source, en changeant bien le system() par le ShellExecute et ca me donne ca =&gt;

int ping ( char ip [ 17 ] )
{
int result = 0; // declare result et l'initialise à 0

FILE * temp1 = fopen ( "Y:\\Textile\\PingTextile v9\\ping\\pingping.bat" , "w+" );

char commande [ 45 ]; // tableau contenant la commande a envoyer
strcpy ( commande , "ping " ); //
strcat ( commande , ip ); // insertion de l'ip envoyé en parametre dans la commande
strcat ( commande , " -n 1 -i 1 -w 1 &gt; temp1" ); // insertion des paramètres envoyé avec la commande ping

fwrite( commande , sizeof ( char ) , 45 , temp1 );
fclose ( temp1 );

ShellExecute ( NULL , "open" , "Y:\\Textile\\PingTextile v9\\ping\\pingping.bat" , "" , "" , SW_HIDE );

//Sleep ( 200 );

FILE * temp2 = fopen ( "Y:\\Textile\\PingTextile v9\\ping\\temp1" , "r" ); // declare un pointeur temp2 sur le fichier temp1
char test [ 50 ]; // declaration d'un tableau test
while ( !feof ( temp2 )) // on parcour le fichier
{
        fscanf ( temp2 , "%s" , test ); // récupére une chaine qui correspond a un mot
        if ( strcmp ( test , "octets=32" ) == 0 ) // si ce mot vaut octets=32, on défini result à 1
        {
             result = 1;
        }
}
fclose ( temp2 ); // ferme temp2

return result; // on retourne la valeur de result
}



mais le pb cé kan je fait un apel a cette fonction ping a l'aide de ca (je suis en MFC) =&gt;

void CPingDlg::OnPC1()
{
char ip [ 17 ];
strcpy ( ip , "192.168.100.11" );
int result = ping ( ip ); // envoi 'ip' en parametre à la fonction ping

if ( result == 0) // affiche Offline si result = 0
{
m_result1 = "Offline";
}
else
{
if ( result == 1) // affiche Online si result = 1
{
m_result1 = "Online";
}
}

UpdateData ( FALSE );
}

et ben, je suis obligé de cliké 2 foi sur le bouton, pour avoir le vrai resultat ! il doit il y avoir un pb de "Updatedata" mais je voi pa ou ! (je me sui pa trompé sous MFC, jai bien mi le truc dan OnClik et pa OnDoubleClik) !! voila voila !!

merci davance !!

signaler à un administrateur
Commentaire de arthiolis le 25/04/2006 17:59:07

Bonjour

malgré ce que certains peuvent dire ( ui je sais que c'était pour améliorer ) mais je trouve ta source sympathique, et je vais sûrement m'en inspirer je pense pour un pti programme java qui ferait appelle à cette application que tu donnes. Bon on pourrait dire que la méthode est pas optimisée mais bon je le dis pas car je fais les même choses donc...  Sinon j'ai mis longtemps pour comprendre comment tu lisais le temp alors que je voyais pas comment il était rempli mais ca y est j'ai trouvé.

Bonne journée les gens.

signaler à un administrateur
Commentaire de iznotek le 18/07/2006 22:40:05

tip, top ton prog et malin
(pour ceux qui ne comprenne pas le prog à la premiere lecture: revision du C avec marabout!)
pour gagner du temps, on peut rajoute apres -n 1 : -w 100 ou moins
sur un "bon" reseaux local un ping repond en moins de 10ms e donc en 100 on sai deja que c'est foutu!
a tchaou


signaler à un administrateur
Commentaire de KeZyX le 29/05/2007 12:14:20

Salut.Voila,ton prog me plait bien mais je voudrais pouvoir tapper n'importe quelle adresse IP a l'aide d'un scanf.
Mais alors allez savoir pourquoi je n'y arrive pas,j'ai un probleme avec les strcpy je pense car au moment ou je tappe l'adresse et que je la valide,le prog se coupe et j'ai le droit au rapport d'erreures^^.
Quelqu'un pourrait-il m'aider?

signaler à un administrateur
Commentaire de xave4552 le 06/08/2007 01:41:36

Salut je suis totalement newbi en c++  je suis ariver a comprendre presque tout le programe mais g une ligne qui me pause problem esque kelkin pourait me la decrir svp
cet ligne est:
strcat (commande, " -n 1 > temp");

signaler à un administrateur
Commentaire de Renfield le 06/08/2007 06:14:36 administrateur CS

Google est ton ami:

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcat.3.html

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.