Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2892 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Récupération de temps de réponse (PING) en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupération de temps de réponse (PING) en C

n°1807060
d'jo
Posté le 31-10-2008 à 18:54:11  profilanswer
 

Bonsoir,
 
Je cherche à faire un programme récupérant des temps de réponse . Je m'explique :
manuellement je pourrait faire ping 192.168.1.1 et observer le tps de réponse. Là, je veux que mon programme  
récupère ce temps de réponse pour l'enregistrer dans une variable. Le problème s'est qu'un system("ping ..." )
me renverra seulement 1 ou 0 selon que le ping est fonctionné.
Comment puis-je faire autrement ?
(Mon niveau n'est pas très élevé alors merci d'expliciter si vous pouvez)
 
Jo

mood
Publicité
Posté le 31-10-2008 à 18:54:11  profilanswer
 

n°1807091
matafan
Posté le 31-10-2008 à 20:35:58  profilanswer
 

La solution sale, c'est d'exécuter la commande externe "ping" comme tu le propose. popen() permet de faire ça et de lire la sortie standard de la commande, ou tu peux récupérer le temps (enfin, si tu es sous un unixoïde, je ne sais pas si popen sous windows).
 
La solution propre, c'est de faire le ping programatiquement, soit à la main en envoyant des packets ICMP comme un grand, soit en utilisant une lib qui sait faire ça (ne me demande pas, je n'en connais pas).

n°1807094
Joel F
Real men use unique_ptr
Posté le 31-10-2008 à 20:42:49  profilanswer
 

popen sur ping ca passe encore, c'ets pas si sale. Du moins moins que system :E

n°1807115
d'jo
Posté le 31-10-2008 à 21:35:58  profilanswer
 

Malheureusement je suis sous Windows XP. Je veux bien le faire manuellement, mais comment envoyer ses packet etc... Connaissez vous un tuto bien fait ou un exemple ??
 
Merci

n°1807127
Joel F
Real men use unique_ptr
Posté le 31-10-2008 à 22:05:10  profilanswer
 

bah sinon, boost::asio et les protocoles associés


Message édité par Joel F le 31-10-2008 à 22:05:16
n°1807177
xilebo
noone
Posté le 01-11-2008 à 07:43:24  profilanswer
 

C'est pas du C :)
 
 
Voici un lien sur le paquet contenant les sources de la commande ping : http://www.skbuff.net/iputils/iputils-current.tar.bz2
 
C'est la version linux, mais tu peux facilement adapter ça sous windows.
 
Le principe est assez simple, en gros tu crées une socket avec le protocole ICMP (celui qui permet de faire des requêtes ping), tu te connectes sur la socket, tu envoies une trame ECHO, tu attends la réponse, et tu mesures le temps entre l'envoi et la réception. Tu peux en envoyer plusieurs pour faire une moyenne, car 1 seule trame peut effectuer une mesure incohérente.
 
Format d'une trame ICMP : http://fr.wikipedia.org/wiki/ICMP  (ça devrait te suffire), ou bien carrément la RFC  : http://abcdrfc.free.fr/rfc-vf/rfc792.html  
 

n°1807196
Joel F
Real men use unique_ptr
Posté le 01-11-2008 à 11:30:33  profilanswer
 

faut que j'apprene à regarder les sous-sections v_v

n°1807206
d'jo
Posté le 01-11-2008 à 12:36:47  profilanswer
 

ok je vais regarder merci

n°1807213
d'jo
Posté le 01-11-2008 à 13:02:48  profilanswer
 

Je viens de regarder les sources de "ping.c", le principe est en effet simple, mais le code est lui long et complex !!. Il n'existe aucun moyen plus "bourrin" mais plus simple, comme le popen, mais permettant de récupérer les valeurs retournées ? (mon code n'a pas besoin d'être portable ni très propre c'est un truc perso)
 
Merci

n°1807216
Joel F
Real men use unique_ptr
Posté le 01-11-2008 à 13:16:51  profilanswer
 

tu peut recupérer les sorties avec popen :o
 
http://www.linux-kheops.com/doc/ma [...] pen.3.html

mood
Publicité
Posté le 01-11-2008 à 13:16:51  profilanswer
 

n°1807266
d'jo
Posté le 01-11-2008 à 15:55:27  profilanswer
 

bon impec: après quelques manipulations pénible, je peux récupérer mes données. seul problème, c'est qu'à chaque ping il m'ouvre le shell ( et le "&" de linux ne marche pas sur windows)... Qq'un aurait-il une idée pour arranger ça ( en fait je fais de la SDL avec et l'aparition ce cet écran en plus de ma fenêtre principale est embêtante)
 
Merci


Message édité par d'jo le 01-11-2008 à 15:56:32
n°1809049
d'jo
Posté le 06-11-2008 à 16:11:08  profilanswer
 

up ?

n°1809097
xilebo
noone
Posté le 06-11-2008 à 17:27:38  profilanswer
 

Ma solution ne te plait pas ? elle est pourtant simple et peut se faire en une vingtaine de lignes de code.
 
Sinon, si tu es sous windows, utilise la fonction CreateProcess. Elle a un tas de paramètres décrits dans la documentation MSDN (que l'on trouve en ligne), et l'un d'eux est une structure STARTUPINFO dans laquelle tu peux préciser les flux d'entrée et de sortie du processus fils. Ainsi, tu peux rediriger la sortie standard de ton processus fils vers un flux de ton application.

n°1809623
d'jo
Posté le 07-11-2008 à 17:08:41  profilanswer
 

20 lignes ... je n'ai pas du comprendre alors. Je vais regarder pour la fonction CreateProcess, mais comme j'ai précisé au début, je ne suis pas un programmeur chevronné et donc je n'ai pas du savoir identifier la vintaine de ligne utile pour moi dans la fonction ping.c du package.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Récupération de temps de réponse (PING) en C

 

Sujets relatifs
[DRUPAL] C'est içi?probleme de programmation en C
ACTIONSCRIPT : Problème bouton/récupération champ texte[Resolu] Pbm de "récupération de paramètres" avec Ajax.Request
[C#] simuler un click souris [résolu][C#] Excel : Verification classeur fermé
envoie automique reponse dosBorland C++ et DBEdit
[php] Scan de dossiers, sous dossier, et récupération du cheminProblème Boost & STLPort sous Mingw (sous wxDev-C++)
Plus de sujets relatifs à : Récupération de temps de réponse (PING) en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR