Comment recuperer la valeur ke renvoie un ping sous linux ??? [C] - C++ - Programmation
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.
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
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
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.
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
je cherche a recuperer une valeur, et non pas le ping
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.
Marsh Posté le 11-07-2002 à 00:50:28
Marsh Posté le 11-07-2002 à 00:53:11
raph93 a écrit a écrit : |
jar jar ta donné une solution bourinne certe mais implementable
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.
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.
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é.
Marsh Posté le 12-07-2002 à 12:40:14
Citation : |
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 ...
Marsh Posté le 12-07-2002 à 16:28:05
bienf a écrit a écrit :
|
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 ) .
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 ?
Marsh Posté le 09-07-2002 à 14:10:22
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