begin process at 2012 02 11 00:35:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

PING sous protocole TCP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

PING sous protocole TCP

lundi 16 juin 2003 à 10:11:39 | PING sous protocole TCP

ivdz

Bonjour,

J'ai besoin de votre aide. Je travaille sous C++ Builder 6. Je dois envoyer un message ICMP de Type Echo Request puis récupérer le message ICMP de type Echo Reply associé. Et ceci sous le protocole TCP (et non UDP, en UDP je l'ai déjà fait et ça marche) Bref je dois réaliser un Ping sous TCP sans utiliser ce qui existe déjà.
Je suis totalement débutante en ce qui concerne la programmation réseau (socket .)

Voilà mon code et cela ne marche pas. Mon programme marche partiellement, c'est-à-dire que l'initialisation de winsock2, la création du socket, la connexion au serveur, la construction de la trame ICMP de type Echo Request et l'envoi du message fonctionnent. Après, ça bloque ou ça fait n'importe quoi (si je comment la boucle "do {}while( );") Cela fait des jours que je suis dessus mais je n'avance pas.

Merci d'avance
Isabelle


#define IP_SIZE 20
#define ICMP_SIZE 16
#define MAX_PACKET 100

int main(int argc, char * argv[])
{

WSADATA WSAData;
//Initialisation de Winsock2
if(WSAStartup(MAKEWORD(2,2), & WSAData)!=0)
{perror("WSAStartup"); exit(1);}

char packet_buf[100];
struct sockaddr_in their_addr; // Adresse de celui qui se
connecte
int sock_fd;
//création socket
if ((sock_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {perror("socket"); exit(1);}

their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(80);
their_addr.sin_addr.s_addr=inet_addr("217.12.3.11");

//connexion au serveur
if (connect(sock_fd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr_in)) == -1) {perror("connect"); exit(1);}

struct icmphdr *icmp_buf=(struct icmphdr *) packet_buf;
//fonction qui construit la trame ICMP de type Echo
//Request
icmp_buf=BuildTrame(icmp_buf);

//envoie d'une requête (ici, message ICMP de type Echo
//Request)
if (send(sock_fd, (char *)icmp_buf, 16, 0) == -1)
{perror("send"); exit(1);}

struct icmphdr * icmp = (struct icmphdr *) malloc(ICMP_SIZE); //allocation mémoire
/* Réception de la réponse ICMP avec l'entête IP */
do
{

fd_set readfds;
FD_ZERO(&readfds);
timeval tv;
tv.tv_sec=5;
tv.tv_usec=0;

FD_SET(sock_fd, &readfds);
if(select(sock_fd+1,&readfds,NULL,NULL,&tv)<0)
{perror("select"); exit(1);}

if(recv(sock_fd, packet_buf, IP_SIZE+ICMP_SIZE, 0)<0)
{perror("recv"); exit(1);}
else {
// Récupération de la partie ICMP du packet
memcpy(icmp, &packet_buf[IP_SIZE], ICMP_SIZE);
}
}while(icmp->type!=0); //ICMP_ECHO REPLY

struct time tps;
gettime((struct time *)&tps);
//Affiche l'heure au moment de la réception du message
//et l'heure contenue dans le message réceptionné et
//calcul leur différence.
double diff=diff_time(&tps,(struct time *)icmp->data);

cout<<"Délais : "<<diff<<" sec. "<<endl<<endl;
}//main
lundi 16 juin 2003 à 16:17:26 | Re : PING sous protocole TCP

roswell117

dsl pour le retard mais j'ai enfin mis ma source pour faire un ping, alors si ca peut t'interesser :

http://www.cppfrance.com/article.aspx?Val=2020
mardi 22 juin 2004 à 14:20:08 | Re : PING sous protocole TCP

valoue

Salut,
Je developpe actuellement une appli Client/Serveur en C++.
J'ai utiliser les socket pour etablir la communication, des threads traitent les demandes des clients au niveau du serveur...
Pour le moment je testais la communication avec des phrases en caractères ("Salut serveur" ... "Salut client" ...).
Maintenant, je veuxpasser à des choses plus serieuses et plus techniques.

Je veux realiser une méthode qui fait un ping depuis le client vers le serveur. Coté client, no pb !! Je me suis aidée du prog que tu as donné (merci d'ailleurs).
Mais côté serveur, il va falloir que j'analyse les trames recues et formuler la reponse.

Je ne vois pas comment foruler la reponse au ping.
Pourrais tu m'aider stp? du moins m'expliquer comment faire, voire me rediriger vers qqchose d'existant ??

Merci bcp !


Valoue
mardi 22 juin 2004 à 14:50:09 | Re : PING sous protocole TCP

valoue

Un question de plus:
est ce le systeme qui doit repondre tout seul au ping du client ou dois je formuler la reponse ?
Valoue


Cette discussion est classée dans : icmp, sock, struct, fd, addr


Répondre à ce message

Sujets en rapport avec ce message

passage de structure a un thread [ par anthonycosson ] bijour tout le monde g un pb qui me blocje voudrai savoir comment passer une structure a AfxBeginThread et récupéré les donner précédement enregistrer bonjour j'ai un problème dans un code ping implémenter avec le c++, que je n'arrive pas à résoudre. s'il vous plait aider moi. Merci d'avance. [ par talelham ] bonjour j'ai un problème dans un code ping implémenter avec le c++, que je n'arrive pas à résoudre. s'il vous plait aider moi. Merci d'avance. voilà getpeername() [ par lektrosonic ] Bonsoir,je veux recuperer l'addresse ip du client qui est connecte au serveur.J'appele getpeername mais ca n'a pas l'air de marcher..SOCKADDR_IN ws_co winsock raw socket ping icmp recv [ par 4aBestWord ] bonjour,j'ai repris un code source en c pour faire un un ping icmp en utilisant les raw sockets sous windows (XP). L'envoie du ping fontionne bien par téléchargement d'un fichier via l'url [WINSOCK] [ par MorbhAck ] Bonsoir tout le monde!j'ai un problème, j'essai de télécharger un fichier .rar avec GETet quand je veux extraire le rar il m'indique que le fichier es RESEAU PAR SOCKET EN C [ par aziatedu13 ] bonjour,je veux faire un truk extremement simple pour certain, mais assez très difficile pour moi..voila je souhaiterai pouvoir afficher dans une cons multicast en c sous windows [ par tenrod ] Bonsoir a tous,voila j'ai un petit (voire un gros) pb avec le développement d'une application me permettant de faire du multicast en c sous windows.J' "linked error" en C [ par thebadskull ] voila j'ai devc++ sous windows XPj'ai lu un tuto sur comment manier les sockets...voici mon code :void Scann(char buffer[],int port){WSADATA WSAData;W pb pr écouter sur un port... [ par Gendal67 ] Bonsoir all...J'avais envie de créer une application utilisant les sockets liées à une connection TCP/IP qui écoute sur un port précis. Jusque là, pas telechargement d'un fichier sur internet [ par fredleconte ] Salut, Voila j'essaie de telecharger un fichier http mais je ne sais pas comment recevoir le fichier help please. voici le programme: // Download d'u


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,934 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales