IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Certains paquets ne sont pas envoyés avec WS2


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Certains paquets ne sont pas envoyés avec WS2
    Bon voici le problème :

    J'essaye d'envoyer des paquets http avec winsock2 et, certains paquets sont envoyés, d'autres pas ... Je comprends pas pourquoi.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    char buffer[128];
    char *payload = "POST /";
    
    int main()
    {
    	WSADATA wsaData;
    	WORD version;
    	int error;
    
    	version = MAKEWORD( 2, 0 );
    	error = WSAStartup( version, &wsaData );
    	
    	if ( error != 0 )
    	{
    		printf("Initialization failure : %d\n", error);
    	    return 1;
    	}
    
    	SOCKET client;
    	client = socket( AF_INET, SOCK_STREAM, 0 );
    	hostent *host;
    	host = gethostbyname( "google.com" );
    
    	struct sockaddr_in sin;
    
    	memset( &sin, 0, sizeof sin );
    
    	sin.sin_family = AF_INET;
    	sin.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
    	sin.sin_port = htons(80);
    	
    	if ( connect( client, (sockaddr*)&sin, sizeof sin ) == SOCKET_ERROR )
    	{
    		printf("Connection failed\n");
    	    return 2;
    	}
    
    	printf("sending : %s\n", payload);
    
    	if(send(client, payload, strlen(payload), 0) == SOCKET_ERROR)
    	{
    		printf("Error : %d", WSAGetLastError());
    		return 3;
    	}
    	recv(client, buffer, 4096, 0);
    	printf(buffer);
    	closesocket(client);
    	WSACleanup();
    
    	return 0;
    }
    Le paquets envoyé dépend donc de la chaine payload. Pour vérifier ce qui se passe, j'écoute le traffic avec wireshark.

    Si payload = "GET /", tout est normale : le paquet est envoyé et le serveur me répond. (voir fichier correct.pcap).
    Si payload = "GET / HTTP/1.1" ou "POST /" (j'ai juste essayé avec ceux là) : il y a une connection qui se crée mais aucun paquets n'est envoyé, puis l'application attends une réponse avec recv() (vérifié avec le déboggueur) mais qui évidemment ne vient jamais (voir incorrect.pcap).

    Et c'est ça que je comprends pas : pourquoi est-ce que selon les données envoyée le paquets est envoyé ou pas ? Je tourne sous windows 7 64 bit

    EDIT :
    J'ai modifié une partie du code comme suis pour afficher le nombre d'octets envoyés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    error = send(client, payload, strlen(payload), 0);
    	if(error == SOCKET_ERROR)
    	{
    		printf("Error : %d", WSAGetLastError());
    		return 3;
    	}
    	printf("Bytes sent : %d\n", error);
    Et ça m'affiche bien le nombre d'octet qui aurait dû être envoyé (14 et 6) mais pour wireshark il y a toujours rien d'envoyé et le serveur me répond pas ...
    note : j'ai aussi essayé en désactivant le pare-feu windows
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Points : 84
    Points
    84
    Par défaut
    Bonsoir, je ne sais pas si ca va résoudre votre souci cependant, si je dis pas de bétise il faut rajouter \r\n à la fin de chaque ligne pour le protocole HTTP.

    Je vais regarder au pcap

    Edit :

    Ce qui est choquant, c'est qu'entre le temps entre l'initialisation, le premier SYN et la coupure de connexion y'a 11s alors que dans le fichier correct le tout se déroule en 1s.

    Petite coquille aussi du coté de fonction recv tu déclare un buffer de 128 octets alors que dans la fonction tu indique une taille de 4096, tu risques le buffer overflow :!

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui oui effectivement j'étais partit sur 4096 puis j'ai changé pour 128 (je pensais au début que c'était recv qui avait un problème) mais j'ai oublié de tout modifier
    Pour les 11 s c'est uniquement parce que j'ai fermé l'application ... Sinon ça dépend du temps de keep-alive du serveur ...
    Pour les \r\n je suis même pas arrivé à cette étape ...
    Par contre j'ai testé sur un autre ordi sous windows 7 64 bit et même problème ...
    Je me demande si je vais pas mettre ça sur le forum officiel microsoft, je suis étonné du peu de réponse

    EDIT :
    ah oui j'ai même testé en java, même problème
    Je pense que je vais testé sur ma machine virtuelle ubuntu.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Points : 84
    Points
    84
    Par défaut
    Je vais essayer ton code voir si j'ai le même souci chez moi

    EDIT :

    De mon coté pas de souci j'ai bien le POST qui est envoyé :s

    C'est d'autant plus étrange que le nombre d'octets renvoyé est correct ( dans la portion de code que tu a modifié )

    Quand tu utilises GET ca fonctionne tout le temps ( sait on jamais un concours de circonstance ... ) ?

    Tes OS sont tous en 64 bits ou il n'y avait que ton 7 ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui j'ai testé sur deux machines différentes (carte réseau différente) sous windows seven 64 bits
    Et hier j'ai essayé sur un machine virtuelle tournant sous ubuntu 32 bits, sous windows seven 64, même chose, donc le problème doit être assez profond ...
    Mais là je vais tester sur un linux mais directement (pas de machine virtuelle).
    Le "GET /" est envoyé à tous les coups.

    EDIT :
    En fait non :
    "GET /" est pas envoyé
    "GET /\n" est envoyé
    "GET /\r\n" est envoyé
    "GET / HTTP/1.1\r\n" est pas envoyé
    "POST /" est pas envoyé
    "POST /\n" me donne une erreur incompréhensible et est envoyé
    "POST /\r\n" me donne la même erreur et est envoyé

    L'erreur je la met en jpg et je vais rechercher ça sur internet.

    EDIT2 :
    C'est pas grave c'est juste une erreur de format dans le dernier printf
    Images attachées Images attachées  

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Points : 84
    Points
    84
    Par défaut
    As tu essayer le mode compatibilité ?

Discussions similaires

  1. certains emails ne sont pas achemines (OVH)
    Par redah75 dans le forum Réseau
    Réponses: 2
    Dernier message: 17/10/2008, 18h33
  2. Mes parametres POST ne sont pas envoyés..
    Par Golgotha dans le forum Débuter
    Réponses: 13
    Dernier message: 11/06/2008, 12h27
  3. Réponses: 10
    Dernier message: 17/10/2007, 10h16
  4. [Mail] Les e-mails dans Bcc ne sont pas envoyés
    Par Klimium dans le forum Langage
    Réponses: 4
    Dernier message: 23/08/2007, 12h29
  5. Certaines FAQ ne sont pas téléchargeables
    Par Sytchev3 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 29/05/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo