[C]Comment recuperer la valeur ke renvoie un ping sous linux ???

Comment recuperer la valeur ke renvoie un ping sous linux ??? [C] - C++ - Programmation

Marsh Posté le 09-07-2002 à 14:10:22    

Code :
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int result;
  5. result = system("ping -c 4 127.0.0.1" );
  6. printf ("%d" ,  result);
  7. }


 
j'ai fait ca, mais ca lance juste la commande PING ca recupere pas la valeur


Message édité par raph93 le 09-07-2002 à 14:11:05
Reply

Marsh Posté le 09-07-2002 à 14:10:22   

Reply

Marsh Posté le 09-07-2002 à 14:46:47    

Normal que ça ne récupère pas la valeur. La fonction system() ne sert qu'a executer des programmes dans ton systemeet ne renvoi en aucun cas le résultat de ta commande. (ex system("calc.exe" ) va te lancer la calculatrice windows et renverra 0 pour dire que ça s'est bien déroulé)
 
pour récuperer la chaine de ton ping tu peut rediriger le resultat de la commande dans un fichier temporaire :
 
system("ping -c 4 127.0.0.1 > temp" );
 
et ensuite tu traites le fichier 'temp' dans ton programme.


Message édité par ioio le 09-07-2002 à 14:48:05
Reply

Marsh Posté le 09-07-2002 à 14:55:31    

ioio a écrit a écrit :

Normal que ça ne récupère pas la valeur. La fonction system() ne sert qu'a executer des programmes dans ton systemeet ne renvoi en aucun cas le résultat de ta commande. (ex system("calc.exe" ) va te lancer la calculatrice windows et renverra 0 pour dire que ça s'est bien déroulé)
 
pour récuperer la chaine de ton ping tu peut rediriger le resultat de la commande dans un fichier temporaire :
 
system("ping -c 4 127.0.0.1 > temp" );
 
et ensuite tu traites le fichier 'temp' dans ton programme.




 
t'as pas compris , Linux contrairement a windows est censé renvoyer une valeur selon l'etat du ping
 
ex:  
 
1 = la machine reponds  
2 = la machine ne reponds pas  

Reply

Marsh Posté le 09-07-2002 à 14:58:49    

a bon ? a je savais pas ça pour le ping ... désolé

Reply

Marsh Posté le 09-07-2002 à 15:04:07    

ioio a écrit a écrit :

a bon ? a je savais pas ça pour le ping ... désolé




 
no problem  
 
merci kan meme  :jap:

Reply

Marsh Posté le 09-07-2002 à 15:19:54    

Je viens d'essayer ton programme, il marche très bien.
 
Y'a ptêt juste le printf("%d\n" ) à mettre.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 09-07-2002 à 15:50:51    

Jar Jar a écrit a écrit :

Je viens d'essayer ton programme, il marche très bien.
 
Y'a ptêt juste le printf("%d\n" ) à mettre.




 
toi non plus je crois ke t'as bien compris  :D  
 
je cherche a recuperer une valeur, et non pas le ping  :sol:

Reply

Marsh Posté le 09-07-2002 à 16:09:09    

raph93 a écrit a écrit :

toi non plus je crois ke t'as bien compris  :D  
 
je cherche a recuperer une valeur, et non pas le ping  :sol:


Bah soit tu fais un popen et tu parses la sortie (problème, ça risque de merder grave en fonction de la version), soit tu regardes le source du ping de netkit, ça fait 1000 lignes (dont peu doivent servir au ping proprement dit), et tu repompes ce dont tu as besoin.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 11-07-2002 à 00:50:28    

:bounce:


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 11-07-2002 à 00:53:11    

raph93 a écrit a écrit :

 :bounce:  




jar jar ta donné une solution bourinne certe mais implementable  

Reply

Marsh Posté le 11-07-2002 à 00:53:11   

Reply

Marsh Posté le 11-07-2002 à 21:19:36    

Jar Jar a écrit a écrit :

Je viens d'essayer ton programme, il marche très bien.
 
Y'a ptêt juste le printf("%d\n" ) à mettre.




 
Effectivement,sous un unix-like il faut un '\n' dans ton printf. Ton programme récupère bien la valeur dans la variable "result", mais rien ne s'affiche à l'écran parce que le tampon du printf n'est affiché que lorsqu'on fait un retour à la ligne.

Reply

Marsh Posté le 12-07-2002 à 01:05:20    

Jar Jar a écrit a écrit :

Bah soit tu fais un popen et tu parses la sortie (problème, ça risque de merder grave en fonction de la version), soit tu regardes le source du ping de netkit, ça fait 1000 lignes (dont peu doivent servir au ping proprement dit), et tu repompes ce dont tu as besoin.




 
Mauvaise solution Ping a un suid root, et je ne pence pas que le programme de raph93 soit destiné au root.

Reply

Marsh Posté le 12-07-2002 à 11:40:53    

beretta vexe a écrit a écrit :

Mauvaise solution Ping a un suid root, et je ne pence pas que le programme de raph93 soit destiné au root.


Le problème, c'est bien qu'ICMP n'est réservé qu'à root, puisqu'il est possible de forger n'importe quel paquet avec.
 
Il existe une possibilité de faire des pings en TCP, faudrait ptêt regarder de ce côté.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 12-07-2002 à 12:40:14    

Citation :


Il existe une possibilité de faire des pings en TCP, faudrait ptêt regarder de ce côté.

 
 
Non, un ping utilise un paquet ICMP echo ...un point c tout !!
Tu en confondrais pas avec les traceroutes qui eux peuvent se faire en udp, tcp, ou icmp du car les paquets envoyés ont juste un TTL modifié et les réponse sont des paquet ICMP Time-exceeded...
 
Si je me trompes pas, tout programme unix ressort une valuer de retour égale à 0 si le process se tremeine bien et différents de 0 si il ya aune erreur ...


---------------
------
Reply

Marsh Posté le 12-07-2002 à 16:28:05    

bienf a écrit a écrit :

 

Citation :


Il existe une possibilité de faire des pings en TCP, faudrait ptêt regarder de ce côté.

 
Si je me trompes pas, tout programme unix ressort une valuer de retour égale à 0 si le process se tremeine bien et différents de 0 si il ya aune erreur ...




 
En Bash, en effet mais j'ai jamais testé avec system() (on m'a dit que ca marché avec perl, alors pourquoi pas avec du C ) .

Reply

Marsh Posté le 12-07-2002 à 16:35:12    

Ce problème ne peut-il pas se régler à coup de grep et de cut ? Il faut obligatoirement du C ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed