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 :

problème avec setsockopt() mode RAW


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut problème avec setsockopt() mode RAW
    bonjour tout le monde,

    comme l'indique le sujet du message, je souhaiterais stoquer une valeur exa dans une variable (0x01) mais je ne sais pas comment déclarer ma variable pour ce genre de manip.

    Donc si quelqu'un a une idée, je suis a l'ecoute.

    merci d'avance.
    Visual Studio .net 2003

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Y'a pas de truc, mais une confusion.
    Un nombre c'est un nombre. Hexadécimal, octal, binaire, décimal, etc... c'est la représentation de ce nombre.
    En l'occurence ce que tu veux c'est stoquer un entier, que sa valeur d'initialisation soit donnée en hexadécimal ou non, ça ne change rien. D'où la syntaxe :

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    merci, mais ca ne marche pas, je ne comprend pas d'ou vien le problème!!!

    en fait, ma variable est bien initialisée avec la bonne valeur, mais tout est modifié lors de l'envoi!!!

    Je craque nerveusement ...
    Visual Studio .net 2003

  4. #4
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    de quel envoi parle tu ?

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    en fait je fais un prog de trace route qui envoie une socket totalement formaté par le programme (socket RAW) mais quand j'analyse ce qui est envoyé, je n'ai pas les meme valeurs que celle de l'application.

    J'en déduit que windows modifi mes valeurs mais comment parer ce problème????

    ca fait un bout de temps que je suis dessus et je commence a ne plus y croire ...
    Visual Studio .net 2003

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Tu n'aurais pas simplement un problème d'endianess ?

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    donc la je n'ai pas tout compris sur le endianess!!

    en tout cas mes socket RAW ne parte pas ou du moins si mais mal formée!

    Voila comment je déclare ma socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socketRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
    Voila le code pour l'envoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sock_send.sin_family = AF_INET;
    sock_send.sin_addr.s_addr = inet_addr("192.168.0.1");
    
    
    
    		//datSize est une valeur entirère stockant la taille total de mon paquet (entête IP + ICMP)
    		int dataSize = sizeof(struct ICMP_HEADER) + sizeof(struct IP_HEADER);
    
    		ICMP_PAQUET  *pPaquet;	// Déclare un pointeur sur la stucture IP_HEADER. */
    		pPaquet = &paquet;	// Initialisation du pointeur
    
    		sendto(socketRaw, (char *)pPaquet, dataSize, 0, (struct sockaddr *)&IP_sock_info, sizeof(IP_sock_info));
    je me demande si je dois configurer la socket avec
    setsockopt
    car comme je forme mes paquets, ils ne sont pas pris en compte j'ai lu sur de site qu'il fallait faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char sockOpt = 1;
    setsockopt(socketRaw, IPPROTO_IP, IP_HDRINCL, (char*)&sockOpt, sizeof(sockOpt));
    mais moi quand je compile mon prog avec ces lignes j'ai l'erreur sur IP_HDRINCL qui me dit identificateur non déclaré. quand je passe la sourie dessus, il me met #define IP_HDRINCL 2!!

    si quelqu'un a une idée ...
    Visual Studio .net 2003

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    personne n'a, meme, une petite idée???
    Visual Studio .net 2003

  9. #9
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Peut-on voir comment tu crée ton paquet ?

    Il est bien possible que windows réecrive des choses à ta place. Qui sait ce qu'il se passe dans ce bout de code complétement fermé ? Il faudrait connaitre la version précise de windows pour donner de plus amples informations.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Tu bosses sous XP SP2 ?

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    oui, je travail avec XP SP2 mais je suis connecté en admin.

    Désolé pour le retard!
    Visual Studio .net 2003

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Peut être un problème avec le firewall d'XP PS2. Fait une recherche sur le forum Dev. Windows.

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    non, le problème ne vient pas du firewall, il est désactivé (services y compris).

    Le problème est que quand je code, j'ai une erreur générée sur "IP_HDRINCL" alors que ce code est bien dans la doc de visual (msdn)

    C'est le 3eme parametre de ma fonction "setsockopt()"

    voila l'erreur générée apres un F7:
    : error C2065: 'IP_HDRINCL' : identificateur non déclaré
    Mais quand je passe ma sourie dessus, j'ai "#define IP_HDRINCL 2". j'ai testé de remplacer IP_HDRINCL par 2 mais ca ne marche pas ...

    je suis vraiment déboussolé!!
    Visual Studio .net 2003

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Tu es sous windows ...
    question au passage, as tu utilisé les fonctions

    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);

    etc ... ?

    Car je ne connais pas les erreurs retournées si ça n'est pas le cas, mais bon

  15. #15
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    oui, je suis bien sous windows XP SP2.

    en ce qui concerne mes socket voila comment j'initialise le tout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WSADATA WSAData;                        
    WSAStartup(MAKEWORD(2,2), &WSAData);
    
    socketRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
            if(socketRaw == INVALID_SOCKET)
            {
                Form1::label_erreur->Text = "Impossibilité de créer la socket!";
            }
            // IPPROTO_IP IP_HDRINCL ==> Indique que l'IP header doit etre fourni par des données externes
            if((result = setsockopt(socketRaw, IPPROTO_IP, IP_HDRINCL, (char*)&sockOpt, sizeof(sockOpt))) == SOCKET_ERROR)
            {
                Form1::label_erreur->Text = "Impossibilité d'initialiser la socket!";
            }
    voila le code qui explique comment je crée ma socket et comment je l'initialise.
    Visual Studio .net 2003

  16. #16
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Que te dit WSAGetLastError ?

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    en fait je ne peux pas voir quel erreur est générée car quand je génére la solution, j'ai une erreur sur
    error C2065: 'IP_HDRINCL' : identificateur non déclaré
    Visual Studio .net 2003

  18. #18
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <WinSock2.h>
    #include <ws2tcpip.h>

  19. #19
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    merci, il me manquait un include.
    #include <ws2tcpip.h>
    Cependant, a chaque amélioration mon programme recul ... maintenant il n'accepte plus de mettre les option sur ma socket. Le code suivant me retourne -1 a chaque fois, alors qu'il marchait avant ... je suis perdu!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    result = setsockopt(socketRaw, IPPROTO_IP, IP_HDRINCL, (char*)&sockOpt, sizeof(sockOpt));
    franchement, je ne sais plus par ou continuer mon programme.

    voila l'erreur que j'ai récupéré avec WSAGetLastError() :

    WSAEINVAL
    10022 Invalid argument. Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.
    Visual Studio .net 2003

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    tu ne spécifie pas le port sur lequel il faut envoyer ..

    sock_send.sin_port = htons(<ton_port>);

    essaye et dis si ça change quelque chose, sinon je sais pas.
    au fait, pourquoi des socket raw ?

Discussions similaires

  1. Problème avec le mode graphique
    Par dot-_-net dans le forum C++
    Réponses: 6
    Dernier message: 27/12/2007, 18h54
  2. Réponses: 3
    Dernier message: 16/11/2007, 17h39
  3. Problème avec le mode debug
    Par mambo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/09/2007, 13h10
  4. [TP] Problème avec le mode VESA
    Par dectroo dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 29/01/2007, 13h44
  5. problème avec setsockopt() mode RAW
    Par poporiding dans le forum C++
    Réponses: 15
    Dernier message: 24/04/2006, 17h17

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